Page 1 sur 1

Récupérer une variable issue d’une boucle while

Posté : 03 mars 2008, 17:01
par Invité
Bonjour,

J’ai un souci pour la récupération d’une variable issue d’une boucle while.

J’ai réalisé un formulaire en vu de faire des mises à jour dans une table.

Code : Tout sélectionner

<?php do { <a href="modif.php?ID=<?php echo $row_Recordset2['ID']; ?> ">Modifier</a> } while ($row_Recordset2 = mysql_fetch_array($Recordset2)); ?>
J’arrive à récupérer ID avec la méthode $_GET mais pas avec la méthode $_POST ou $_SESSION ?

Avec la méthode $_POST en faisant un echo j’ai le nombre total des enregistrements ?

Pourriez-vous me donner une piste pour m’aider, cela fait 3jours que je cherche et je bloque sans savoir pourquoi.

Merci d’avance.
[/code]

Posté : 03 mars 2008, 17:08
par d0m
Les méthode GET et POST et les variables de session sont 3 choses différents.

$_GET permet de récupérer les valeurs passées par la méthode GET c'est à dire dans l'url

$_POST permet de récupérer les valeurs passées en général venant un formulaire HTML avec la méthode POST.

$_SESSION permet de récupérer les variables de session c'est à dire explicitement mis en session.

Dans ton cas, tu fais passer la valeur de ID dans l'url avec un lien.
C'est donc normal qu'elle n'est accessible que par la méthode GET.

Posté : 03 mars 2008, 17:12
par Hywan
Bonjour,

ton script compte beaucoup d'erreurs.
La première, il est mal écrit. Tu auras des erreurs de syntaxes dans tous les sens. Tu mélanges HTML et PHP sans passer par des sorties (echo et consort).

La seconde, pour récupérer le résultat d'une base de données, il est préférable d'utiliser une boucle tantque-faire, plutôt que faire-tantque (while plutôt que do-while). Ça se comprend bien. En effet, le premier passage dans ta boucle (une do-while), la variable $row_Recordset2 ne sera pas définie, donc une belle erreur.

Pour finir, je ne comprends pas où se situe ton problème. Tu mélanges les variables globales (GET, POST, et SESSION ici) et boucle SQL ... huh :? ?

Tu écris d'abord tes liens en fonction des résultats de ta base de données. Tes liens ont pour paramètre id=$row...['ID']. Quand tu cliques sur le lien, tu arrives sur la page modif.php et elle aura un tableau $_GET qui aura une clé (ID) et qui aura la valeur de cet ID. Rien à voir avec POST ou SESSION ici.

Je te conseille de voir les bases de PHP, àmha c'est là que se situe le problème.

Edit : grillé ... foutu téléphon qui son (hein gaston).

Posté : 03 mars 2008, 17:22
par Invité
Merci pour ta réponse, tu as complément raison, à force de bidouiller j'ai oublié de modifier le code avec la méthode $_POST

Code : Tout sélectionner

<form method="POST" action="modif.php"> <?php do { <input name="ID" type="hidden" value="<?php echo $row_Recordset2['ID']; ?>" /> } while ($row_Recordset2 = mysql_fetch_array($Recordset2)); ?> <input name="modif" type="submit" /> <form />
Mais quand je fais un echo $_POST['ID'] pour vérifier la valeur de l'ID, j'ai le nombre total d'enregistrement ?

Posté : 03 mars 2008, 17:25
par Hywan
Tu n'as pas pris en compte mes remarques concernant le type de structure à utiliser (while et pas do-while).
Mais quand je fais un echo $_POST['ID'] pour vérifier la valeur de l'ID, j'ai le nombre total d'enregistrement ?
C'est une question ou ... ? Fais le, et tu verras bien. Tout dépend également de ta requête SQL.

Que veux-tu faire, et où est le problème ? Car là, j'avoue ne rien comprendre.

Posté : 03 mars 2008, 17:49
par Invité
Oui désolé HyWaN, nos réponses se sont croisées, je refais mon formulaire avec tes conseils sur la boucle while.

En plus tu as raison, je n'ai pas été tres clair sur le formulaire que je cherche à réaliser.

Réalisation d'un formulaire de modification de donnée pour mettre à jour des infos.

Lister tous les champs d'une table, et pouvoir modifier via un lien ou bouton les infos de la fiche concernée.

Pour cela il me faut récuperer l'ID de la fiche concercée pour l'update, mais je cherche à le faire avec la méthode POST pour eviter que l'on puisse modifier ID directement dans URL.

Posté : 03 mars 2008, 17:50
par AB
Faudrait nous montrer ta requête.

Je soupçonne que tu utilises dreamweaver ?

Cela expliquerait le do - while puisqu'à la suite de ta requête tu dois avoir une première fois $row_Recordset2 = mysql_fetch_array($Recordset2) ce qui fait que si tu suivais les conseils de HyWaN il te manquerait le premier enregistrement dans ta boucle.

Si tel est le cas le mieux est de suivre les conseils de HyWaN en supprimant $row_Recordset2 = mysql_fetch_array($Recordset2) qui suit immédiatement ta requête et de faire ta boucle de cette façon
<?php  while ($row_Recordset2 = mysql_fetch_array($Recordset2)) {?>
<input name="ID" type="hidden" value="<?php echo $row_Recordset2['ID']; ?>" />
<?php }  ?>

Posté : 03 mars 2008, 17:59
par Invité
Merci pour tes infos Mammouth, tu as tous compris pour dreamweaver, j'essai de me former en php avec ce logiciel mais c'est vraiment pas terrible pour vraiment comprendre ce que l'on fait.

Je suis d'ailleurs à la recherche d'un bon bouquin de formation sur php, si vous aviez des tuyaux :lol:

Je test la nouvelle boucle et je vous tiens au courant.

Posté : 03 mars 2008, 18:09
par AB
Tu peux commencer avec phpdebutant.org puis lesiteduzero.com

ensuite les bouquins pour aller plus loin.

Mais effectivement faut éviter Dreamweaver pour apprendre PHP et même pour générer du code php sinon tu vas vite être limité surtout si tu ne comprends pas ce qu'il fait. Ce logiciel te rendras d'autres services mais pas celui-ci.

PS si tu as l'intention de te perfectionner il est probable que tu reviennes nous voir... Alors inscris-toi cela te permettras de pouvoir éditer tes messages et de mettre résolu quand c'est le cas.

Posté : 03 mars 2008, 18:46
par Invité
Cela ne fonctionne toujours pas c'est vraiment bizarre, j'ai essayé de debogué en simplifiant au maximum le code, mais je ne trouve pas mon erreur.

Code : Tout sélectionner

<?php mysql_select_db($database_photo, $photo); $query_Recordset2 = sprintf("SELECT * FROM photos WHERE ID = %s", 2); $Recordset2 = mysql_query($query_Recordset2, $etroovnet) or die(mysql_error()); $row_Recordset2 = mysql_fetch_assoc($Recordset2); $totalRows_Recordset2 = mysql_num_rows($Recordset2); ?> <body> <form method="POST" action="<?php echo htmlentities($_SERVER["PHP_SELF"]); ?>"> <?php echo $_POST['ID']; //Pour contrôler la valeur $ID = $_POST['ID']; while ($row_Recordset2 = mysql_fetch_assoc($Recordset2)) {?> <input name="ID" type="hidden" value="<?php echo $row_Recordset2['ID']; ?>" /> <input name="envoyer" type="hidden" id="envoyer"> <input type="image" name="envoyer" id="envoyer" value="Envoyer" src="images/envoyer.png" alt="envoyer" /> </body>
Cela m'affiche toujours soit le nombre total d'enregistrement ou le dernier de la table ?
Le code est-il correct, d'aprés vous ?

Posté : 03 mars 2008, 20:14
par Invité
J'ai trouvé quelques infos sur le forum, mais je ne suis pas sur que cela corresponde à mon cas.

Apparement il y aurait un traitement à effectuer en amont avec la fonction foreach ?

Posté : 03 mars 2008, 21:33
par AB
Explique clairement -avec des mots- ce que tu veux faire exactement.