IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Récupérer des valeurs d'une base de données


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2024
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 24
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2024
    Messages : 12
    Points : 10
    Points
    10
    Par défaut Récupérer des valeurs d'une base de données
    Bonjour à tous

    Etant une grande débutante en PHP et SQL, j'ai décidé de m'entraîner et d'apprendre en développant un site de recette de cuisine.
    Pour la précision, je travaille avec Wamp, HTML, CSS, PhpmyAdmin, et MySQL.
    Il y aura donc une gestion des droits des utilisateurs ainsi que des requêtes pour envoyer et récupérer des recettes de cuisines vers une base de données Mysql.
    Le problème est que depuis plusieurs jours maintenant je bloque sur la récupération de mes données.

    Voici mon code qui est supposé permettre à l'utilisateur de s'identifier et de se connecter. Si l'utilisateur est est un simple User, alors il sera redirigé vers les pages pour utilisateurs. Et si l'utilisateur est enregistré en base de données comme étant un Admin, alors il sera redirigé vers les pages administrateurs. Mon problème est que lorsque j'essaye de lancer mon code j'obtiens une erreur "Undefined Array Key" au niveau de $nom = $data['Pseudo'] et $role = $data['Role']. En faisant des recherches, j'ai cru comprendre que cette erreur était dû au fait que je n'avais pas testé mes valeurs avec isset, mais je ne suis pas sûre.
    Est-ce que isset est obligatoire pour afficher les données d'une requête ?
    Si des personnes assez bienveillantes pouvaient m'expliquer ce qui ne marche pas dans mon code, je vous serait reconnaissante car même après des recherches, la logique de mon code me semble bonne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <?php
     
    session_start();
     
    if (isset($_POST['submit']))
    {
        $name = $_POST['nom'];
        $password = $_POST['password'];
     
        $con = new PDO("mysql:host=localhost;dbname=recettedev", 'root', '');
     
        if(!empty($name) AND !empty($password))
        $sql = "SELECT * FROM user WHERE Pseudo = '$name' ";
        $result = $con->prepare($sql);
        $result->execute();
        $data = $result->fetch();
     
    if ($data) {
          $nom = $data['Pseudo'];
          $role = $data['Role'];
        echo  $role;
    } else {
        echo "Aucun utilisateur trouvé.";
    }
        }
    ?>
    PS : Mon code est très simple pour le moment car mon but premier était déjà qu'il marche avant de pousser plus loin. Mais dès que mon code marchera, je me pencherais sur la sécurité en ajoutant htmlspecialChars et en utilisant la fonction hash() pour protéger les données de mes utilisateurs.

    Je remercie tous ceux qui prendront le temps de lire mon message.

  2. #2
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2022
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 20
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2022
    Messages : 184
    Points : 362
    Points
    362
    Par défaut
    Bonjour,
    - Pour ce qui est de https://www.php.net/manual/fr/function.isset.php
    Elle permet de vérifier si une variable est bien défini. C'est pas obligatoire mais plus tu contrôles tes datas moins tu risqueras une exception.

    - Au passage je sais pas si tu connais les try catch mais ca peut être utile

    - Une solution pour le Array undefined key (mettre une valeur par défaut) :
    https://www.developpez.net/forums/d2...#post_11880562

    Si tu récupères toujours pas de valeur après les modifications , exécute ta requête sur phpMyAdmin pour voir si tu récupère bien un résultat.
    Oublie la précédente phrase j'ai pas vu les dernières lignes
    Cdt
    Un problème sans solution est un problème mal posé. (Albert Einstein)

  3. #3
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2024
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 24
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2024
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Merci beaucoup pour ta réponse gabi7756 et pour avoir prit le temps de me répondre.
    Je suis en train de regarder les liens que tu m'as envoyé.
    Concernant l'erreur Array undefined key, je dois dire que j'ai du mal à comprendre. J'ai vu qu'il pouvait s'agir d'une erreur qui s'active quand on fait référence à une clé sans valeur mais aussi que ça pouvait être un problème d'url comme mentionné dans ce post https://openclassrooms.com/forum/suj...rray-key-fb669.
    Pourtant, il me semble que $nom = $data['Pseudo'] et $role = $data['Role'] sont bien définis, non ?

  4. #4
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2022
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 20
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2022
    Messages : 184
    Points : 362
    Points
    362
    Par défaut
    Citation Envoyé par _Dei_ Voir le message
    J'ai vu qu'il pouvait s'agir d'une erreur qui s'active quand on fait référence à une clé sans valeur mais aussi que ça pouvait être un problème d'url comme mentionné dans ce post https://openclassrooms.com/forum/suj...rray-key-fb669.
    Pourtant, il me semble que $nom = $data['Pseudo'] et $role = $data['Role'] sont bien définis, non ?
    Si ton tableau $data est vide, tu essayes d'accéder à une clé "Pseudo" sur un tableau vide.
    Le problème d'url que tu mentionnes dans ton post c'est exactement la même chose. Il s'était embrouillé les pinceaux sur son id ...

    Étape 1 :
    Copie colle ta requête SQL dans phpMyAdmin ou un équivalent pour vérifier que tu obtiens bien un Pseudo + Role pour l'utilisateur que tu utilises.

    Étape 2 :
    Tu colles une entrée de table dans la conv si jamais tu trouves pas, ca pourra peut être aider à trouver le problème.

    Étape 3 :
    Tu peux aussi faire quelque chose comme var_dump($data); pour voir ce qui se trouve dans ton tableau data, peut être que tu as fait un loupé une la syntaxe.

    Étape 4 :
    Regarde pour faire des requêtes préparé par la suite, niveau clarté et surtout sécu ca sera bien mieux.

    Étape 4 bis :
    J'ai bien envie d'un café


    Cdt,
    Un problème sans solution est un problème mal posé. (Albert Einstein)

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 406
    Points : 40 000
    Points
    40 000
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Citation Envoyé par _Dei_ Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        $sql = "SELECT * FROM user WHERE Pseudo = '$name' ";
    Je remercie tous ceux qui prendront le temps de lire mon message.
    Deux remarques concernant la requête SQL :
    • il ne faut jamais utiliser SELECT * dans un livrable, j'explique pourquoi dans mon blog ICI
    • il est préférable de ne pas nommer les objets (tables, vues, colonnes...) avec des noms réservés tels que "USER"
      ça oblige à encadrer ces noms avec des délimiteurs (double quotes en standard, quotes inversées avec MySQL), ce qui est assez pénible à l'usage.

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/07/2011, 19h05
  2. Enregistrer des valeurs dans une base de donnée SQL
    Par MoTaWer dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 11/05/2011, 15h16
  3. affecter une valeur d'une base de donné à un Combobox.
    Par Jcpan dans le forum Débuter avec Java
    Réponses: 9
    Dernier message: 14/01/2009, 16h42
  4. insérer des élément dans une base de donné
    Par wiss20000 dans le forum JDBC
    Réponses: 5
    Dernier message: 01/03/2007, 15h49
  5. [c#] [dataadapter] effacer des ranger dans une base de donne
    Par mahboub dans le forum Accès aux données
    Réponses: 4
    Dernier message: 02/12/2005, 02h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo