Partage
  • Partager sur Facebook
  • Partager sur Twitter

Vérification d'une variable dans une base de donné

    28 janvier 2023 à 12:33:45

    Bonjour !

    Je suis en train d'apprendre le PHP/MYSQLI. Je me retrouve confronté un petit problème. Je ne sais pas si c'est que je n'ai pas le bon vocabulaire ou si je ne réfléchis pas correctement.. J'expose le soucis :

    Imaginons, j'ai une base de données avec par exemple : 

    1(qui est l'identifiant) chat(qui est le nom)

    2(id) chien(nom)

    ...ETC.

    J'ai fait un formulaire form dans lequel un utilisateur connecté peut inscrire le nom d'un animal.  Si un mot est renseigné et que l'utilisateur à cliquer sur "rechercher" alors cela me génère un lien cliquable seulement pour les animaux qui existe dans la bdd. L'utilisateur clique sur ce dernier, ce qui le redirige vers une page qui donne le nom et la description de l'animal en question. 

    Là où je bloque c'est que si jamais l'animal n'existe pas dans ma base de données, ça me génère une erreur. Du coup je me suis dit, je vais rajouter un "if", que si le mot existe dans la base de données, alors ça me génère le lien, sinon ça affiche à l'utilisateur, que ce n'est pas dans ma bdd. Et c'est là où je ne comprends pas comment faire.

    Je vous mets le code que j'ai fait, avec le if qui me bloque :

    <?php
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); //m'aide pour les erreurs
    ?>
    
    
    <!DOCTYPE html>
    <html>
        <head>
            <title>Accueil</title>
        </head>
        <body>
            <div>
                <h1>Accueil</h1>
                <p>Bienvenue sur le mini-site consacré aux villes.</p>
                <p>Utilisez la fonction de recherche pour avoir accès aux différentes informations de la ville.</p>
                <p>Bonne visite !</p>
                <form action="" method="GET">
                    <input type="text" name="user_search" placeholder="Votre animal">
                    <input type="submit" name="recher" value="Recherche">
                </form>
    <?php
                @$mot = $_GET['user_search'];
    //connexion
                $mysqli = new mysqli('localhost', 'root', '', 'test_php');
    
    //requete
                $result = $mysqli->query("SELECT animal_id, animal_nom FROM animal WHERE animal_nom = '".$mot."'");
    
    //tranformation en array avec fetch array
                while ($row = $result->fetch_array()){
                    //Création du nouvel array pour l'affichage
                    $animaux[$row['animal_id']] = $row['animal_id'];
                    var_dump($animaux);
                }
        
    
    //Affichage
    
                
                @$recherche = $_GET["recher"];
    
                if(isset($recherche) && !empty($mot)){
                    if($mot === est dans la bdd){ //c'est là où je bloque
                        foreach($animaux as $id => $anim){?>
                        <a href="animal.php?id=<?php echo $id?>"><?php echo $id.' '.$mot ?>
                        <?php
                        }
                    }
                    else{
                        echo "Cet animal n'existe pas dans notre base de données";
                    }
                }
                else{
        echo 'Merci de renseigner le champs de recherche d\'animal.';
                }
    
                $result->free();
                $mysqli->close();
            ?>
        </body>
    </html>

    Ca fait un peu plus de 2 jours que je bloque dessus, j'ai eu beau essayer de m'aider de la documentation et de google... Je crois vraiment que je bloque. Et sûrement sur quelque chose de bête en plus !

    Merci pour votre aide ! 

    • Partager sur Facebook
    • Partager sur Twitter
      28 janvier 2023 à 13:23:55

      Bonjour,

      Si tu nous disais quelle erreur cela génère, ca serait plus simple!!

      A toi

      • Partager sur Facebook
      • Partager sur Twitter
        29 janvier 2023 à 5:39:39

        Hello tu peux utiliser la fonction 'mysqli_num_rows' pour savoir si tu as au moins 1 ligne retournée dans ta requête.

        avec une condition tu peux afficher ou non ton résultat.  

        @$mot = $_GET['user_search'];
            $mysqli = new mysqli('localhost', 'root', '', 'test');
            //Affichage
            @$recherche = $_GET["recher"];
        
            if(isset($recherche) && !empty($mot)){
                //requete
                $result = $mysqli->query("SELECT animal_id, animal_nom FROM animal WHERE animal_nom = '".$mot."'");
                /*
                    C'est ici que tu regarde si tu as bien des resultats dans ta requête : 
                    le nombre de lignes retournées sont elles supérieures à 0 ? 
                */
                if( mysqli_num_rows($result) > 0){
                    //tranformation en array avec fetch array
                    while ($row = $result->fetch_array()){
                        //Création du nouvel array pour l'affichage
                        $animaux[$row['animal_id']] = $row['animal_id'];
                    }
                    foreach($animaux as $id => $anim){?>
                        <a href="animal.php?id=<?php echo $id?>"><?php echo $id.' '.$mot ?>
                    <?php }
                    $result->free();
                }
                else{
                    echo "Cet animal n'existe pas dans notre base de données";
                }
            }
            else{
                echo 'Merci de renseigner le champs de recherche d\'animal.';
            }
            $mysqli->close();


         

        • Partager sur Facebook
        • Partager sur Twitter

        la connaissance s'acquiert par l'expérience, le reste n'est qu'information.

          29 janvier 2023 à 9:49:14

          Hello,

          Avant même de donner une réponse il serait pas mal d'indiquer les problèmes dans le code comme :

          • Avoir le code dans le html plutôt que haut dessus.
          • Utilisation abusive des "@" pour masquer les warnings et qui entraine des erreurs
          • La non préparation de la requête
          • L'utilisation de isset alors qu'il y a déjà empty dans la condition

          Je ne comprends déjà pas que l'auteur puisse écrire du code comme ça mais que un intervenant qui veut sois disant aider utilise son code comme exemple est encore plus horrible. Surtout pour indiquer comme solution de faire un "mysqli_num_rows" alors qu'en vrai l'auteur à mis dans un tableau et il suffit de faire un count/empty dessus pour avoir la réponse.

          Maintenant pour le code, ce que tu voudrais c'est que si tu n'a pas de données en base par rapport à ta recherche, que tu affiche un message à l'utilisateur. Car en soit corriger pour ne pas avoir d'erreur c'est simple mais si tu veux garder ton message indiquant qu'il n'y a pas de données oui faut réfléchir 2s de plus.

          Bon maintenant je n'aime pas faire ça mais voici le code complet (qui n'est pas forcément fonctionnel car je n'utilise pas mysqli et encore moins mysql comme base de données donc je ne peux pas tester)

          <?php
          
          mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
          
          $db = new mysqli('localhost', 'root', '', 'test_php');
          
          $search = $_GET['search'] ?? null; // Si la clé 'search' existe dans $_GET, on la récupère, sinon on met null
          // Pas besoin de check si le bouton a été cliqué, car si le bouton n'a pas été cliqué, $_GET['search'] n'existe pas
          
          $animals = [];
          if (!empty($search)) {
              $query = $db->prepare('SELECT animal_id, animal_name FROM animals WHERE animal_name LIKE ?');
              $query->bind_param('s', $search);
              $query->execute();
          
              foreach ($query->get_result() as $animal) {
                  $animals[] = [
                      'id' => $animal['animal_id'],
                      'name' => $animal['animal_name'],
                  ];
              }
              
              $query->close();
          }
          
          ?>
          <!DOCTYPE html>
          <html lang="fr">
          <head>
              <meta charset="UTF-8">
              <meta name="viewport"
                    content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
              <meta http-equiv="X-UA-Compatible" content="ie=edge">
              <title>Accueil - NomDuSite</title>
          </head>
          <body>
          
          <div class="container">
              <h1>Bienvenue sur le site</h1>
              <p>Utiliser notre formulaire de recherche ...</p>
              <p>Bonne visite !</p>
              <form action="" method="get">
                  <input type="text" name="search" placeholder="Votre animal" aria-label="Rechercher un animal">
                  <button type="submit">Rechercher</button>
              </form>
              <!-- On affiche le résultat de la recherche que si on en a une -->
              <?php if (!empty($search)): ?>
                  <h2>Résultat de la recherche pour "<?= $search ?>"</h2>
                  <?php if (empty($animals)): ?>
                      <p>Aucun résultat pour "<?= $search ?>"</p>
                  <?php else: ?>
                      <ul>
                          <?php foreach ($animals as $animal): ?>
                              <li><?= $animal['name'] ?></li>
                          <?php endforeach; ?>
                      </ul>
                  <?php endif; ?>
              <?php endif; ?>
          </div>
          
          </body>
          </html>
          



          -
          Edité par quenti77 29 janvier 2023 à 9:50:26

          • Partager sur Facebook
          • Partager sur Twitter

          Vérification d'une variable dans une base de donné

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown