Php checkbox mysql

Résolu
taint1 Messages postés 5 Date d'inscription mercredi 7 décembre 2005 Statut Membre Dernière intervention 5 février 2006 - 2 févr. 2006 à 14:25
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 - 2 févr. 2006 à 15:48
Bonjour à tous,
Je suis à la recherche d'aide pour la mise en place d'une checkbox. J'ai réussi a afficher les checkbox mais je ne trouve pas comment récupéré les valeurs en fonction des case cochées.
J'ai commencé le php il y a peu alors il est probable qu'il y ai de nombreuses coquilles dans mon programme.
J'espère que les informations ci dessous vont cvous permettre de comprendre ce que je recherche à faire.
Merci d'avance a toute personne essayant de m'aider.

Ma page activité+.php affiche cela:
informatique

<FORM action= activite.php method=post> reseaux
<FORM method="post" action="activite.php"> internet
<FORM method="post" action="activite.php"> telephonie
<FORM method="post" action="activite.php"> commercial
<FORM method="post" action="activite.php"> maintenance gros systemes
<FORM method="post" action="activite.php"> operateur radiocom
<FORM method="post" action="activite.php"> maintenance et gestion de materiel reseau ou telephonie de grande capacite
<FORM method="post" action="activite.php"> prestation de services





Mais je ne sait pas comment faire pour récupéré la valeur en face de la case coché quand j'effectue une recherche.
Si possible il faudrai que mon programme puisse traiter plusieurs case.

Activité+.php:
<?php
include('connexion.php');


$reponse = mysql_query("SELECT type FROM activite");
while ($donnees = mysql_fetch_array($reponse) )
{
?>
<form action="activite.php" method="post">


<?php
echo $donnees['type'];
echo "
";
}
mysql_close();
?>




</form>

Activite.php:
<?php //debut instruction PHP
include('connexion.php'); //appel de la page php connexion permettant de se connecter et de selectionner la base de données


$rq="select F.numero_fiche, F.numero_entreprise, raison_sociale, code_postal, ville, annee, numero_cd, repertoire, titre_rapport, resume, type
from fiche F, entreprise E, activite A, lieu L
where F.numero_entreprise=E.numero_entreprise
and F.numero_fiche=L.numero_fiche
and L.numero_activite=A.numero_activite
and type like ".$_POST['case']."";


$reponse = mysql_query($rq); // Requête SQL
if (!$reponse) {
echo 'Impossible d\'exécuter la requête : ' . mysql_error();
exit;
}


$reponse = mysql_query($rq);
$donnees = mysql_fetch_array($reponse);



if($donnees){ //si une réponse est contenue dans des données, alors :
while ($donnees)
{
echo ' Fiche Numero : ' . $donnees[0].'' ;
echo ' Titre du rapport : ' . $donnees[8].'
';
echo ' Raison sociale de l entreprise est : ' . $donnees[2].' ' ;
echo ' Ville : ' . $donnees[4].' ' ;
echo ' Code postal : ' . $donnees[3].' ' ;
echo ' Année du stage : ' . $donnees[5].' ' ;
echo ' Activité : ' . $donnees[10].' ';
echo ' Le rapport de stage se trouve sur le cd ' . $donnees[6].'';
echo ' et son répertoire est ' . $donnees[7].' ';
echo ' Résumé :' . $donnees[9].' ';
echo ' <hr />';
$donnees =mysql_fetch_row($reponse);
}
}
else { //sinon, afficher le message suivant :
echo 'Aucun stage n\'a été effectué dans le département sélectionné !!!';
echo 'Veuillez sélectionner un autre département !';
}
?>

Structure de la table `activite`


CREATE TABLE `activite` (


`numero_activite` int(2) NOT NULL auto_increment,


`type` varchar(200) NOT NULL default '',


PRIMARY KEY (`numero_activite`)


) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=10 ;


--


-- Contenu de la table `activite`


--


INSERT INTO `activite` VALUES (1, 'informatique');


INSERT INTO `activite` VALUES (2, 'reseaux');


INSERT INTO `activite` VALUES (3, 'internet');


INSERT INTO `activite` VALUES (4, 'telephonie');


INSERT INTO `activite` VALUES (5, 'commercial');


INSERT INTO `activite` VALUES (6, 'maintenance gros systemes');


INSERT INTO `activite` VALUES (7, 'operateur radiocom');


INSERT INTO `activite` VALUES (8, 'maintenance et gestion de materiel reseau ou telephonie de grande capacite');


INSERT INTO `activite` VALUES (9, 'prestation de services');

</FORM>

4 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
2 févr. 2006 à 15:48
Argh...le tableau était très bien case[], c'est la bonne méthode.

Et dans le cadre d'un affichage de données tirées d'une bdd, le plus simple est de mettre l'id de la ligne dans le tableau. Exemple :
<?php
$sQuery = mysql_query ('SELECT perso_id, perso_nom FROM personnages');
while ($aRow = mysql_fetch_assoc ($sQuery)) {
echo '',$aRow['perso_nom'];
}

?>

et tu récupères tous tes id pour les cases cochées dans le tableau $_POST['case'].

Par exemple : $_POST['case'][0] = 2 // 1ère case cochée, perso_id 2,
$_POST['case'][1] = 8 // 2de case cochée, perso_id 8
3
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
2 févr. 2006 à 15:09
Hello,

$_POST['case'] est un tableau. Donc echo $_POST['case'] ne renverra rien (ou plutôt si : array.

Tu dpois parcourir ce tableau pour récupérer les infos cochées.
Essaye un print_r ($_POST['case']); tu y verras plus clair :-)
0
supergyver Messages postés 29 Date d'inscription jeudi 19 février 2004 Statut Membre Dernière intervention 14 février 2007
2 févr. 2006 à 15:20
Tout d'abord, dans ta première page, il faut que tu donnes un nom
différent pour chaque checkbox. Par exemple case_1, case_2, etc.



<?php

include('connexion.php');
$reponse = mysql_query("SELECT numero_activite,
type FROM activite");
while ($donnees = mysql_fetch_array($reponse) )
{
?>
<form action="activite.php" method="post">
</gras>" />



<?php
echo $donnees['type'];
echo "
";
}
mysql_close();
?>





</form>



Ensuite, une fois le formulaire validé, seuls les cases cochées font parties de l'URL et leur valeur est "on".

Ainsi, si tu as 3 checkbox "case_1", "case_2" et "case_3" et que seule
"case_2" était cochée à la validation du formulaire, dans les
paramètres de l'URL, il n'y aura que "case_2"



Donc, dans ta seconde page, il faut que tu utilises les identifiants des cases



foreach( $cle, $valeur) in $_POST{ // Pour chaque variable contenu dans $_POST

if( substr( $cle, 0, 5) = "case_"){ // Si c'est une des checkbox

list( $a, $b) = explode( "_", $cle); //
dans $a, il y aura "case", dans $b, il y aura l'identifiant

$rq="select F.numero_fiche, F.numero_entreprise, raison_sociale,
code_postal, ville, annee, numero_cd, repertoire, titre_rapport,
resume, type

from fiche F, entreprise E, activite A, lieu L

where F.numero_entreprise=E.numero_entreprise

and F.numero_fiche=L.numero_fiche

and L.numero_activite=A.numero_activite

and type like ".$b."";

/* ... suite de ton traitement ... */



}

}



J'espère avoir été assez clair
0
supergyver Messages postés 29 Date d'inscription jeudi 19 février 2004 Statut Membre Dernière intervention 14 février 2007
2 févr. 2006 à 15:29
J'avais fait de mémoire et je crois que j'ai une erreur dans l'utilisation du foreach...

Regarde plutôt le message http://www.phpcs.com/code.aspx?id=13349 qui devrait t'aider
0
Rejoignez-nous