[RESOLU] Formulaire et plusieurs UPDATE

Petit nouveau ! | 5 Messages

17 avr. 2013, 13:51

Bonjour,

j'essaye de développer un système de pointage mais je rencontre certain soucis.

Le principe de ce système est simple: j'arrive sur une page je pointe en fonction de la présence ou non a une réunion de certaine personne. Et je peu si je le souhaite ajouté un commentaire à côté.

Ce que j'ai déjà fait:
J'arrive à avoir ma mise à jour de ma table concernant les présences ou non au training.

Ma base est construite de cette manière:
TABLE membres
- ID
- Nom

TABLE pointeuse
- ID
- Date
- titre

TABLE présence
- ID_reunion
- ID_membres
- presence (0/1/2)
- Commentaire (Text)


Ce que je n'arrive pas à faire:
Je n'arrive pas a mettre à jour via le UPDATE le commentaire.

Mon code:
// CONNEXION BDD
//Traitement date

$raction = isset($_GET['rid']);
$maction = isset($_GET['mid']);


//Changement statut (MARCHE BIEN)
if ($maction <> ""){
$mid = $_GET['mid'] ;
$id = $_GET['id'] ;
$status = $_POST['statut'];

$reponse_U = mysql_query ("UPDATE presence SET presence =".$status." WHERE id_reunion=".$id." AND id_membre=".$mid."");
}
//Commentaire (si &rid) (MARCHE PAS)
if ($raction <> ""){
$id = $_GET['id'] ;
$rid = $_GET['rid'] ;
$commentaire = $_POST['comm'];

$reponse_X = mysql_query ("UPDATE presence SET commentaire =".$commentaire." WHERE id_reunion=".$id." AND id_membre=".$rid."");
}
// ...autre code
<?php
$reponse = mysql_query ('SELECT * from presence INNER JOIN membres ON presence.id_membre=membres.id INNER JOIN pointeuse ON pointeuse.id= presence.id_reunion  WHERE id_reunion='.$_GET['id'].' ORDER BY membres.pseudo')
or die("Impossible d'executer la requête :".$reponse."<br>Erreur:".mysql_error());
 while ($donnees = mysql_fetch_array($reponse))
 {
?>
<td align="center" valign="center"><?php if($donnees['presence']== "-1"){ echo'<font color="#CC6600">'.$donnees['pseudo'].'</font>'; } if($donnees['presence']== "1"){ echo'<font color="#00FF00">'.$donnees['pseudo'].'</font>'; } if($donnees['presence']== "2"){ echo'<font color="#FFFFFF">'.$donnees['pseudo'].'</font>'; } if($donnees['presence']== "0"){ echo'<font color="#FF0000">'.$donnees['pseudo'].'</font>'; } ?></td><td><form method="post" action="index.php?page=pointage&id=<?php echo ''.$_GET['id'].'&mid='.$donnees['id_membre'].'' ?>"></p>

   
     <select name="statut" size="1" id="statut" onChange="submit()">
       <option value="-1" <?php if($donnees['presence'] == "-1"){echo 'selected="selected"'; }?>>Incertain</option>

       <option value="1" <?php if($donnees['presence'] == 1){echo 'selected="selected"'; }?>>Pr&eacute;sent</option>
       <option value="0" <?php if($donnees['presence'] == 0){echo 'selected="selected"'; }?>>Absent</option>
	   <option value="2" <?php if($donnees['presence'] == 2){echo 'selected="selected"'; }?>>n'a pas point&eacute;</option>
     </select>
</form> </td>

<td><?php if($donnees['commentaire'] != "")
{
	echo ''.$donnees['commentaire'].'' ; 
} 
else 
{ ?>
<form method="post" action="index.php?page=pointage&id=<?php echo ''.$_GET['id'].'&rid='.$donnees['id_membre'].'' ; ?>"><input type="text" name="comm"><?php echo ''.$commentaire.'&id='.$id.'&rid='.$rid.'' ; ?><INPUT type="submit" value="Ok"> </form>

<?php 
} ?></td></tr>


<?php
}} ?>


<?php } ...
Le résulat est:

Gerard (en vert, orange ou rouge) + Formulaire de pointage + Case commentaire a remplir + bouton ok (submit)

En entrant manuellement une entré dans la BDD, le code fonctionne.

J'ai ajouté cette ligne ci: <?php echo ''.$commentaire.'&id='.$id.'&rid='.$rid.'' ; ?> afin de vérifié si mes variables renvoyer la bonne information, et si j'arrivé à la récupérer. Cela fonctionne correctement et m'affiche ce que j'ai taper correctement.


Je n'arrive pas à voir mon erreur, si une âme charitable peut se pencher sur mon problème, je lui en serait reconnaissant.

Cordialement,

Cypat2

Eléphant du PHP | 51 Messages

17 avr. 2013, 14:45

Salut
J'ai a peu près le même fonctionnement que le tien dans mon code, à savoir une possibilité de modifier des entrées d'une BDD. Seulement moi j'ai fait qu'un seul UPDTATE, peut-être que tu devrais essayer aussi, je sais que j'avais des soucis au début parce que j'avais essayé d'individualiser les champs.

Pour mieux comprendre : en gros lorsque tu cliques sur modifier, dans ta BDD tu vois bien que tout a été modifier sauf le champ Commentaires ? Et est-il remplacé par du vide ou garde t-il son ancienne valeur ?

Petit nouveau ! | 5 Messages

17 avr. 2013, 15:10

Apparemment Il garde son ancienne valeur.

tu entend par un seul update, une seul requête qui met à jour, à la fois le $status et le $commentaire ?

à l'origine j'avais séparé car je ne voulais pas que lorsqu'on change de statut cela n'efface pas les commentaires. ceci dit, si j'affiche en valeur par défaut de la textbox, la valeur de base (inscrit dans la BDD). J'espère que je n'aurais pas de souci avec les deux "submit" (submit lors du changement de ma "listbox" et lorsque j'appuie sur le bouton).

Je tente cette façon de faire et je reviens vers vous.


Merci pour votre temps et votre aide.

Cordialement,

Cypat2

Eléphant du PHP | 51 Messages

17 avr. 2013, 15:24

Oui c'est ça mettre en seul update tes deux variables. Si tu as peur que ton ancienne valeur soit perdue dans le cas d'un changement d'un seul champ, le mieux serait de récupérer l'ancienne valeur et de la mettre en value="$anciennevaleur" dans ton input.

Petit nouveau ! | 5 Messages

17 avr. 2013, 16:13

Re-bonjour,

Voici les modifications:

$maction = isset($_GET['mid']);

//Changement statut
if ($maction <> ""){
$mid = $_GET['mid'] ;
$id = $_GET['id'] ;
$status = $_POST['statut'];
$commentaire = $_POST['comm'];

$reponse_U = mysql_query ("UPDATE presence SET presence =".$status.", commentaire =".$commentaire."  WHERE id_reunion=".$id." AND id_membre=".$mid."");
}

...
<form method="post" action="index.php?page=pointage&id=<?php echo ''.$_GET['id'].'&mid='.$donnees['id_membre'].'' ?>">
<p><table bordercolor="#000000" border="1"><tr><th><p>ID</p></th><th><p>NOM</p></th><th><p>Présence</p></th></tr><tr>

<?php
$reponse = mysql_query ('SELECT * from presence INNER JOIN membres ON presence.id_membre=membres.id INNER JOIN pointeuse ON pointeuse.id= presence.id_reunion  WHERE id_reunion='.$_GET['id'].' ORDER BY membres.pseudo')
or die("Impossible d'executer la requête :".$reponse."<br>Erreur:".mysql_error());
 while ($donnees = mysql_fetch_array($reponse))
 {
?>
<td align="center" valign="center"><?php if($donnees['presence']== "-1"){ echo'<font color="#CC6600">'.$donnees['pseudo'].'</font>'; } if($donnees['presence']== "1"){ echo'<font color="#00FF00">'.$donnees['pseudo'].'</font>'; } if($donnees['presence']== "2"){ echo'<font color="#FFFFFF">'.$donnees['pseudo'].'</font>'; } if($donnees['presence']== "0"){ echo'<font color="#FF0000">'.$donnees['pseudo'].'</font>'; } ?></td>
<td></p>

   
     <select name="statut" size="1" id="statut" onChange="submit()">
       <option value="-1" <?php if($donnees['presence'] == "-1"){echo 'selected="selected"'; }?>>Incertain</option>

       <option value="1" <?php if($donnees['presence'] == 1){echo 'selected="selected"'; }?>>Pr&eacute;sent</option>
       <option value="0" <?php if($donnees['presence'] == 0){echo 'selected="selected"'; }?>>Absent</option>
	   <option value="2" <?php if($donnees['presence'] == 2){echo 'selected="selected"'; }?>>n'a pas point&eacute;</option>
     </select>
 </td>

<td>
<input name="comm" value="<?php  echo ''.$donnees['commentaire'].'' ; ?>"><INPUT type="submit" value="Ok"> </td></tr>

Alors cette fois-ci je n'ai plus rien qui marche. Je ne peut ni mettre à jour mes status, ni ajouter/modifier mes commentaires :s.

Petit nouveau ! | 5 Messages

18 avr. 2013, 08:56

N'ayant pas trouver le bouton pour éditer.

J'ai trouver mon erreur.

J'ai refait ma syntaxe update en fonction de divers exemple trouver sur le net. Cela fonctionne maintenant correctement.
En suite la plus grossière: J'ai mis mon formulaire qui englobé tout mon tableau (donc toute ma requete des membres) ce qui a pour effet de ne rien envoyer en ID.. Effectivement je lui en demande un précis et je lui bande les yeux et lui en propose 10 ....
(version code c'est plus clair):
<form ..><table>..<td>membre</td>..</table></form>
au lieu de
<table>...<td><form></form></td>...</table

Maintenant tout fonctionne correctement, merci de ton aide.


Cordialement,

Cypat2

Eléphant du PHP | 51 Messages

18 avr. 2013, 11:02

Ah oui effectivement ton soucis venait bien de là. Pense à mettre le sujet en Problème résolu.

Bonne continuation et à bientôt ;)