Php checkbox mysql

Résolu
Signaler
Messages postés
5
Date d'inscription
mercredi 7 décembre 2005
Statut
Membre
Dernière intervention
5 février 2006
-
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
-
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

Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
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
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
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 :-)
Messages postés
29
Date d'inscription
jeudi 19 février 2004
Statut
Membre
Dernière intervention
14 février 2007

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
Messages postés
29
Date d'inscription
jeudi 19 février 2004
Statut
Membre
Dernière intervention
14 février 2007

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