PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 09-08-2009 17:15:03

patlechat
Membre
Inscription : 13-05-2009
Messages : 18

[Résolu] erreur sur case à cocher

bonjour,

j'ai créé un formulaire qui se connecte à une base mysql et ce formulaire me permet de receptionner des dossiers à l'aide de case à cocher or j'ai une erreur Warning: Invalid argument supplied for foreach() en ligne 13:
voici mon code de formulaire:


$q = mysql_query("SELECT id_person,genre,nom,prenom,genre,adresse1,adresse2,codepostal,ville,mail,diplome_demande,diplome_demande2,impression_etiquette FROM infos WHERE impression_etiquette = 1 AND receptiondossier=0 ORDER BY nom");
$reponse=mysql_num_rows($q);
if ($reponse !=0)
{

print"<BR>";
print "<DIV ID=\"listeetiquette\"><FORM NAME=\"forme1\" method=\"post\" action=\"traitement_reception.php\"><TABLE BORDER=\"0\" align=\"center\" CELLPADDING=\"0\" width=\"90%\" CELLSPACING=\"0\">";
print "<TR align=\"center\" bgcolor=\"#FFCC33\"><td>RECEPTIONNE</td><td> </td><td>PRENOM</td><td>NOM</td><td>VILLE</td><td>MAIL</td></TR>";
print "<TR><TD colspan=\"8\"> </TD></TR>";
while ($r = mysql_fetch_array($q))
{
print "<TR><TD><INPUT TYPE=\"checkbox\" name=\"liste\" value=\"".$r['id_person']."\"></TD>";
print "<TD>".$r['genre']."</TD><TD>".$r['prenom']."</TD><TD>".$r['nom']."</TD><TD>".$r['ville']."</TD><TD><A HREF=\"mailto:".$r['mail']."\">".$r['mail']."</A></TD></TR>";
}

print "</TABLE>";
print "</DIV>";
print "<BR><BR><BR><BR><BR><BR><BR><BR>";
//print "<DIV>";
print "<center>";
print"<input type=\"submit\" name=\"Submit\" value=\"Valider\">";
print"<input type=\"button\"  value=\"tout cocher\" onClick=\"this.value=check(this.form.liste)\">";
print "</center>";
print"</FORM>";
 

voici ma page de gestion des case à cocher:

if (!empty($_POST['liste']))
{
$valeurcoche=$_POST['liste'];
$drapo_receptiondossier = "1";
$date= date("d/m/Y");
$heure = date("H:i");
echo $valeurcoche;

foreach ($valeurcoche as $value) //tu passes la valeur actuelle dans une clef (LIGNE 13)
 {
$query="select nom,prenom,genre,adresse1,adresse2,codepostal,ville,impression_etiquette,date_reception,receptiondossier from infos WHERE id_person = $value";
$resultat=mysql_query($query);

// On imprime les étiquettes
//while($row=mysql_fetch_array($resultat))
while($row=mysql_fetch_assoc($resultat))
{
//for($i=1;$i<=40;$i++)
$nom = $row['nom'];
$prenom = $row['prenom'];
$civilite = $row['genre'];
$adresse1 = $row['adresse1'];
$adresse2 = $row['adresse2'];
$codepostal = $row['codepostal'];
$ville = $row['ville'];

//mise à jour du drapeau comme quoi le dossier a été réceptionné et date de réception
mysql_query ("UPDATE infos SET receptiondossier = $drapo_receptiondossier ,date_reception = $date  WHERE id_person = $value");

merci pour votre aide

Hors ligne

#2 09-08-2009 22:53:23

moijhd
Membre
Inscription : 13-06-2009
Messages : 167

Re : [Résolu] erreur sur case à cocher

Bonsoir,

l'erreur indique que l'argument donné à foreach n'est pas du bon type : il faut fournir un tableau et tu fournis une chaine de caractères :
il faut ajouter des crochets pour chaque checkbox afin de récuperer le tableau des cases selectionnées.

Dans ton cas :

[code php]echo "<INPUT TYPE=\"checkbox\" name=\"liste[]\" value=\"".$r['id_person']."\">[/code]
Un exemple, soit le fichier test.php :

[code php]<form action="test.php" method="post" enctype="multipart/form-data">
<input type="checkbox" name="liste[]" value="a" />
<input type="checkbox" name="liste[]" value="b" />
<input type="checkbox" name="liste[]" value="c" />
<input type="submit" />
</form>
<?php
if(isset($_POST['liste'])){
    print_r($_POST['liste']);
}
else{
    echo 'Pas de selection';
}
?>[/code]
Par ailleurs, je trouve ton code difficile à lire. Il y a d'abord un problème de logique d'écriture à savoir majuscules, minuscules et peut-être une façon plus simple de présenter les choses :

[code php]<?php
$q = mysql_query("
    SELECT
        id_person,
        genre,
        nom
    FROM
        infos
    WHERE
        impression_etiquette = 1 AND
        receptiondossier = 0
    ORDER BY
        nom
    ");
$reponse = mysql_num_rows($q);
if($reponse != 0){
     ?>
<br>
<div id="listeetiquette">
<form name="forme1" method="post" action="traitement_reception.php">
  <table border="0" align="center" cellpadding="0" width="90%" cellspacing="0">
    <?php
/*
...
*/
?>
    <?php
while ($r = mysql_fetch_array($q)){
?>
    <tr>
      <td><input type="checkbox" name="liste[]" value="<?php echo $r['id_person'];?>"></td>
    </tr>
    <?php
/*
...
*/
?>
    <?php
}
?>
  </table>
</form>
<?php
/*
...
*/
?>[/code]
Bon, il est vrai qu'après cela devient assez personnel big_smile

Dernière modification par moijhd (09-08-2009 22:56:56)

Hors ligne

#3 11-08-2009 09:55:21

patlechat
Membre
Inscription : 13-05-2009
Messages : 18

Re : [Résolu] erreur sur case à cocher

bonjour,

Merci il prend en compte maintenant mes cases à cocher qd je met ceci:


print "<TR><TD><INPUT TYPE=\"checkbox\" name=\"liste[]\" value=\"".$r['id_person']."\"></TD>";
 

mais par contre mon bouton tout cocher n'agit plus sur mes cases, comment je dois faire ??
ma fonction javascript pour tout cocher:


var checkflag = false;
function check(field) {
if (checkflag == false) {
  for (i = 0; i < field.length; i++) {
    field[i].checked = true;}
  checkflag = true;
  return "Tout décocher"; }
else {
  for (i = 0; i < field.length; i++) {
  field[i].checked = false; }
  checkflag = false;
  return "Tout cocher"; }
}

bouton tout cocher


print"<input type=\"button\"  value=\"tout cocher\" onClick=\"this.value=check(this.form.liste)\">";
 

Merci pour votre aide.

mais du coup mon bouton tout cocher n'agit plus sur mes cases à cocher, comment je dois faire ??
script bouton tout cocher:

Hors ligne

#4 11-08-2009 12:46:55

moijhd
Membre
Inscription : 13-06-2009
Messages : 167

Re : [Résolu] erreur sur case à cocher

Je propose cela, en relation avec l'exemple que j'ai donné précédement. Reste à vérifier la compatibilité :

[code php]
<script language="javascript" type="text/javascript">
function ToutCocher(formulaire, nom, action){
    // On recupere tous les inputs du form name="formulaire"
    var inputs = document.formulaire.getElementsByTagName('input');
    // On parcourt tous les inputs
    // pour trouver ceux qui sont des type="checkbox" et qui ont pour attribut name="nom"
    for(var i = 0; i < inputs.length; i++){
        if((inputs[i].type == 'checkbox') && (inputs[i].name == nom)){
            // On regarde l'action a effectué
            if(action == 'cocher'){
                inputs[i].checked = true;
            }
            if(action == 'decocher'){
                inputs[i].checked = false;
            }
        }
    }
}
</script>
<form name="formulaire" action="test.php" method="post" enctype="multipart/form-data">
<input id="liste[0]" type="checkbox" name="liste[]" value="a" />
<input id="liste[1]" type="checkbox" name="liste[]" value="b" />
<input id="liste[2]"  type="checkbox" name="liste[]" value="c" />
<input type="submit" />
<input type="button" onclick="ToutCocher('formulaire', 'liste[]', 'cocher')" value="Tout cocher" />
<input type="button" onclick="ToutCocher('formulaire', 'liste[]', 'decocher')" value="Tout décocher" />
</form>
<?php
if(isset($_POST['liste'])){
    print_r($_POST['liste']);
}
else{
    echo 'Pas de selection';
}
?>
[/code]

Hors ligne

#5 11-08-2009 20:18:07

patlechat
Membre
Inscription : 13-05-2009
Messages : 18

Re : [Résolu] erreur sur case à cocher

Merci je vais tester.

A+

Hors ligne

#6 12-08-2009 17:55:12

patlechat
Membre
Inscription : 13-05-2009
Messages : 18

Re : [Résolu] erreur sur case à cocher

j'ai opté pour ca comme code de mon bouton TOUT COCHER:


function swapliste(liste,bouton){
    var i=0;
    var coche=false;
    if(bouton.value=='Tout cocher'){
        coche=true;
        bouton.value='Tout décocher';
        }
    else{
        coche=false;
        bouton.value='Tout cocher';
        }
    while(liste[i]){
        liste[i].checked=coche;
        i++;
        }
}
 

Merci A+

Hors ligne

#7 12-08-2009 18:23:18

moijhd
Membre
Inscription : 13-06-2009
Messages : 167

Re : [Résolu] erreur sur case à cocher

Oui il fallait modifier : d'abord le teste, puis la boucle

Hors ligne

Pied de page des forums