SELECT SQL pour formulaire via PDO.

Résolu/Fermé
Fontainard Messages postés 68 Date d'inscription dimanche 16 mars 2014 Statut Membre Dernière intervention 24 janvier 2017 - Modifié par Fontainard le 30/06/2014 à 15:06
Fontainard Messages postés 68 Date d'inscription dimanche 16 mars 2014 Statut Membre Dernière intervention 24 janvier 2017 - 1 juil. 2014 à 15:11
Problème épisode deux, je n'arrive pas à afficher mes valeurs du tableau correspondante à mon $_POST['idUtil'], dans une pop up qui affiche le formulaire grâce à Jquery :)
C'est au niveau du php que ça coince ! sacré PDO !

Voilà mon code php avec mon formulaire :
<?php 
$id = $_POST['idUtil'];
 try { 
    $base = new PDO('mysql:host=localhost; dbname=iplanet', 'root'. '');
      }
      catch(exception $e)  {
      die ('Erreur '.$e->getMessage());
     }
      $base->exec("SET CHARACTER SET utf8");
      $retour = $base ->query('SELECT * FROM utilisateur WHERE idUtil= "$id"');
      while ($data = $retour ->fetch()) {
       echo $data['idUtil'];  
   
    $nom = $base['nomUtil'];
    $prenom = $base['prenomUtil'];
    $fonction = $base['fonctionUtil'];
    $login = $base['loginUtil'];
    $pwd = $base['pwdUtil'];
    $niveau =$base['niveauUtil'];
    $valide = $base['valideUtil'];
    $mail = $base['mailUtil'];
    $tel = $base['telUtil'];
    $secteur = $base['id_secteur'];
    $stock = $base['idStock'];
    $cdsociete = $base['codeSociete'];
     } 

      ?>


<form id="form1" action="requetes/popupmu.php" method="post" enctype="" name="Modifier Utilisateur">
    <fieldset><legend>Modifier Coordonnés</legend>
           <ol>
              <li><label for="idUtil">Séléction n°Identifiant</label>
              <input type="text" name="idUtil" id="idUtil" placeholder="Incrémentation auto s'il s'agit d'un ajout" required="true" value="<?php echo $_POST['idUtil'] ?>" />

    <li><label for="nomUtil" name="nomUtil">Nom </label>
                <input type="text" name="nomUtil" id="nomUtil" placeholder="Nom"value="<?php echo $data['nomUtil']; ?>" required="true" />

      <li><label for="prenomUtil">Prénom </label>
                <input type="text" name="prenomUtil" id="prenomUtil" placeholder="Prénom" value="<?php echo $data['prenomUtil']; ?>" required="true" />

        <li><label for="fonctionUtil">Fonction </label>
                <input type="text" name="fonctionUtil" id="fonctionUtil" placeholder="ex: technicien" value="<?php echo $data['fonctionUtil']; ?>"/>
                 
              <li><label for="mailUtil">E-mail</label>
                <input type="text" name="mailUtil" id="mailUtil" placeholder="exemple@domaine.com" value="<?php echo $data['mailUtil']; ?>" />
                </li>
        <li><label for="telUtil">Téléphone </label>
                <input type="text" name="telUtil" id="telUtil" placeholder="Obligatoire" value="<?php echo $data['telUtil']; ?>" />
      
    </fieldset>
        <fieldset><legend>Modifier Caractèristiques</legend>
          <ol>
      
                  <li><label for="loginUtil">Login </label>
                <input type="text" name="loginUtil" id="loginUtil" placeholder="Obligatoire" value="<?php echo $data['loginUtil']; ?>" required="true" />
          
           <li><label for="pwdUtil"> Password </label>
                <input type="text" name="pwdUtil" id="pwdUtil" placeholder="Obligatoire" value="<?php echo $data['pwdUtil']; ?>" required="true" />   
        
        <li><label for="niveauUtil"> Niveau </label>
                <input type="text" name="niveauUtil" id="niveauUtil" placeholder="" value="<?php echo $data['niveauUtil']; ?>" required="true" />
        
        <li><label for="valideUtil"> Validation </label>
                <input type="text" name="valideUtil" id="validationUtil" placeholder="" value="<?php echo $data['valideUtil']; ?>" required="true" />
          
        <li><label for="id_secteur"> Secteur </label>
                <input type="text" name="id_secteur" id="id_secteur" placeholder="" value="<?php echo $data['id_secteur']; ?>" required="true" />
          
        <li><label for="idStock">Stock </label>
                <input type="text" name="idStock" id="idStock" placeholder="" value="<?php echo $data['idStock']; ?>" required="true" />
        
        <li><label for="codeSociete"> Code société </label>
                <input type="text" name="codeSociete" id="codeSociete" placeholder="Obligatoire" value="<?php echo $data['codeSociete']; ?>" required="true" />
            </li>
            </ol>
        
        </fieldset>
        <input type="submit" value="CHANGER"  />
        <INPUT TYPE="reset" NAME="nom" VALUE="RAZ">
  </form>




mon code js :

 function popupmu(idUtil){
    console.log (idUtil);
$("#popupmu").load("popupmu.php",
      {
      idUtil: idUtil    
      },function(data){
        console.log(data)
          $("#popupmu").dialog({
          width: 267,
           modal: false
        }); });


Dès que j'essaye d'intégrer mon formulaire dans le while, il apparait plus!
Pas d'erreur au niveau du firebug, bref... ça ne m'affiche aucune erreur et pourtant ça ne veux pas fonctionner, j'ai essayé de récupèrer mes valeurs avec (tout et n'importe quoi) un $retour, $base,$date et affecter mes variables de manière différentes m'a retourné des erreurs.
Bref, à l'aide, et merci pour vos réponses !
A voir également:

3 réponses

Utilisateur anonyme
30 juin 2014 à 15:36
Bonjour

Je n'ai pas lu bien loin parce que déjà :
    $nom = $base['nomUtil'];
    $prenom = $base['prenomUtil'];
   ...

Alors que ta variable c'est $data, pas $base
Quant à tes <?php echo $data['nomUtil']; ?> et autres variable après la sortie du while, ils ne peuvent pas marcher puisque si on est sorti du while, c'est que $data vaut false et que donc $data n'est pas un tableau et $data['nomUtil'] ne veut rien dire.
1
Fontainard Messages postés 68 Date d'inscription dimanche 16 mars 2014 Statut Membre Dernière intervention 24 janvier 2017
Modifié par Fontainard le 30/06/2014 à 16:11
J'ai modifié par data, je ne vois plus d'erreur apparemment tu as donc bien raison. Je m'y perds un peu en faisant plein de modifications (a). Mais lorsque je ferme la boucle du while après le formulaire, celui ne s'affiche pas. (pop up vide, sans erreurs)
Je fais un <?php } ?> à la fin. Je vais encore essayer avec plein d'echo, mais bon, c'est bizarre car il devrait comprendre à priori!

Le while pose problème apparemment, il n'y aurais pas d'autres moyens ?
0
Utilisateur anonyme
30 juin 2014 à 17:03
il devrait comprendre à priori
Tu auras fait un gros progrès quand tu seras persuadé que lui, il comprend toujours et que si ça ne fait pas ce que tu veux, c'est parce que toi tu lui a mal expliqué ce qu'il devait faire.
Le while pose problème apparemment, il n'y aurais pas d'autres moyens Tu sembles considérer que la programmation est une affaire de formule magique et que quand une ne marche pas il faut en essayer une autre. Bon, no comments, je ne vais pas t'en mettre des pages, ce n'est pas le but.

Pour en revenir à ton problème, y a-t-il plusieurs utilisateurs qui ont le même idUtil ?
1
Fontainard Messages postés 68 Date d'inscription dimanche 16 mars 2014 Statut Membre Dernière intervention 24 janvier 2017
Modifié par Fontainard le 1/07/2014 à 05:25
A partir du moment où je ne décèle pas les erreurs, et mon wamp non plus, j'ai vraiment du mal à modifier les choses vu que je débute, mais une fois encore tu as entièrement raison et je m'en remet à toi pour se coup.

Non sinon, c'est d'ailleurs la seule valeur que j'arrive à récupérer grâce à mon _POST et ma fonction.

Le bouton modifier est contenu dans chaque ligne d'un autre select, qui est ma bdd.

De cette façon:
<?php
      while ($data = $retour ->fetch()) {
      echo "<tr><td>".$data['idUtil']."</td>";
      echo "<td>".$data['nomUtil']."</td>";
      echo "<td>".$data['prenomUtil']."</td>";
      echo "<td>".$data['fonctionUtil']."</td>";
      echo "<td>".$data['loginUtil']."</td>";
      echo "<td>".$data['pwdUtil']."</td>";
      echo "<td>".$data['niveauUtil']."</td>";
      echo "<td>".$data['valideUtil']."</td>";
      echo "<td>".$data['mailUtil']."</td>";
      echo "<td>".$data['telUtil']."</td>";
      ?>
     <td><a onclick="popupmu(<?php echo $data['idUtil']; ?>);"><img src="images/icomodifier.png"></a> </td>
     <td><a onclick="popupsu(<?php echo $data['idUtil']; ?>);"><img src="images/icosupprimer.png"></a> </td></tr>
      <?php
      }
      echo "</table>";
      $base = null;


J'ai fais des echo test dans mon code php,
De cette manière:

 <?php 
$id = $_POST['idUtil'];
echo " test1";
 try { 
    $base = new PDO('mysql:host=localhost; dbname=iplanet', 'root'. '');
      }
      catch(exception $e)  {
      die ('Erreur '.$e->getMessage());
     }
     echo "test2";
      $base->exec("SET CHARACTER SET utf8");
      $retour = $base ->query('SELECT * FROM utilisateur WHERE idUtil= "$id"');
      echo "test3";
      while ($data = $retour ->fetch()) {
       echo $data['idUtil'];  
   echo "test4";
    $nom = $data['nomUtil'];
    $prenom = $data['prenomUtil'];
    $fonction = $data['fonctionUtil'];
    $login = $data['loginUtil'];
    $pwd = $data['pwdUtil'];
    $niveau =$data['niveauUtil'];
    $valide = $data['valideUtil'];
    $mail = $data['mailUtil'];
    $tel = $data['telUtil'];
    $secteur = $data['id_secteur'];
    $stock = $data['idStock'];
    $cdsociete = $data['codeSociete'];
    echo "test5";
 } 
?>


Seulement test1,test2 et test3 apparaissent, il n'aime pas le while apparemment.
0
Utilisateur anonyme
1 juil. 2014 à 08:33
il n'aime pas le while apparemment
Le php n'a pas à "aimer" ou "ne pas aimer". Au risque de répéter ce que j'ai dit dans mon message précédent, le php fait ce que tu lui as demandé.
Soyons logiques, comme l'interpréteur PHP.
S'il n'affiche pas "test4", c'est qu'il n'exécute pas l'instruction.
S'il ne l'exécute pas, c'est qu'il n'entre pas dans la boucle.
S'il n'entre pas dans la boucle, c'est que la condition du while ($data = $retour ->fetch()) est false
Deux possibilités : ou bien elle est en erreur, ou bien il n'y a aucun enregistrement dans ta table qui correspond à $id.
En y regardant bien, il y a une erreur dans ta requête.
'SELECT * FROM utilisateur WHERE idUtil= "$id"'
Ta chaîne commence et se termine par des simples apostrophes.
Donc les variables PHP à l'intérieur ne sont pas traitées comme des variables, mais comme de simples chaînes de caractères. Ce n'est que dans les chaînes entre doubles quotes que les variables PHP sont interprétées.
Tu as plusieurs solutions : tu décompose ta chaîne en plusieurs morceaux que tu concatènes :
'SELECT * FROM utilisateur WHERE idUtil= "'.$id.'"'

ou (perso je préfère) tu inverses les rôles des " et des ' :
"SELECT * FROM utilisateur WHERE idUtil= '$id'"

Note que tu n'aurais pas eu ce problème (ni quelques autres) si tu avais utilisé PDO comme il est recommandé, c'est à dire avec des requêtes préparées :
$retour= $base->prepare('SELECT * FROM utilisateur WHERE idUtil= :id');
$retour->execute(array(':id' => $id));
1
Fontainard Messages postés 68 Date d'inscription dimanche 16 mars 2014 Statut Membre Dernière intervention 24 janvier 2017
1 juil. 2014 à 10:24
Merci grandement pour ton aide. Tout fonctionne nickel. J'apprends beaucoup sur le tas alors je ne prend pas forcément les meilleures habitudes, ni parfois la rigueur nécessaire ce qui fait que des petites erreurs font que mes trucs ne fonctionnent pas ^^.

En tout cas, encore merci le père, pour tes explications concises c'est du très bon boulot !
0
Utilisateur anonyme
1 juil. 2014 à 10:37
De rien :)

À bientôt ? ^^
0
Fontainard Messages postés 68 Date d'inscription dimanche 16 mars 2014 Statut Membre Dernière intervention 24 janvier 2017
1 juil. 2014 à 15:11
Me connaissant, c'est bien envisageable. J'essaye de me forcer à trouver mes erreurs tout seuls, pas une chose aisée pour moi haha. Je vais terminer mon projet puis certainement reprendre des cours depuis le début en php de quoi consolider mes bases pour pouvoir faire des choses plus compliqués ;P

CCM est un site d'échange fort utile, donc ouais probablement à bientôt alors :P
0