Afficher valeur radio button sur ma bdd

Eléphanteau du PHP | 12 Messages

12 mai 2015, 10:12

salut,

voilà je n'arrive pas à afficher la valeur A ou P sur ma table mysqlet quand je clique sur absent ou present voilà ce que j'ai :

Image

Image

voici le code de ma page :
  <?php include "conn.inc.php";?>
<html>
<head>
<title> EMAK-LISTE DES ELEVES</title>
<style type="text/css">
TD{color :#353535;font-family:verdana }
TH{color :#FFFFFF;font-family:verdana;background-color:#336699 }
</style>
</head>
<style type="text/css"></style>
<LINK href="/emak/app/stili/st.css" type=text/css rel=stylesheet>
<body bgcolor="#AEC7DF" LEFTMARGIN="0" TOPMARGIN="0" marginwidth="0" marginheight="0">

<table  border="0" height="99.5" width="93.5%">
<CAPTION>
<tr>
          <td bgcolor ="#004080" colspan ="2" align="center" CLASS="title2">                                                                                                                         
                              L'APPEL DE PRESENCE 
              <a HREF="">
               <input name="button" type="image" class="NavButton" id="button1" onClick="window.print();" value="Imprimer" src="/emak/app/images/print.png"> 
            </a>     
        </td>
      </tr>
</CAPTION>
<tr>



<!--titres des colonnes!--> 
<tr>
      <td bgcolor ="gray" align="center" colspan ="1"  width ="20%" class ="tx4" >  Nom                          </td>
      <td bgcolor ="gray" align="center" colspan ="1"  width ="20%" class ="tx4" >  Prenom                     </td>
      <td bgcolor ="gray" align="center" colspan ="1"  width ="20%" class ="tx4" >  Present/Absent              </td>
      <td bgcolor ="gray" align="center" colspan ="1"  width ="20%" class ="tx4" >  Heure de cours                   </td>
      <td bgcolor ="gray" align="center" colspan ="1"  width ="20%" class ="tx4" >  Classe                     </td>
      <td bgcolor ="#AEC7DF" align="center" colspan ="1"  width ="13%" class ="tx4" >                                </td>
 </tr>
 
  <?php
    try
{
    $bdd = new PDO('mysql:host=localhost;dbname=emak;charset=utf8', 'root', '');
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}
        $reponse = $bdd->query('SELECT * FROM   tableau_journalier  order by id ');
        while ($donnees = $reponse->fetch())
         {
      ?>
           

<!--détail des lignes!--> 
<tr>
    
  <td bgcolor ="white" align="center" width ="20%"  class ="tx4" >  <?php echo $donnees ['CD_NOM'                   ] ; ?>  </td>
     <td bgcolor ="white" align="center" width ="20%"  class ="tx4" >  <?php echo $donnees ['CD_PRENOM'               ] ; ?>  </td>
<?php    

    try
{
    $bdd = new PDO('mysql:host=localhost;dbname=emak;charset=utf8', 'root', '');
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}

    $appel = $_POST['appel'];
    
    if(isset($_POST['appel'])){
    
    
    $req = $bdd->prepare('INSERT INTO tableau_journalier(CD_PRESENT) VALUES(:appel)');
$req->execute(array(

    'appel' => $appel
   ));


if($req->execute()) { // execute() répond true/false
   echo " La requête fonctionne ! ";
} else {
   echo "Echec lors de l'exécution de la multi-requête : (" . $req->errno . ") " . $req->error;
}
        
} 

    elseif(!isset($_POST['appel'])){
    
    echo 'Vous n\'avez rien selectionné ';
    
}

    
    ?>
    
    <td bgcolor ="white" align="center" width ="20%"  class ="tx4" >  
    
        <form method="post" action="rolecontents.php">
    <p>
       <input type="radio" name="appel" value='P' id="P" /> <label for="P">Présent</label><br />
       <input type="radio" name="appel" value='A'  id="A" /> <label for="A">Absent</label><br />
    </p>
    <input type="submit" name="submit" value="Envoyer" />
        
    </form>
        
    </td>
    <td bgcolor ="white" align="center" width ="20%"  class ="tx4" >  <?php echo $donnees ['HEURE_COURS'               ] ; ?>  </td>
    <td bgcolor ="white" align="center" width ="20%"  class ="tx4" >  <?php echo $donnees ['DF_CLASSE'               ] ; ?>  </td>
  <td bgcolor ="#AEC7DF"    align="center" width ="13%" align ="right">
                <a href ="editliste.php?action=edit&id=<?php  echo $row['ID'] ; ?>"> 
                  <img src="/emak/app/images/edit.png"  alt="Modifier"  LEFTMARGIN="0" ALIGN=left>                
             </a>       
                 
            <!--a HREF="">
               <input name="button" type="image" class="NavButton" id="button1" onClick="myFunction();" 
               value="Imprimer" src="/emak/app/images/delete.png"> 
            </a!-->
            
             <a href ="delliste.php?type=liste_eleve&id=<?php   echo $row['ID'] ; ?>"> 
                    <img src="/emak/app/images/delete.png"  alt="Eliminer" LEFTMARGIN="0" ALIGN=left>     
             </a>
             

    
                                                    
   </td>
 </tr>
      
</tr> 

      <?php
       }
      ?>



</table>

</body>
Merci d'avance

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

12 mai 2015, 10:18

Bonjour,

Dans tes inputs de type radio, il faut ajouter l'attribut checked="checked" pour que celui-ci soit coché par défaut.
Il te faut donc contrôler la valeur en base pour ton enregistrement et ajouter cet attribut soit dans l'input Présent, soit dans l'input Absent en fonction de la valeur qui aura été consignée :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 12 Messages

12 mai 2015, 10:23

D'accord merci mais cela n'as pas résolue mon problème

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

12 mai 2015, 11:11

Ah alors c'est moi qui n'ait pas compris ton problème ni ce que tu veux faire :(

Ton code présente une requête d'insertion pour créer de nouveaux enregistrements avec pour unique valeur P ou A ? Je doute effectivement que cela fonctionne ou que cela corresponde à ton besoin.
La logique voudrait que lorsque tu cliques sur le bouton envoyer, tu transmettes l'id de l'enregistrement et la valeur P ou A, puis que tu fasses un update de la base de données pour mettre à jour cette information. Ou si ton besoin est effectivement d'insérer un nouvel enregistrement à chaque fois que quelqu'un clique sur envoyer, il faut également prévoir les autres données à insérer en base dans ta requête...

Bref, quel est ton besoin et qu'est ce qui ne fonctionne pas ? :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 12 Messages

12 mai 2015, 11:38

Voilà ce que je veux faire " La logique voudrait que lorsque tu cliques sur le bouton envoyer, tu transmettes l'id de l'enregistrement et la valeur P ou A, puis que tu fasses un update de la base de données pour mettre à jour cette information." Quand je clique sur présent de la première ligne ici Dupont Paul, je veux que ça mette à jour ma table en insérant 'P' dans la même ligne sélectionné, mais comme on peux le voir, je n'arrive pas :/

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

12 mai 2015, 12:24

Ok, du coup pour cela il te faut deux choses :
- Ajouter l'id de la ligne que tu veux modifier dans ton formulaire (tu peux le faire avec un input de type hidden).
<input type="hidden" name="id" value="<?php echo $donnees['ID']; ?>" />
Celui-ci permettra de savoir de quel personne tu changes le statut :)
- Réaliser la mise à jour de l'enregistrement lorsque tu reçois le formulaire. Pour cela on utilise une requête de type UPDATE en précisant quelles valeurs sont modifiées (SET) pour quels enregistrements (WHERE) :
UPDATE tableau_journalier SET cd_present = :appel WHERE id = :id
Il te suffit alors de passer les valeurs "appel" et "id" lors de l'exécution de la requête :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 12 Messages

12 mai 2015, 13:03

Merci de ta reponse :)

la j'ai une erreur que je ne comprend pas là voici.

Notice: Undefined index: appel in C:\xampp\htdocs\emak\app\maternelle\psection\presence\rolecontents.php on line 71

Notice: Undefined property: PDOStatement::$errno in C:\xampp\htdocs\emak\app\maternelle\psection\presence\rolecontents.php on line 77

Notice: Undefined property: PDOStatement::$error in C:\xampp\htdocs\emak\app\maternelle\psection\presence\rolecontents.php on line 77
Echec lors de l'exécution de la multi-requête : ()
Notice: Undefined index: appel in C:\xampp\htdocs\emak\app\maternelle\psection\presence\rolecontents.php on line 71

Notice: Undefined property: PDOStatement::$errno in C:\xampp\htdocs\emak\app\maternelle\psection\presence\rolecontents.php on line 77

Notice: Undefined property: PDOStatement::$error in C:\xampp\htdocs\emak\app\maternelle\psection\presence\rolecontents.php on line 77
Echec lors de l'exécution de la multi-requête : ()

voici le bout de code en question qui donne l'erreur :
$req = $bdd->prepare('INSERT INTO tableau_journalier(CD_PRESENT) VALUES(?)');
$req->execute(array($_POST['appel']));


if($req->execute()) { // execute() répond true/false
   echo " La requête fonctionne ! ";
} else {
   echo "Echec lors de l'exécution de la multi-requête : (" . $req->errno . ") " . $req->error;
}
la ligne 2 = line 71

Avatar du membre
Mammouth du PHP | 1609 Messages

12 mai 2015, 13:14

Salut maiko,

La première erreur indique qu'il n'y a pas d'index appel dans le tableau $_POST. Soit le formulaire n'a pas été soumis, soit aucune option appel n'a été sélectionnée.
Tu peux ajouter un if(isset($_POST['appel']) pour t'assurer qu'il y a bien une option appel sélectionnée.

Les erreurs suivantes indiquent qu'il n'y a pas de propriétés errno et error sur l'objet $req (qui est un objet de type PDOStatement).
Il faudrait à priori plutôt utiliser les méthodes errorCode et errorInfo :
http://php.net/manual/fr/class.pdostatement.php
Développeur web depuis + de 20 ans

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

12 mai 2015, 13:26

En complément pour la première erreur, ton test de variable est mal positionné :
$appel = $_POST['appel'];
    
    if(isset($_POST['appel'])){
Sur la première ligne, tu copies le contenu de la variable $_POST['appel'] dans ta variable $appel et sur la seconde ligne tu vérifies que la variable $_POST['appel'] existe bien... Tu as donc un message d'avertissement lorsque celle-ci n'est pas définie.
Il faut d'abord tester que la variable passée en post existe avant de l'utiliser, et à priori donc juste inverser ces deux lignes :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 12 Messages

12 mai 2015, 14:16

C'est bon je n'est plus de message d'erreur une fois avoir inverser les 2 lignes mais soucis j'ai toujours le fameux problème de mon premier poste voici le bout de code que j'ai modifier pour être bien sur que je n'est fait aucune erreur :
if(isset($_POST['appel'])){
		
	$appel = $_POST['appel'];
		
	$req = $bdd->prepare('INSERT INTO tableau_journalier(CD_PRESENT) VALUES(?)');
$req->execute(array($_POST['appel']));


if($req->execute()) { // execute() répond true/false
   echo " La requête fonctionne ! ";
} else {
   echo "Echec lors de l'exécution de la multi-requête : (" . $req->errno . ") " . $req->error;
}

} 

    elseif(!isset($_POST['appel'])){
    
    echo 'Vous n\'avez rien selectionné ';
    
}
		


	?>
	
	<td bgcolor ="white" align="center" width ="20%"  class ="tx4" >  
	
		<form method="post" action="rolecontents.php">
	<p>
       <input type="radio" name="appel" value='P' id="P"  checked="checked" /> <label for="P">Présent</label><br />
       <input type="radio" name="appel" value='A'  id="A" /> <label for="A">Absent</label><br />
	   <input type="hidden" name="id" value="<?php echo $donnees['ID']; ?>" /> 
	</p>
	<input type="submit" name="submit" value="Envoyer" />
		
	</form>
	
	<?php
	
	$modif = $bdd->exec('UPDATE tableau_journalier SET cd_present = :appel WHERE id = :id');
	
	echo ' Modifié ! '
	
	?>

edit : j'ai cette erreur apres avoir fait des modification.

Echec lors de l'exécution de la multi-requête : (23000 ) Echec lors de l'exécution de la multi-requête : (23000 )
if(isset($_POST['appel'])){
		
	$appel = $_POST['appel'];
		
	$req = $bdd->prepare('INSERT INTO tableau_journalier(ID, CD_PRESENT) VALUES(?,?)');
$req->execute(array($donnees['ID'], $_POST['appel']));


if($req->execute()) { // execute() répond true/false
   echo " La requête fonctionne ! ";
} else {
   echo "Echec lors de l'exécution de la multi-requête : (" . $req->errorCode() . " ) " ;
}

} 

    elseif(!isset($_POST['appel'])){
    
    echo 'Vous n\'avez rien selectionné ';
    
}
		


	?>
	
	<td bgcolor ="white" align="center" width ="20%"  class ="tx4" >  
	
		<form method="post" action="rolecontents.php">
	<p>
       <input type="radio" name="appel" value='P' id="P"  checked="checked" /> <label for="P">Présent</label><br />
       <input type="radio" name="appel" value='A'  id="A" /> <label for="A">Absent</label><br />
	   <input type="hidden" name="id" value="<?php echo $donnees['ID']; ?>" /> 
	</p>
	<input type="submit" name="submit" value="Envoyer" />
		
	</form>
	
	<?php
	
	$modif = $bdd->exec('UPDATE tableau_journalier SET cd_present = :appel WHERE id = :id');
	
	echo ' Modifié ! '
	
	?>
Je vais essayer de voir de mon coté que veux dire cette erreur :)

Eléphanteau du PHP | 12 Messages

12 mai 2015, 15:28

Je ne trouve ce que veux dire l'erreur 23000 et comment la ratifier :/

Avatar du membre
Mammouth du PHP | 1609 Messages

12 mai 2015, 15:36

A priori ce serait une duplicate entry, c'est à dire que tu essaies de faire un insert avec un id qui existe déjà dans la table.

Pour un message d'erreur textuel tu peux tester :
$error = $req->errorInfo();
echo $error[2];
N'étant pas un habitué de PDO je ne sais pas s'il y a moyen de récupérer l'erreur textuelle en une opération.

EDIT
En général on met l'id en auto increment et on ne le définit donc pas dans une requête d'insert.
Mais peut être que dans la logique de ton code il devrait s’agir d'un update ?
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 12 Messages

12 mai 2015, 15:45

Ce que j'essaie de faire c'est d’insérer A ou P sur les lignes de ma table.

j'ai ajouter echo $error[2];
mais elle me donne une erreur en+ .
Echec lors de l'exécution de la multi-requête : (23000 )
Notice: Undefined variable: error in C:\xampp\htdocs\emak\app\maternelle\psection\presence\rolecontents.php on line 90
Echec lors de l'exécution de la multi-requête : (23000 )
Notice: Undefined variable: error in C:\xampp\htdocs\emak\app\maternelle\psection\presence\rolecontents.php on line 90

Avatar du membre
Mammouth du PHP | 1609 Messages

12 mai 2015, 15:50

As tu mis la ligne $error = $req->errorInfo(); afin que $error soit définit ?

Sinon comme je te l'ai dis il s'agit à priori d'une erreur duplicate entry. Tu ne peux pas avoir deux lignes avec le même id dans ta table. La clé primaire (ou primary key, généralement une colonne que l'on nomme id) doit être unique. Elle permet d'identifier un enregistrement de façon unique.
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 12 Messages

12 mai 2015, 15:56

ah j'ai mis errorInfo au lieu de errorCode et j'ai euh cette erreur à la place

Notice: Array to string conversion in C:\xampp\htdocs\emak\app\maternelle\psection\presence\rolecontents.php on line 88
Echec lors de l'exécution de la multi-requête : (Array )