Afficher valeur radio button sur ma bdd

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Afficher valeur radio button sur ma bdd

Re: Afficher valeur radio button sur ma bdd

par maiko » 13 mai 2015, 13:39

C'est bon ça fonctionne merci Ryle et Saian :)

Juste une petite question comment je peux faire pour avoir seulement un seul boutton submit pour toute les lignes car ses un peux chiant de cliquer sur envoyer à chaque ligne si il y a beaucoup de d'élève. et 2ème point c'est du à quoi que les message se répète comme une boucle ? je devrais avoir ce message que une fois alors que je l'ai autant de fois qu'il y a de ligne :/
' La requête fonctionne ! La requête fonctionne ! '

Image

Re: Afficher valeur radio button sur ma bdd

par Saian » 12 mai 2015, 16:17

Comme je te l'ai suggéré dans un de mes messages précédent :
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 ?
Après relecture de quelques uns des posts précédents, il semblerait en effet que tu ne souhaites pas insérer une nouvelle ligne mais mettre à jour un ligne existante. Tu ne dois donc pas faire un INSERT mais un UPDATE.

Réfères toi au post de Ryle qui te l'a très bien expliqué.

Re: Afficher valeur radio button sur ma bdd

par maiko » 12 mai 2015, 16:12

il s’agit bien d'une erreur duplicate entry

Echec lors de l'exécution de la multi-requête : (Duplicate entry '2' for key 'PRIMARY' )

Tu sais comment je peux réglé ce problème stp ?

Re: Afficher valeur radio button sur ma bdd

par Saian » 12 mai 2015, 16:03

Normal car errorInfo retourne un tableau (voir la partie Valeur de retour : http://php.net/manual/fr/pdostatement.errorinfo.php)

Je t'ai simplement suggéré d'utiliser errorInfo afin d'avoir un message textuel au lieu d'un code, ce qui serait à priori plus clair.
} else {
  $error = $req->errorInfo();
  echo "Echec lors de l'exécution de la multi-requête : (" . $error[2] . " ) " ;
}

Re: Afficher valeur radio button sur ma bdd

par maiko » 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 )

Re: Afficher valeur radio button sur ma bdd

par Saian » 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.

Re: Afficher valeur radio button sur ma bdd

par maiko » 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

Re: Afficher valeur radio button sur ma bdd

par Saian » 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 ?

Re: Afficher valeur radio button sur ma bdd

par maiko » 12 mai 2015, 15:28

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

Re: Afficher valeur radio button sur ma bdd

par maiko » 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 :)

Re: Afficher valeur radio button sur ma bdd

par Ryle » 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 :)

Re: Afficher valeur radio button sur ma bdd

par Saian » 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

Re: Afficher valeur radio button sur ma bdd

par maiko » 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

Re: Afficher valeur radio button sur ma bdd

par Ryle » 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 :)

Re: Afficher valeur radio button sur ma bdd

par maiko » 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 :/