Résolu PHP - Variable dans une requête PDO

Statut
N'est pas ouverte pour d'autres réponses.

Wims

Premium
Inscription
27 Août 2014
Messages
1 805
Réactions
418
Points
15 911
Hello,

Je voudrai savoir comment faire une requête SQL (avec PDO) de ce type :

PHP:
$mail = $_SESSION['admins'];

$sql = 'SELECT name FROM admins WHERE mail = $mail';

Voici mon code actuel :

PHP:
<?php
$sql = 'SELECT name FROM admins WHERE email = "[email protected]"';
$q = $db->query($sql);
$q->setFetchMode(PDO::FETCH_ASSOC);
while ($row = $q->fetch()):
?>

          <input type="text" name="name" id="name" class="validate" value="<?php echo $row['name'] ?>" readonly>
          <?php endwhile; ?>

Ce code fonctionne car ça retourne bien le nom qui correspond à l'email que j'ai mise, mais moi je voudrai mettre l'email que retourne $_SESSION['admins']; mais je n'y arrive pas D:

Si quel qu'un aurait une solution!
Merci!
 

Wims

Premium
Inscription
27 Août 2014
Messages
1 805
Réactions
418
Points
15 911
Salut !

Pourrait-tu me donner plus d'informations sur le contenu de ta base de données
+ Un screen de la vue sur ton navigateur
firefox_2017-11-28_17-42-39.png


Le formulaire est pré-rempli avec les informations déjà existante de l'utilisateur connecté.
Il me manque juste le "nom et prénom" sachant que l'adresse email est rempli grace au "$_SESSION['admins'];"

firefox_2017-11-28_17-45-24.png
 

Wims

Premium
Inscription
27 Août 2014
Messages
1 805
Réactions
418
Points
15 911
En faite, je comprends pas ce que tu veux faire, tu veux qu'il se passe quoi ?
Déjà il faut bien comprendre que cette page est accessible uniquement quand on est connecté au site.
Par exemple si on prend :RG:, quand tu vas dans "changer de pseudo" :
firefox_2017-11-28_18-37-15.png

Dans le input tu as ton pseudo de mit par défaut.

Et bien moi je veux faire pareil met pour mon input "nom", je veux que sa mette par défaut le nom d'utilisateur, la valeur qui se trouve dans la table "admins" dans la colonne "name".

Ou plus simplement, je veux juste récupérer le nom de l'utilisateur connecté x)
 

Tmoitoi

Membre
Inscription
28 Novembre 2017
Messages
16
Réactions
5
Points
46
Hello, voici un code type ;)

Je te conseil donc de include un config.php avec ce code:

Code:
$IP = "127.0.0.1";
$ID = "tabasededonnee";
$MDP = "lemotdepasse";
$Connexion = new PDO('mysql:host=' . $IP . ';charset=utf8', $ID, $MDP);


Et donc:

Code:
<?php
@include_once 'config.php';

    $Requete = "SELECT name
                           FROM admins
                           WHERE email = '[email protected]' ";
    $Param_Fetch= $Connexion->query($Requete);
    $Param_Fetch->setFetchMode(PDO::FETCH_OBJ);
    $Resultats = $Param_Fetch->rowCount();
 
    if ($Resultats!= 0) {
    ?>

  <?php while ($Donnes_Fetch = $Param_Fetch->fetch()) { ?>

          <input type="text" name="name" id="name" class="validate" value="<?= $Requete->name; > ?>" readonly>


    <?php }  } else { echo 'Aucun résultat'; } ?>

J'y ai ajouté une ligne pour calculer si il y a un résultat ou non afin d'afficher une info qu'il n'y a pas de résultats le cas échéant ;)

Tu peux ensuiter ajouter un array qui récupère par exemple la SESSION ID permettant de fetch l'info de X personne.
 

Wims

Premium
Inscription
27 Août 2014
Messages
1 805
Réactions
418
Points
15 911
Hello, voici un code type ;)

Je te conseil donc de include un config.php avec ce code:

Code:
$IP = "127.0.0.1";
$ID = "tabasededonnee";
$MDP = "lemotdepasse";
$Connexion = new PDO('mysql:host=' . $IP . ';charset=utf8', $ID, $MDP);


Et donc:

Code:
<?php
@include_once 'config.php';

    $Requete = "SELECT name
                           FROM admins
                           WHERE email = '[email protected]' ";
    $Param_Fetch= $Connexion->query($Requete);
    $Param_Fetch->setFetchMode(PDO::FETCH_OBJ);
    $Resultats = $Param_Fetch->rowCount();
 
    if ($Resultats!= 0) {
    ?>

  <?php while ($Donnes_Fetch = $Param_Fetch->fetch()) { ?>

          <input type="text" name="name" id="name" class="validate" value="<?= $Requete->name; > ?>" readonly>


    <?php }  } else { echo 'Aucun résultat'; } ?>

J'y ai ajouté une ligne pour calculer si il y a un résultat ou non afin d'afficher une info qu'il n'y a pas de résultats le cas échéant ;)

Tu peux ensuiter ajouter un array qui récupère par exemple la SESSION ID permettant de fetch l'info de X personne.
ça ne peut pas fonctionner au niveau de la requête il y a l'email du compte admin x)
"Ce code fonctionne car ça retourne bien le nom qui correspond à l'email que j'ai mise" bah ducoup ta réussie ^^ ?
Non, si tu regardes mon code :

PHP:
<?php
$sql = 'SELECT name FROM admins WHERE email = "[email protected]"';
$q = $db->query($sql);
$q->setFetchMode(PDO::FETCH_ASSOC);
while ($row = $q->fetch()):
?>

Dans la requête j'ai mis "WHERE email = "[email protected]"'; Donc forcément ça marche, mais la peux importe qui est connecté ça va retourner le nom du compte associé à l'email "[email protected]".
Sachant que "$mail" me retourne l'email de la personne étant actuellement connecté, je voudrai faire en sorte de remplacer "WHERE email = "[email protected]"';" par "WHERE email = $mail';
Mais on ne peux pas mettre de variable dans une requête, d'ou ma question
 

Tmoitoi

Membre
Inscription
28 Novembre 2017
Messages
16
Réactions
5
Points
46
Dans ce cas tu fais

WHERE email = '" . $SESSION["email"] . "' '

Exemple:
sd0upgV.png



Si tu désires mettre une variable voici le code:

Code:
<?php
@include_once 'config.php';

    $Requete = "SELECT name
                           FROM admins
                           WHERE email = ?
    $Param_Fetch= $Connexion->query($Requete);
    $Param_Fetch->execute(array(
                            $email));
    $Param_Fetch->setFetchMode(PDO::FETCH_OBJ);
    $Resultats = $Param_Fetch->rowCount();

    if ($Resultats!= 0) {
    ?>

  <?php while ($Donnes_Fetch = $Param_Fetch->fetch()) { ?>

          <input type="text" name="name" id="name" class="validate" value="<?= $Requete->name; > ?>" readonly>


    <?php }  } else { echo 'Aucun résultat'; } ?>

Exemple:
84QkL4D.png


En bref, le ? va chercher l'array dans le execute.

J'espère qu'il s'agit de la réponse à ta question, j'avais pas fait gaffe mais ton code était déjà ok il suffit donc de le compléter avec l'array.

Belle soirée :)
 
Dernière édition:

Wims

Premium
Inscription
27 Août 2014
Messages
1 805
Réactions
418
Points
15 911
Dans ce cas tu fais

WHERE email = '" . $SESSION_ID["email"] . "' '

Exemple:
sd0upgV.png



Si tu désires mettre une variable voici le code:

Code:
<?php
@include_once 'config.php';

    $Requete = "SELECT name
                           FROM admins
                           WHERE email = ?
    $Param_Fetch= $Connexion->query($Requete);
    $Param_Fetch->execute(array(
                            $email));
    $Param_Fetch->setFetchMode(PDO::FETCH_OBJ);
    $Resultats = $Param_Fetch->rowCount();

    if ($Resultats!= 0) {
    ?>

  <?php while ($Donnes_Fetch = $Param_Fetch->fetch()) { ?>

          <input type="text" name="name" id="name" class="validate" value="<?= $Requete->name; > ?>" readonly>


    <?php }  } else { echo 'Aucun résultat'; } ?>

Exemple:
84QkL4D.png


En bref, le ? va chercher l'array dans le execute.
J'ai fait la 2eme solution que tu m'as donné, merci!
Mais j'ai une erreur :

firefox_2017-11-28_19-02-36.png


La ligne 109 est la dernière ligne du fichier (ligne vide), j'ai essayé de rajouter un

<?php } ?> à la fin mais ça change rien
 

Wims

Premium
Inscription
27 Août 2014
Messages
1 805
Réactions
418
Points
15 911
Normalement la bêtise est là

<?= $Requete->name; > ?>

Mets ainsi

<?= $Requete->name; ?>

Si ça ne fonctionne toujours pas peux-tu me citer le code final ? que je te le débug direct.
Yep je viens de retirer à l'instant

Et j'avais aussi essayé le "?" que j'utilise pour le changement de mot de passe, mais étrangement il me sort ceci pour ce formulaire :

firefox_2017-11-28_19-06-55.png
 

Wims

Premium
Inscription
27 Août 2014
Messages
1 805
Réactions
418
Points
15 911
Peux-tu me citer le code ? ou le pastebin directement ?
PHP:
<?php

              $Requete = "SELECT name FROM admins WHERE email = ?";
              $Param_Fetch = $db->query($Requete);
              $Param_Fetch->execute(array($email));
              $Param_Fetch->setFetchMode(PDO::FETCH_OBJ);
              $Resultats = $Param_Fetch->rowCount();

              if ($Resultats!= 0) {
          ?>
          <?php while ($Donnes_Fetch = $Param_Fetch->fetch()) { ?>

          <i class="material-icons prefix">person_pin</i>
          <input type="text" name="name" id="name" class="validate" value="<?php $Requete->name; ?>" readonly>
          <?php }  } ?>
          <label for="name">Votre nom et prénom</label>
        </div>
 

Tmoitoi

Membre
Inscription
28 Novembre 2017
Messages
16
Réactions
5
Points
46
Et voici la correction:

Code:
<?php

              $Requete = "SELECT name FROM admins WHERE email = ?";
              $Param_Fetch = $db->prepare($Requete);
              $Param_Fetch->execute(array($email));
              $Param_Fetch->setFetchMode(PDO::FETCH_OBJ);
              $Resultats = $Param_Fetch->rowCount();

              if ($Resultats != 0) {
          ?>
          <?php while ($Donnes_Fetch = $Param_Fetch->fetch()) { ?>

          <i class="material-icons prefix">person_pin</i>
          <input type="text" name="name" id="name" class="validate" value="<?= $Requete->name; ?>" readonly>
          <?php }  } ?>
          <label for="name">Votre nom et prénom</label>
        </div>

Je tiens à te préciser également que le <?= ?> <?= $Requete->name; ?> permet d'echo un string directement que si tu fais <?php ?> <?php echo $Requete->name; ?> tu dois ajouter un echo avant, le query était à ce moment anormal tu dois faire un prepare ça permet entre autre de faire fonctionner l'array avec le ?
 

Wims

Premium
Inscription
27 Août 2014
Messages
1 805
Réactions
418
Points
15 911
Et voici la correction:

Code:
<?php

              $Requete = "SELECT name FROM admins WHERE email = ?";
              $Param_Fetch = $db->prepare($Requete);
              $Param_Fetch->execute(array($email));
              $Param_Fetch->setFetchMode(PDO::FETCH_OBJ);
              $Resultats = $Param_Fetch->rowCount();

              if ($Resultats != 0) {
          ?>
          <?php while ($Donnes_Fetch = $Param_Fetch->fetch()) { ?>

          <i class="material-icons prefix">person_pin</i>
          <input type="text" name="name" id="name" class="validate" value="<?= $Requete->name; ?>" readonly>
          <?php }  } ?>
          <label for="name">Votre nom et prénom</label>
        </div>

Je tiens à te préciser également que le <?= ?> <?= $Requete->name; ?> permet d'echo un string directement que si tu fais <?php ?> <?php echo $Requete->name; ?> tu dois ajouter un echo avant, le query était à ce moment anormal tu dois faire un prepare ça permet entre autre de faire fonctionner l'array avec le ?
Merci ça avance !
(Et oui je savais :D)

Mais.. encore une erreur! :(

firefox_2017-11-28_19-16-34.png


(Je precise que $email = $_SESSION['admin']; )
 

Tmoitoi

Membre
Inscription
28 Novembre 2017
Messages
16
Réactions
5
Points
46
Donc le query se fait avec succès, il te retourne la bonne adresse E-Mail ?
Est-ce que "Votre nom et prénom" est un bug ou est-ce normal ?
La ligne de l'erreur est bien celle du query ou du echo ?

Si tu mets $mail = 'tonemail'; de manière manuelle, est-ce que cette erreur disparaît ?

Désolé pour toutes ces questions mais n'ayant pas le full code devant les yeux c'est pas évident héhé.
 

Wims

Premium
Inscription
27 Août 2014
Messages
1 805
Réactions
418
Points
15 911
Donc le query se fait avec succès, il te retourne la bonne adresse E-Mail ?
Oui :p
st-ce que "Votre nom et prénom" est un bug ou est-ce normal ?
ce qu'il y a dans le input c'est le HTML de l'érreur de wamp x)
La ligne de l'erreur est bien celle du query ou du echo ?
Celle du echo
Si tu mets $mail = 'tonemail'; de manière manuelle, est-ce que cette erreur disparaît ?
Si je dis que $email = "[email protected]"; l'erreur ne change pas :mmh:
 

Tmoitoi

Membre
Inscription
28 Novembre 2017
Messages
16
Réactions
5
Points
46
Très bien donc dans ce cas essai via le <?php echo $Requete->name; ?> que tu avais initialement mis, l'erreur ne vient pas du array ni du query d'ailleurs, il est possible que le <?= ne soit pas supporté, si l'erreur ne s'en va pas je ne peux que te suggérer de mettre un error_reporting sur cette page afin de cacher cette erreur qui, selon moi, n'est pas une faille, ceci dit si tu désires une aide avancée n'hésite pas à me contacter par MP ou E-Mail je pourrai t'aider d'avantage avec plaisir.
 

Wims

Premium
Inscription
27 Août 2014
Messages
1 805
Réactions
418
Points
15 911
Très bien donc dans ce cas essai via le <?php echo $Requete->name; ?> que tu avais initialement mis, l'erreur ne vient pas du array ni du query d'ailleurs, il est possible que le <?= ne soit pas supporté, si l'erreur ne s'en va pas je ne peux que te suggérer de mettre un error_reporting sur cette page afin de cacher cette erreur qui, selon moi, n'est pas une faille, ceci dit si tu désires une aide avancée n'hésite pas à me contacter par MP ou E-Mail je pourrai t'aider d'avantage avec plaisir.
Tu veux que au niveau du <?= Requete->name; ?> je mettes <?php echo Requete->name; ?> ?
Si c'est cela, rien ne change D:
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut