Résolu Probleme UPDATE dans PHP

Solutions (1)
Tags :
  • Php
  • Sql
|
Bonjour,

Je suis étudiant en bts sio et j'ai un projet à faire en développement.
C'est un site internet de blague.

Voici le contexte :

J'ai une page listemembres.php où on affiche (pour l'administrateur) la liste de tous les membres sous forme de tableau (numéro utilisateur, pseudo, mot de passe et droit).
Il y a aussi une liste déroulante qui reprend la liste des membres affichée par leur pseudo (grâce à une requête SELECT).

A noter que pour la liste déroulante, la balise est : <select name"envoyer">

Maintenant on sélectionne dans la liste par exemple "coca" (c'est un pseudo) et on fait valider, ça envoit sur la page modifmembre.php .

Sur modifmembre.php, on récupère le pseudo en faisant : $pseudo = $_GET['envoyer'];
Un SELECT est exécuté pour récupérer les informations de ce pseudo.

Sur modifmembre.php, j'ai un INPUT pour rentrer un nouveau mot de passe et un INPUT pour modier le droit.

Je vous montre le code qui ne marche pas ( je vois pas d'erreur mais il y en a une forcément) :
  1. <?php include 'connexionBDDetsessionstart.php';?>
  2. <html>
  3. <head>
  4. <meta charset='utf-8'/>
  5. <title>Modification profil</title>
  6. <link rel="stylesheet" Type="text/css" href="doc1.css"/>
  7. </head>
  8. <body>
  9. <FORM ACTION="listemembres.php">
  10. <INPUT TYPE="SUBMIT" VALUE="Retour"></FORM>
  11. <form method="GET">
  12.  
  13. <?php $pseudo = $_GET['envoyer'];?>
  14.  
  15. <h1 align="center"><?php echo 'Modification du profil : '.$pseudo?></h1>
  16. <table align="center">
  17. <tr>
  18. <td id="clr1">Nouveau mot de passe :</td>
  19. <td><INPUT type="text" size="20" name="motdepasse"></td>
  20. </tr>
  21. <tr>
  22. <td id="clr1">Nouveau droit :</td>
  23. <td><INPUT type="text" size=20 name="Droit"></td>
  24. </tr>
  25. <tr>
  26. <td><br/><INPUT type="submit" value="Valider" name="modifier">
  27. <INPUT type="reset" value="Annuler"></td>
  28. </tr>
  29. </table>
  30. <?php
  31. $requete = "SELECT pseudo, motdepasse, Droit FROM utilisateur WHERE pseudo='".$pseudo."'";
  32. $exe= mysql_query($requete);
  33. $row = mysql_fetch_row($exe);
  34. echo $row[0];
  35.  
  36. if(isset($_GET['modifier']))
  37. {
  38. $mdp = $_GET['motdepasse'];
  39. $Droit = $_GET['Droit'];
  40.  
  41. if($mdp != '' or $Droit != '')
  42. {
  43. $requete = 'UPDATE utilisateur SET motdepasse ="'.$mdp.'", Droit ="'.$Droit.'" WHERE pseudo="'.$row[0].'"';
  44. $exe= mysql_query($requete);
  45. echo $requete;
  46. }
  47. }
  48. ?>
  49. </form>
  50. </body>
  51. </html>

Voilà alors le echo $row[0] affiche le pseudo. CA MARCHE ! On a bien le pseudo ou bien le mot de passe du pseudo qu'on a sélectionné avant dans la liste déroulante.

MAIS pseudo="'.$row[0].'"' ne marche pas quand on est dans if(isset($_GET['modifier'])).

Je fais echo $requete et le résultat est :

UPDATE utilisateur SET motdepasse ="lu", Droit ="7" WHERE pseudo=""

Donc le pseudo n'est plus pris en compte.

De plus une erreur s'affiche après avoir valider :

Notice: Undefined index: envoyer in C:\Users\...\modifmembre.php on line 13

Si j'écris UPDATE... avant le IF ISSET avec un mot de passe et/ou un droit rentré en dur, CA MARCHE.

MA QUESTION : pourquoi la valeur de $pseudo n'est plus pris en compte dans mon isset et pourquoi je perds la valeur de $pseudo après avoir fait valider ?

Merci de votre aide.
  • andrelec1 a édité ce message
Contenus similaires
Meilleure solution
partage
, Programmation (collector) |
Bonjour,
dans un premier temps utilise PDO pour faire t'es requette SQL, et fais passer t'es variable dans un htmlentities (http://fr2.php.net/manual/fr/function.htmlentities.php ) avant de les utilisés dans une requette sql pour sécuriser au minimum tous ça ...

pour vérifier qu'une variable est vide au lieux de faire $var != '' utilise la fonction empty : http://fr2.php.net/manual/fr/function.empty.php

Ensuite je pense que tu a un problème de compréhension sur le fonctionnement général de ta page
tous le code de la page est exécuter a chaque fois que tu affiche la page ...
donc normalement tu commence ta page par ton php qui vas vérifier si il a les bonne valeur en get ( pense plutôt a utilise la méthode post, qui cache plus ou moins les valeur a l'utilisateur) et exécuter le code si besoin , puis seulement après tu affiche le html !

en gros tu aurais du faire :

  1. <?php
  2. require_once 'connexionBDDetsessionstart.php'; // chargement une seul fois, et erreur si fichier absent !
  3. $pseudo = htmlentities($_GET['envoyer']);
  4.  
  5. $requete = "SELECT pseudo, motdepasse, Droit FROM utilisateur WHERE pseudo='".$pseudo."'";
  6. $exe= mysql_query($requete);
  7. $row = mysql_fetch_row($exe);
  8. echo $row[0];
  9.  
  10. if(isset($_GET['modifier']))
  11. {
  12. $mdp = htmlentities($_GET['motdepasse']);
  13. $Droit = htmlentities($_GET['Droit']);
  14.  
  15. if($mdp != '' or $Droit != '')
  16. {
  17. $requete = 'UPDATE utilisateur SET motdepasse="'.$mdp.'", Droit="'.$Droit.'" WHERE pseudo="'.$row[0].'"';
  18. $exe= mysql_query($requete);
  19. echo $requete;
  20. }
  21. }
  22.  
  23. ?>
  24. <html>
  25. <head>
  26. <meta charset='utf-8'/>
  27. <title>Modification profil</title>
  28. <link rel="stylesheet" Type="text/css" href="doc1.css"/>
  29. </head>
  30. <body>
  31. <FORM ACTION="listemembres.php">
  32. <INPUT TYPE="SUBMIT" VALUE="Retour">
  33. </FORM>
  34. <form method="GET">
  35. <h1 align="center">Modification du profil : <?= $pseudo ?></h1>
  36. <table align="center">
  37. <tr>
  38. <td id="clr1">Nouveau mot de passe :</td>
  39. <td><INPUT type="text" size="20" name="motdepasse"></td>
  40. </tr>
  41. <tr>
  42. <td id="clr1">Nouveau droit :</td>
  43. <td><INPUT type="text" size=20 name="Droit"></td>
  44. </tr>
  45. <tr>
  46. <td><br/><INPUT type="submit" value="Valider" name="modifier">
  47. <INPUT type="reset" value="Annuler"></td>
  48. </tr>
  49. </table>
  50. </form>
  51. </body>
  52. </html>



PS : quand tu veux juste afficher une variable , a la place de faire un <?php echo $var; ?> tu peut faire un <?= $var ?> !
  • Dreamcaster a sélectionné cette solution comme la meilleure réponse
  • Commenter cette solution |

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS