input dans une boucle while: recuperer les valeurs

bmviso
Invité n'ayant pas de compte PHPfrance

11 juil. 2006, 10:14

Bonjour,

un probleme sur une partie de formulaire
Comment recuperer les valeurs rentrées dans ce formulaire
//affichhage de la liste des participants issue de la table part1
echo "<form><center><p><p>";
echo "<table bgcolor='white'><tr><center> ";
echo " <td ><p>participants</td>\n";
echo " <td ><p>notes</td></tr>\n";
$sql="SELECT nomLogin FROM part1 WHERE classe='$classe'ORDER BY nomLogin ASC";
$result=mysql_query($sql)
or die("Couldn't execute query mess.");

while($noms=mysql_fetch_array($result))
{
extract($noms);
echo "<tr><td ><B>".$noms['nomLogin']."<br></td>";
echo "<td><input type='text' name='notes' size='6' maxlength='6'></td></tr>";
}
echo "</table>";

echo "<br><input type='submit' value='valider'></form>";

je ne mets que la fin du formulaire. il ya pas mal de select au debut
Pour information, j'ai au debut
echo "<br><form action='inputnotes.php?do=record' method='POST'>";
Le probleme est que je n'arrive qu'a recuperer la derniere note rentrée meme si j'en ai mis 10 et je ne sais pas comment recuperer les noms



Merci d'avance pour l'aide[/quote]

Eléphant du PHP | 332 Messages

11 juil. 2006, 10:21

Tous tes champs input portent le même nom : notes. C'est donc normal que tu n'en récupères qu'un seul puisque les valeurs s'écrasent.

Il faut que tu fasses un tableau de notes
$i=0;
while($noms=mysql_fetch_array($result)) 
{ 
extract($noms); 
echo "<tr><td ><B>".$noms['nomLogin']."<br></td>"; 
echo "<td><input type='text' name='notes[$i]' size='6' maxlength='6'></td></tr>"; 
$i++;
} 
et ensuite, tu récupères naturellement en PHP le tableau des notes.

Invité
Invité n'ayant pas de compte PHPfrance

11 juil. 2006, 10:44

Merci bien


j'ai essayé avec notes[] quel est l'avantage du note[$i]?

Par contre je me perd dans une parse error avec les .$noms['nomLogin'].
quand je veux les afficher dans le fichier de traitement
print_r($_POST('.$noms["nomLogin"].'));
Où est le probleme?

Eléphant du PHP | 332 Messages

11 juil. 2006, 11:09

L'avantage de numéroter les indices, c'est d'avoir un numéro ... (La Palissade). Mais ce n'est pas obligatoire, c'est juste un vieux réflexe : je me méfie souvent des truc implicites et quand je peux, je préfère maîtriser personnellement. ces points de détail. On n'est jamais à l'abri d'une nouvelle version de HTML qui bannisse les tableaux sans indice. Mais chacun fait comme il veut.

Point 2 : tu ne récupères pas tes $noms['nomLogin'] dans le POST. Normal : ils ne sont pas dans le formulaire, ils sont juste en libellé. Regarde le fichier HTML généré, il n'y a pas de raison que tu récupères <B>aaaa<br> plutôt que le titre de ton tableau.
(Note en passant : n'oublie pas de fermer le <B> par un </B>)
Si tu veux que tes logins soient récupérés, il faut donc que tu les mettes tes noms dans des champs cachés du formulaire en plus de l'affichage en libellé.
echo "<td><input type='text' name='notes[$i]' size='6' maxlength='6'>";
echo "<input type='hidden' name='noms[$i]' value='".$noms['nomLogin']."'>";
echo "</td></tr>"; 
Et là, tu vas voir l'utilité de numéroter les indices !
Supposons qu'une note ne soit pas remplie pour une raison ou une autre. Dans ton post, tu vas récupérer un tableau de notes avec 4 valeurs et un tableau de noms avec 5 valeurs. Mais tu seras incapable de faire le lien entre la note manquante et le nom manquant.

Code : Tout sélectionner

notes : array (18, 17, 10, 15) noms : array ('aaa', 'bbb', 'ccc', 'ddd', 'eee')
Si tu numérotes tes indices, tu auras deux tableaux indexés

Code : Tout sélectionner

notes : array (1=>18, 2=>17, 4=>10, 5=>15) noms : array (1=>'aaa', 2=>'bbb', 3=>'ccc', 4=>'ddd', 5=>'eee')
et tu pourras associer sans équivoque chaque note à chaque nom

Invité
Invité n'ayant pas de compte PHPfrance

11 juil. 2006, 11:18

et bien ça c'est de l'explication

merci beaucoup, j'ai fait un grand pas en avant graçe à toi
J'aurais certainement mis du temps à realiser le decalage

Merci encore pour le temps qui m'a ete consacre

bmviso THE AMATEUR

Petit nouveau ! | 1 Messages

12 juil. 2006, 10:44

euh..

j'ai un probleme dans le traitement des tableaux pour les mettre ensuite dans la bdd
foreach ($_POST['noms'] as $id => $noms) {
echo $noms.' : '.$_POST['notes'][$id];
$sql="INSERT INTO notes
(note,nomLogin)
VALUES ('$notes','$noms')";
mysql_query($sql)
or die ("pas possible");
j'ai une erreur variable undefinie 'notes'!!!! dans le VALUES de la requete SQL
je voudrais inserer les notes et les noms en meme temps dans la bdd

Merci pour l'aide et les explications

Eléphant du PHP | 332 Messages

12 juil. 2006, 11:12

Ouh la, $_POST['notes'][$id], c'est peut-être juste, mais c'est compliqué.

Moi qui suis un esprit simple, je ferais
$notes = $_POST['notes']
puis ensuite $notes[$id]

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

12 juil. 2006, 12:34

Utilise les balises [ php ] au lieu de quote pour code, ca met en forme, en couleur, et c'est quand même mieux :)
foreach ($_POST['noms'] as $id => $noms) { 

  echo $noms.' : '.$_POST['notes'][$id]; 

  $sql="INSERT INTO notes (note, nomLogin) VALUES ('$notes', '$noms')"; 
  mysql_query($sql) or die ("pas possible");

c'est normal qu'il te dise que ta variable $notes est indéfinie, dans ton foreach tu as deux variables qui sont $id et $noms, alors à moins d'avoir un $notes qui traine au dessus dans ton code, je te ferais le même commentaire que php :)