SELECT valeurs pour page profil.

Résolu/Fermé
Legrandfifou Messages postés 109 Date d'inscription samedi 3 mai 2014 Statut Membre Dernière intervention 17 mars 2017 - Modifié par Legrandfifou le 4/07/2015 à 17:58
Legrandfifou Messages postés 109 Date d'inscription samedi 3 mai 2014 Statut Membre Dernière intervention 17 mars 2017 - 5 juil. 2015 à 02:14
Bonjour,
j'ai un système de connexion qui marche nickel et je suis dans l'optique de créer une page profil si l'on peut l'appeler comme ca , donc je récupéré mes valeurs dans ma base de données et ensuite je les stockes dans une variables $donnes et ensuite je l'es écrit dans le div du profil mais je rencontre un soucis .. Lorsque j'affiche il n'affiche rien , il dois afficher les informations correspondant aux pseudo et id donc j'ai fait comme ceci :

<div class="profile">

<?php
$bdd = new PDO ('mysql:host=localhost;dbname=connexion', 'root');

$donnees = $bdd->query('SELECT birthday, country, lvl FROM membres WHERE pseudo = :pseudo AND id = :id');


if (isset($_SESSION['pseudo']))
{

echo "<div class='profile_connected'><a href='profil'>" , $_SESSION['pseudo'] , "</a>
<img src='perso.png' class='perso_img' ></div>" , $donnees['lvl'] ,"

";


}
else
{
echo '<div class="profile_connected">Bonjour, visiteur ! </div>';
}

?>


Je suis débutant et j'ai essayé par rapport a ce tutoriel https://openclassrooms.com/courses/concevez-votre-site-web-avec-php-et-mysql/lire-des-donnees-2 , je reprend les idées de base mais ca ne semble pas marcher et en fait je comprend pas pourquoi :/
A voir également:

3 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
Modifié par jordane45 le 5/07/2015 à 01:44
Bonjour,
Il ne faut Pas d'apostrophes ou de quotes autour des variables préparées dans la requête..

De plus... les variables :toto ... s'utilises avec les instructions PREPARE et EXECUTE ... pas QUERY !


<?php
//Connexion à la BDD
require_once "connexionBDD.php";

// Récupération propre de la variable PSEUDO :
$pseudo = isset($_SESSION['pseudo']) ? $_SESSION['pseudo'] : null;

//Avant de faire le reste du code... je vérifie qu'il y a bien un pseudo
if($pseudo ){

// Je sépare la requete de son exécution cela permet d'en faire un debug au cas où
$sql = "SELECT birthday, country, lvl 
               FROM membres 
               WHERE pseudo = :pseudo 
               AND id = :id ";

// Je sépare les variables de la requête de son exécution cela permet d'en faire un debug au cas où
$params = array(":pseudo"=>$pseudo,":id"=>$id);

try{
    $req = $bdd->prepare($sql);
    $req->execute($params);
    $donnees = $req->fetch();
} catch(Exception $e) {
// en cas d'erreur
   echo "<br>ERREUR ! ".$e->getMessage()."<br>";
   echo "<br>params : <br>";
   print_r($params);
}

$lvl = $donnees['lvl'];
echo "<div class='profile_connected'>
                  <a href='profil'>$pseudo
                     <img src='perso.png' class='perso_img' >
                   </a>
                </div> $lvl";


}else{
 echo '<div class="profile_connected">Bonjour, visiteur ! </div>';
}


Bien sûr.. il faut que tu penses à initialiser tes variables $pseudo et $id .... avec des valeurs....


PS: Au passage ... ne colle pas le code de connexion à ta BDD directement dans ta page..... places le dans un autre fichier que tu n'auras qu'à inclure dans tes pages.....
(via l'instruction REQUIRE_ONCE par exemple )
1
Legrandfifou Messages postés 109 Date d'inscription samedi 3 mai 2014 Statut Membre Dernière intervention 17 mars 2017 5
5 juil. 2015 à 01:59
Non mais les valeurs id et pseudo sont récupérer via la table , l'id et le pseudo ne servent qu'a permettre de sélectionner uniquement le level et autre de cet id et pseudo. De plus je cherche a le faire de la facon que je l'ai faite .. ( Je sais je suis chiant ) mais ca me permet de m'y retrouver dans le code ce que j'aimerais c'est que si tu a la possibilité c'est de me dire ce qui ne va pas , par exemple tu devrais créer ceci ou cela car comme ceci ca ne marchera pas , désolé je peut paraître exigeant mais je cherche a le faire par moi même avec mon code , un code que je comprend :) Désolé j'ai l'impression d'être hyper relou mais merci de ta réponse
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
5 juil. 2015 à 02:03
Si ID est récupéré via ta bdd... il n'a donc rien a faire dans le WHERE de ta requête. ...


pour ce qui est de la façon de faire. .. je te propose la meilleur... si tu n'en veux pas. .. tant pis pour toi. ...
0
Legrandfifou Messages postés 109 Date d'inscription samedi 3 mai 2014 Statut Membre Dernière intervention 17 mars 2017 5
Modifié par Legrandfifou le 5/07/2015 à 02:14
Je m'excuse encore , encore , je suis bête et je ne peu m'en prend qu'à moi je dis que je ne comprend pas mais je ne lis pas les commentaires //blabla donc en fait j'ai compris comment tu as fait effectivement l'id ne sert a rien car depuis le début j'utilise pseudo comme vérification :) J'avoue aussi que tout ce qui est try , catch je n'ai pas vu dans les cours d'openclassroom :s ni ce $pseudo = isset($_SESSION['pseudo']) ? $_SESSION['pseudo'] : null;
du coup je ne la comprend pas , si tu as de plus ample informations , tuto , cours sur ca je les prends :)

Encore désolé et ta méthode fonctionne très bien :) Même si je n'ai pas la même mise en forme c'est très gentil et encore encore désolé
0
totoyo47 Messages postés 260 Date d'inscription vendredi 10 juillet 2009 Statut Membre Dernière intervention 30 mars 2020 133
4 juil. 2015 à 19:08
$req = $bdd->query('SELECT birthday, country, lvl FROM membres WHERE pseudo = :pseudo AND id = :id');
$donnees = $req->fetch()


Je ne m'y connais pas assez en PHP, mais disons que $req contient la requête SQL.
Le fetch permet d'obtenir les données (de la première ligne) de la requête.
Un expert en PHP t'aurait donné une explication plus précise ;)
0
Legrandfifou Messages postés 109 Date d'inscription samedi 3 mai 2014 Statut Membre Dernière intervention 17 mars 2017 5
Modifié par jordane45 le 5/07/2015 à 01:31
Merci de ta réponse et je pense avoir compris avec fetch(); ! :) J'ai modifié comme ceci
<?php
     $bdd = new PDO ('mysql:host=localhost;dbname=connexion', 'root');
     $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
     $req = $bdd->query('SELECT birthday, country, lvl FROM membres WHERE pseudo = :pseudo AND id = :id ');
     $donnees = $req->fetch();

  

      if (isset($_SESSION['pseudo']))
       
       {

       echo "<div class='profile_connected'><a href='profil'>" , $_SESSION['pseudo'] , "</a>
       <img src='perso.png' class='perso_img' ></div>" , $donnees['lvl'] ," ";

    
       }

      else 
   
       {
    
       echo '<div class="profile_connected">Bonjour, visiteur ! </div>';
       }

    ?>


Mais j'avais l'erreur
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':pseudo AND id = :id' at line 1' in C:\wamp\www\tests\index.php on line 36


Donc j'ai rajouter des " a la ligne SELECT
<?php
     $bdd = new PDO ('mysql:host=localhost;dbname=connexion', 'root');
     $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
     $req = $bdd->query('SELECT birthday, country, lvl FROM membres WHERE pseudo = ":pseudo" AND id = ":id" ');
     $donnees = $req->fetch();

  

      if (isset($_SESSION['pseudo']))
       
       {

       echo "<div class='profile_connected'><a href='profil'>" , $_SESSION['pseudo'] , "</a>
       <img src='perso.png' class='perso_img' ></div>" , $donnees['lvl'] ," ";

    
       }

      else 
   
       {
    
       echo '<div class="profile_connected">Bonjour, visiteur ! </div>';
       }

    ?>

L'erreur est supprimer mais ca n'affiche toujours rien :/


EDIT : Ajout du LANGAGE dans les BALISES DE CODE .
0