Partage
  • Partager sur Facebook
  • Partager sur Twitter

Function retourne rien

PHP 7.4

    10 juin 2021 à 18:08:10

    Bonjour,

    j'ai un problème avec une fonction que j'ai crée et je comprends pas pourquoi (deux jours la dessus) 🙈

    Je n'arrive pas a afficher mes département dans une liste de station (clients),

    J'ai créé une jointure que j'ai testé dans PHP MY SQL (elle fais le boulot), donc je pense qu'il s'agit de ma fonction qui est bancale ou une boucle Foreach manquant dans la page post.php.

    La structure est la suivante :

    Une page post.php (publie la liste des stations avec un champ titre et régions (qui ne s'affiche pas puisqu'il n'y a pas de contenu récupéré), une icône pour modifier la station et un autre pour la supprimer.

    Un fichier admin.php (avec toutes mes fonctions, création de station, modification de station, affichage liste des stations, etc...

    Une base de données avec les deux tables dans laquelle je récupère la colonne TITRE (nom de la station) dans la table AP_STATION et une autre AP-REGION dans laquelle je récupère le nom de la région dans la colonne TITRE (aussi) ces deux tables sont jointes via ma requête préparée dans mon fichier admin.php avec ma fonction REGIONS.

    J'ai testé avec var_dump la fonction réponse array

    Enfin bref je n'y comprends plus rien.

    Merci de votre aide.

    LA FONCTION :

    <?php
    function regions() {
        global $bdd;
    	
    	$id_region = (int)$_GET["id_region"];
        
       $regions = $bdd->prepare("SELECT ap_station.titre, ap_station.id_region, ap_region.titre FROM ap_station INNER JOIN ap_region ON ap_station.id_region = ap_region.id");
    	
        $regions->execute([$id_region]);
        $regions = $regions->fetchAll();
    
        return $regions;
    }
    
    ?>




    LA PAGE LISTE DES STATIONS (ou doit apparaitre le nom de la région à droite du nom de la station ) :

    <?php
    require_once "../fonctions/bdd.php";
    include_once "../fonctions/admin.php";
    $bdd = bdd();
    $posts = posts();
    $regions = regions([$_GET["id"]]);
    
    
    
    /*if ( in_array( 'Nord-Pas-de-Calais', $regions)) {
      echo 'trouvé';
    }
    else {
      echo 'pas trouvé';
    }*/
    
    ?>
    <!DOCTYPE html>
    <html lang="fr">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>Liste des stations</title>
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
        <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Nunito:400,300,700">
        <link rel="stylesheet" href="../main.css">
    </head>
    <body>
        <header>
            <div class="container">
                <div class="row">
                    <div class="col-sm-3">
                        <a href="index.php">ap</a>
                    </div>
                    <div class="col-sm-9">
                        <nav>
                            <ul>
                                <li><a href="index.php">Ajouter une station</a></li>
                                <li><a href="posts.php">Liste des stations</a></li>
                            </ul>
                        </nav>
                    </div>
                </div>
            </div>
        </header>
        <div class="container">
            <div class="row">
                <div class="col-xs-12">
                    <h1>Liste des stations</h1>
                </div>
            </div>
            <div class="row">
                <div class="col-xs-12">
                    <table>
                        <?php
                        foreach($posts as $post) :
                        ?>
                        <tr>
                            <td><?= $post["titre"] ?></td>
    						<td><?= $regions["titre"] ?></td>
                            <td><a href="modifier.php?id=<?= $post["id"] ?>"  class="glyphicon glyphicon-pencil"></a></td>
                            <td><a href="supprimer.php?id=<?= $post["id"] ?>" class="glyphicon glyphicon-remove"></a></td>
                        </tr>
                        <?php
                        endforeach;
                        ?>
                    </table>
                </div>
            </div>
            <footer>
                <div class="row">
                    <div class="col-xs-12">
                        <a href="contact.php">Contact</a> - <a href="mentions.php">Mentions légales</a> - <a href="">Facebook</a>
                    </div>
                </div>
            </footer>
        </div>
    </body>
    </html>



    • Partager sur Facebook
    • Partager sur Twitter
      10 juin 2021 à 18:19:30

      Bonjour,

      Sauf incompréhension, ta requête ligne 7 n'a ni marqueur ou paramètre ni clause where donc je ne vois pas trop ce que tu exécutes.

      As tu aussi vérifié que ta variable en ligne 5 est bien valorisée ?

      A+

      • Partager sur Facebook
      • Partager sur Twitter
        10 juin 2021 à 18:32:00

        La requete réalise un select dans les deux tables ( une avec la liste des stations et un ID_Region qui me sert à la synchro avec la table AP_REGION via la colonne ID.

        Je ne comprends le terme valorisé ?

        J'ai une autre piste peut-être, je m'explique :

        J'ai une fonction POSTS pour afficher la liste des stations (sur la même page post.php) je me demande s'il ne serait pas plus simple de modifier cette requête pour faire la même chose ?

        Requête dans le fichier admin.php elle aussi.

        LA FONCTION en question :

        function posts() {
            global $bdd;
            
            $posts = $bdd->query("SELECT * FROM ap_station ORDER BY id DESC");
            $posts = $posts->fetchAll();
        	
            return $posts;
        
        }



        -
        Edité par webman59 10 juin 2021 à 18:35:35

        • Partager sur Facebook
        • Partager sur Twitter
          10 juin 2021 à 18:32:20

          Bonjour. 

          Dans le 1er code, tu envoies un get id en paramètre et la fonction région mais dans la fonction, tu n'as plus ce paramètre 

          • Partager sur Facebook
          • Partager sur Twitter
            10 juin 2021 à 18:39:05

            Valorisée .... valeur de la variable. Par exemple en faisant un dump($ma_variable);

            Donc que vaut dump($id_region);

            $regions = $bdd->prepare("SELECT ap_station.titre, ap_station.id_region, ap_region.titre FROM ap_station INNER JOIN ap_region ON ap_station.id_region = ap_region.id");

            Je ne vois ni clause where ni un marqueur qui pourrait ensuite être remplacé dans le execute.

            A+

            • Partager sur Facebook
            • Partager sur Twitter
              10 juin 2021 à 18:55:30

              Je te confirme le var_dump de $id_region retourne NULL

              Je ne vois pas la méthode pour intégrer un marqueur avec un INNER JOIN dans le SELECT (avec le WHERE c'est mort visiblement ) genre :( WHERE ap_station.id_region =? ) à la fin du code existant. Je pensais pas qu'il était si compliqué de faire une requête avec jointure. 🥵

              -
              Edité par webman59 10 juin 2021 à 19:00:31

              • Partager sur Facebook
              • Partager sur Twitter
                10 juin 2021 à 20:10:50

                Donc déjà si le dump de ta variable retourne null, elle ne sert à rien tant qu'elle n'est pas valorisée. Faut revoir en amont la transmission.

                Le where est indépendant du fait que ce soit une requête avec ou sans jointure. Le where c'est ce que l'on appelle une clause ... c'est à dire que tu cherches quelque chose suivant une condition.

                Je ne peux que te conseiller de regarder comment mettre une clause where et des marqueurs.

                Il y a des tas de tuto pour cela mais juste un lien.

                https://www.php.net/manual/fr/pdo.prepare.php

                A+

                • Partager sur Facebook
                • Partager sur Twitter
                  10 juin 2021 à 23:15:47

                  Je ne voi spas la méthode pour intégrer un marqueur avec un INNER JOIN dans le SELECT (avec le WHERE c'est mort)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    10 juin 2021 à 23:24:29

                    Aurélien.C a écrit:

                    Bonjour. 

                    Dans le 1er code, tu envoies un get id en paramètre et la fonction région mais dans la fonction, tu n'as plus ce paramètre 


                    tu mélanges des choses, ce n'est l'index 'id_region' mais 'id' pour le GET

                    de plus pour la clause WHERE, monkey3d t'a donné la solution

                    • Partager sur Facebook
                    • Partager sur Twitter
                      11 juin 2021 à 6:35:24

                      Pourquoi répéter qu'avec le where c'est mort ?

                      Non, c'est tout à fait possible de mettre un where et heureusement car sinon ta condition sur l'identifiant de région ne pourrait jamais être mise en oeuvre.

                      As tu traité le fait que ta variable est null et donc en l'état ne sert à rien ? Aurelien.C t'a indiqué l'erreur.

                      Pour ma part, je pense t'avoir donné les informations pour réussir ton développement et à part faire le code à ta place - ce que je me refuse car ce n'est ni ainsi que l'on se forme ni le but de ce forum - je ne vois plus grand chose à ajouter.

                      A+

                      -
                      Edité par monkey3d 11 juin 2021 à 7:09:31

                      • Partager sur Facebook
                      • Partager sur Twitter
                        12 juin 2021 à 11:33:43

                        Hello me voici de retour,

                        j'ai revu ma copie en suppriment ma fonction REGIONS inutile, j'ai juste modifié ma fonction POSTS en imbriquant un 2eme SELECT comme ci-dessous et ajouter à ma page POSTS.PHP le l'alias region en clés de mon tableau POSTS ;-)

                        Merci de votre aide, désolé pour le post en double 🙈, je n'ai pas encore terminer le projet j'ai encore plein de défit a relever hihihi.

                        function posts() {
                            global $bdd;
                            
                            $posts = $bdd->query("SELECT id, titre, id_region, (SELECT titre FROM ap_region WHERE ap_region.id = ap_station.id_region) AS region FROM ap_station ORDER BY id DESC");
                            $posts = $posts->fetchAll();
                            
                            return $posts;
                        }



                        • Partager sur Facebook
                        • Partager sur Twitter

                        Function retourne rien

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        • Editeur
                        • Markdown