[RESOLU]Récupérer données MySQL en php

Eléphanteau du PHP | 36 Messages

26 mai 2014, 10:46

Bonjour,

Je voudrais savoir comment je pourrais récupérer en PHP les données MySQL que j'ai récupérées avec ma requête.

Genre, j'ai ça:
$stmt4 = $bdd->prepare("SELECT passwordUser FROM users WHERE idUser = :idUser");
Et je cherche à récupéré la donnée derrière passwordUser. Je fais comment?

Merci
Modifié en dernier par Jexus11 le 26 mai 2014, 12:00, modifié 1 fois.

Eléphant du PHP | 95 Messages

26 mai 2014, 11:06

Ca devrait le faire ;) mais n'oublie pas de définir la valeur d'idUser où j'ai mis en commentaire ;)
$stmt4 = $bdd->prepare("SELECT passwordUser FROM users WHERE idUser = :idUser");
$stmt4->execute(array(':idUser'=>/*valeur_correspondante*/)) //on execute la requete préparée en prenant soin de définir la valeur d'idUser
if($res = $stmt4->fetchObject())//on récupère la donnée sous forme d'objet
{
     echo $res->passwordUser; //on affiche l'attribut passwordUser de l'objet res
}
La b!te et le couteau sont bien souvent les meilleurs outils...mais aussi et surtout les seuls qui sont toujours à disposition!!

Eléphanteau du PHP | 36 Messages

26 mai 2014, 11:11

Ne t'en fais pas pour la définition de la valeur d'idUser, j'ai juste copier la ligne de code qui m'étais utile pour mon problème ;)

Donc, j'imagine que si rien ne s'affiche, c'est que ma requête est foireuse?

Merci pour ton aide en tout cas.

Mammouth du PHP | 2278 Messages

26 mai 2014, 11:13

POur savoir si une requête est "foireuse" il faut la faire afficher et la tester dans PHPMYADMIN ou autre semblable; moi jele fais avec mysql en ligne d ecommande.
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphanteau du PHP | 36 Messages

26 mai 2014, 11:15

Ha ouais j'oublie tout le temps cet outil, pourtant super utile.

Bon ben visiblement ma requête es fonctionnelle. Alors pourquoi ça marche pas? Pourquoi il ne m'affiche rien?

Voilà la partie de code concerné:
$codeSms = filter_input(INPUT_POST, 'codeSms');
$codeSmsHash = md5($codeSms);
$_SESSION['codeSmsHash'] = $codeSmsHash;

if (isset($codeSms)) 
{
  $stmt4 = null;
  $bdd = null;
  try
  {
      $bdd = PDO2::getInstance();
      // Préparation de la requête
      $stmt4 = $bdd->prepare("SELECT passwordUser FROM users WHERE idUser = :idUser");
      
      // Exécution de la requête en passant les marqueurs et leur variables associées dans un tableau
      $stmt4->execute(array(':idUser'=>$_SESSION['lastId'])) or die('erreur requete');
      
      // Création du tableau du résultat avec fetchAll qui récupère tout le tableau en une seule fois
      $resultat = $stmt4->fetchAll(); 
      $nb_result = count($resultat);

      
      if ($_SESSION['codeSmsHash'] == $resultat['passwordUser'])
      {
          /* Démarre une session si aucune n'est déjà existante et enregistre le pseudo dans la variable de session $_SESSION['login'] qui donne au visiteur la possibilité de se connecter.  */
          if (!session_id()) session_start();
          $_SESSION['login'] = $_SESSION['loginUser'];
                          
          //$message = 'Bonjour '.htmlspecialchars($_SESSION['login']).', vous êtes connecté';
          //ou redirection vers une page en cas de succès ex : menu.php
          header("Location: https://agendapro.fr");
          exit();

          //Si vous voulez récupérer les données elles se trouvent dans la première et unique ligne du tableau $resultat par exemple
          //$result = $resultat[0];
          //echo $result['pseudo'];
          //echo $result['date_enregistrement'];
          
      }
      else if ($nb_result > 1)
      {
              // Par sécurité si plusieurs réponses de la requête mais si la table est bien construite on ne devrait jamais rentrer dans cette condition
              $message = 'Problème de d\'unicité dans la table';
      }
      else
      {   // Le pseudo ou le mot de passe sont incorrect
              $message = 'Code SMS incorrect.';
      }
      if($res = $stmt4->fetchObject())//on récupère la donnée sous forme d'objet
  {
       echo $res->passwordUser; //on affiche l'attribut passwordUser de l'objet res
  }

  }
  catch (PDOException $e)
  {
          $message = 'Problème dans la requête de sélection';
  }
}

Eléphant du PHP | 95 Messages

26 mai 2014, 11:16

on ne peut pas afficher les requêtes préparées de pdo telles qu'elles seront à l'éxécution!!
essaye d'afficher ta variable de session ($_SESSION['lastId']) pour voir si elle est bien remplie!
Ton session_start() me semble très mal positionné ;) c'est en tout début de page qu'il faut le mettre !!!
La b!te et le couteau sont bien souvent les meilleurs outils...mais aussi et surtout les seuls qui sont toujours à disposition!!

Eléphanteau du PHP | 36 Messages

26 mai 2014, 11:21

Mon LastId retourne bien 666.
C'est d'ailleurs avec cette variable que j'ai testé ma requête sur PHPHMyAdmin.

Mon session_start() est positionné ici car il sert à ouvrir une session UNIQUEMENT si les conditions requises sont remplies. C'est une sorte de script de connexion.

Eléphant du PHP | 95 Messages

26 mai 2014, 11:24

et var_dump($resultat) te retourne t'il qqch?
car tu fais déjà un
$resultat = $stmt4->fetchAll();
donc
if($res = $stmt4->fetchObject())//on récupère la donnée sous forme d'objet
  {
       echo $res->passwordUser; //on affiche l'attribut passwordUser de l'objet res
  }
ne donnera rien car tu a déjà parcouru tous les résultats!!
La b!te et le couteau sont bien souvent les meilleurs outils...mais aussi et surtout les seuls qui sont toujours à disposition!!

Eléphanteau du PHP | 36 Messages

26 mai 2014, 11:29

Quand je fait un var_dump, il me retourne bien le password que je suis censé utilisé pour le comparer à ce que je rentre dans mon champ codeSms.

En faite, je vous explique un peu le prinipe:
C'est une page de confirmation par sms. Lorsque le client s'inscrit, après avoir renseigné ses infos, il arrive sur cette page où un code lui sera envoyé par sms. Il rentrera ce code dans le champ prévu à cet effet, ce code sera comparé et si il est identique à celui en base, la confirmation se fait, et il passe à l'étape suivante.

Or, je n'arrive pas à récupérer correctement le passwordUser pour le comparer.

Eléphant du PHP | 95 Messages

26 mai 2014, 11:30

peux tu poster le resultat de var_dump?
La b!te et le couteau sont bien souvent les meilleurs outils...mais aussi et surtout les seuls qui sont toujours à disposition!!

Eléphanteau du PHP | 36 Messages

26 mai 2014, 11:32

array
0 =>
array
'passwordUser' => string '707ba1469306f8170a3970df6aae6bf5' (length=32)
0 => string '707ba1469306f8170a3970df6aae6bf5' (length=32)


J'ai bien mon passwordUser qui est retourné.

Eléphant du PHP | 95 Messages

26 mai 2014, 11:39

Alors comme te le montre ce var_dump

Code : Tout sélectionner

array 0 => array 'passwordUser' => string '707ba1469306f8170a3970df6aae6bf5' (length=32) 0 => string '707ba1469306f8170a3970df6aae6bf5' (length=32)
Ton tableau $resultat
contient pour la clé 0, un autre tableau avec deux clés soit passwordUser soit 0
donc pour accéder à passwordUser:
c'est
$resultat[0]['passwordUser'] 
         //ou alors
       $resultat[0][0]       
La b!te et le couteau sont bien souvent les meilleurs outils...mais aussi et surtout les seuls qui sont toujours à disposition!!

Eléphanteau du PHP | 36 Messages

26 mai 2014, 11:46

Merci pour ton aide. J'ai toujours du mal avec PHP.


Bon, est ce que je dois refaire un autre sujet ou je peux poster ici la suite du problème?
En faite, je n'arrive pas à exécuter le header(location: index.php) que je suis censé utiliser en confirmant le code sms.

Est ce que je peux vous filer le code php ici ou je recréé un topic?

Eléphant du PHP | 95 Messages

26 mai 2014, 11:55

Suis pas admin, dans le doute crée un autre topic et met celui ci en résolu!!
La b!te et le couteau sont bien souvent les meilleurs outils...mais aussi et surtout les seuls qui sont toujours à disposition!!