Page 1 sur 1

Problème d'affichage suite à une sélection.

Posté : 30 nov. 2016, 13:03
par Aralis-G
Bonjour,

Actuellement en train de m'essayer au dvpt, j'essaye de m'amuser en reliant 2 tables avec une recherche de données.

Le topo: 1 table "etudiant" dans laquelle j'ai une colonne "num_pays" et 1 table "pays" où l'on retrouve cette colonne "num_pays"

Avec Bootstrap, un peu de php et de html, j'obtiens une liste complète des étudiants et une barre déroulante en haut avec les différents pays possible. Se pose la question de comment récupérer l'info "$rows[num_pays]" pour la faire correspondre dans ma requête avec le num_pays de la table Etudiant.

Si une bonne âme pouvait m'aider je lui en serais éternellement reconnaissant ^^
Merci d'avance.

le code en question:

Code : Tout sélectionner

<?php //si liste déroulante renseigné SI SEULEMENT CA POUVAIT MARCHER!! if($rows !== ''){ //Accès à la BDD include 'database.php'; ?> <html> <Head> <title>Liste des étudiants</title> <script src="js/jquery.js"></script> <script src="bootstrap/js/bootstrap.js"></script> <link rel="stylesheet" href="bootstrap/css/bootstrap.css"> </Head> <body> <!-- formulaire de recherche --> <form class="panel-group form-horizontal" action="home.php" method="GET" role="form"> <div class="panel panel-default"> <div class="panel-body"> <div class="panel-header"> <h4>Recherche</h4> </div> <div class="col-sm-3"> <!-- liste déroulante affichant les pays --> <select class="form-control" id="select" name="pays"> <option value="">sélectionner un pays</option> <?php $sel_pays = "SELECT * FROM pays"; $run_pays = mysqli_query($conn,$sel_pays); while ($rows= mysqli_fetch_assoc($run_pays)){ echo '<option value="'.$rows['num_pays'].'">'.$rows['name_pays'].'</option>'; } ?> </select> <button type="submit" class="btn btn-default" id="searchbtn" name="submit">Go</button> </div> </div> </div> </form> <?php //requête SQL pour sortir toutes les lignes de la table selectionné. LA MON WHERE EST SUREMENT TRES FAUX ^^ $sql = "SELECT * FROM etudiant WHERE pays = $rows "; $run_sql = mysqli_query($conn, $sql); while ($rows = mysqli_fetch_assoc($run_sql)){ echo '<div class="container"> <table class="table table-hover"> <tr> <td><h2><a class="btn btn-info" href="detail.php?vo_id='.$rows['num_etu'].'">'.$rows ['nom_etu'].'</a></h2></td> </tr> <tr> <td>'.$rows ['pren_etu'].'</td> </tr> <tr> <td>'.$rows ['age'].'</td> </tr> <tr> <td>'.$rows ['pays'].'</td> </tr> </table> </div> <br>'; }?> </body> </html> <?php } ?>

Re: Problème d'affichage suite à une sélection.

Posté : 30 nov. 2016, 13:31
par kevin254kl
Salut, tu dois utiliser de l'ajax, l'utilisateur fait un choix que tu captes avec un onchange sur ta liste, tu récupères ton paramètre et l’envoi à un script php chargé de récupérer tes données.

Re: Problème d'affichage suite à une sélection.

Posté : 30 nov. 2016, 15:05
par Aralis
Ok, merci pour votre réponse. Donc si je comprends ce que j'ai "zieuter" sur Ajax, c'est une histoire de "function" à gérer? avec le paramètre onchange?

Mes requetes doivent être faite dans ces functions n'est-ce pas?

Re: Problème d'affichage suite à une sélection.

Posté : 30 nov. 2016, 21:44
par Aralis
Alors, j'ai fait quelques essais et revu mon code suite à ma recherche Ajax. Je sélectionne mon paramètre dans ma liste déroulante qui doit envoyer l'info à mon tableau que j'appelle avec une autre page php.
Mais je n'arrive pas à récupérer mon paramètre principal dans mon code Ajax (en l'occurence c'est .$rows['num_pays']., j'imagine que la façon de l'écrire doit jouer) .

Je vous montre mon code:

Code : Tout sélectionner

<?php //Accès à la BDD include 'database.php'; require 'tableau_etudiant.php'; ?> <html> <Head> <title>Liste des étudiants</title> <script src="js/jquery.js"></script> <script src="js/search.js"></script> <!-- le JS que j'ai crée pour l'occasion --> <script src="bootstrap/js/bootstrap.js"></script> <link rel="stylesheet" href="bootstrap/css/bootstrap.css"> </Head> <body> <!-- formulaire de recherche --> <form class="panel-group form-horizontal" action="home.php" role="form"> <div class="panel panel-default"> <div class="panel-body"> <div class="panel-header"> <h4>Recherche</h4> </div> <div class="col-sm-3"> <!-- liste déroulante affichant les pays --> <select class="form-control" id="select" name="pays" onChange="request(this);"> <option value="rien">Sélectionner un pays</option> <?php $sel_pays = "SELECT * FROM pays"; $run_pays = mysqli_query($conn,$sel_pays); while ($rows= mysqli_fetch_assoc($run_pays)){ echo '<option value='.$rows['num_pays'].'>'.$rows['name_pays'].'</option>'; } ?> </select> <br/> <br/> <button type="submit" class="btn btn-default" id="searchbtn" name="submit">Go</button> </div> </div> </div> </form> <!-- AFFICHE LE TABLEAU DES DONNEES ISSUS DE LA LISTE --> <div id="classe_selectionnee"> <?php require("../includes/tableau_etudiant.php"); ?> </div> </body> </html>
le java que j'ai tenté d'apprivoiser tant que faire se peut ^^ :

Code : Tout sélectionner

function selectChoice() { var container = $('#classe_selectionnee'); var selector = $('#choix'); var url = '../pages/tableau_etudiant.php'; selector.change(function() { var value = $(this).val(); arraySelect = new Array; $("select option:selected").each(function() { arraySelect.push(this.value); }); $.ajax({ url : url, type : 'post', data : {'choix[]' : arraySelect}, success : function(data){container.html(data);} }); }); }
Et le tableau_etudiant :

Code : Tout sélectionner

<?php extract($_POST); //requête SQL pour sortir toutes les lignes de la table selectionné. $sql = "SELECT * FROM etudiant INNERJOIN pays ON etudiant WHERE etudiant.pays = '".$choix."' order by nom asc"; $run_sql = mysqli_query($conn, $sql); while ($rows = mysqli_fetch_assoc($run_sql)){ echo '<div class="container"> <table class="table table-hover"> <tr> <td><h2><a class="btn btn-info" href="detail.php?vo_id='.$rows['nom_etu'].'">'.$rows ['nom_etu'].'</a></h2></td> </tr> <tr> <td>'.$rows ['pren_etu'].'</td> </tr> <tr> <td>'.$rows ['age'].'</td> </tr> <tr> <td>'.$rows ['pays'].'</td> </tr> </table> </div> <br>'; }?>
Si vous pouviez m'aiguiller sur ce qui pose problème, j'avoue arriver à une page bourré d'erreur et je ne sais plus trop par où prendre la chose ^^

Re: Problème d'affichage suite à une sélection.

Posté : 01 déc. 2016, 18:06
par Aralis
Bonjour,

juste pour vous signaler que j'avais finalement fait marche arrière, ayant du mal avec AJAX (bien que pleins de possibilités, je n'ai pas compris comment le maitriser. Aussi, en revenant sous PHP, la réponse m'est venue assez simplement du coup, je donne mon code ici au cas quelqu'un a le même problème que moi.

Code : Tout sélectionner

<?php //Accès à la BDD include 'database.php'; ?> <html> <Head> <title>Liste des étudiants</title> <script src="js/jquery.js"></script> <script src="bootstrap/js/bootstrap.js"></script> <link rel="stylesheet" href="bootstrap/css/bootstrap.css"> </Head> <body> <!-- formulaire de recherche --> <form class="panel-group form-horizontal" action="home.php" method="GET" role="form"> <div class="panel panel-default"> <div class="panel-body"> <div class="panel-header"> <h4>Recherche</h4> </div> <div class="col-sm-3"> <!-- liste déroulante affichant les pays --> <select class="form-control" id="select" name="pays"> <option value="">sélectionner un pays</option> <?php $sel_pays = "SELECT * FROM pays"; $run_pays = mysqli_query($conn,$sel_pays); while ($rows= mysqli_fetch_assoc($run_pays)){ echo '<option value="'.$rows['num_pays'].'">'.$rows['name_pays'].'</option>'; } ?> </select> <button type="submit" class="btn btn-default" id="searchbtn" name="submit">Go</button> </div> </div> </div> </form> <?php if(isset($_GET["pays"])!='0') { $sql = "SELECT * FROM etudiant WHERE pays =".$_GET['pays']." ORDER by etudiant_id"; $run_sql = mysqli_query($conn, $sql); while ($rows = mysqli_fetch_assoc($run_sql)){ echo '<div class="container"> <table class="table table-hover"> <tr> <td><h2><a class="btn btn-info" href="detail.php?vo_id='.$rows['etudiant_id'].'">'.$rows ['nom'].'</a></h2></td> </tr> <tr> <td>'.$rows ['prenom'].'</td> </tr> <tr> <td>'.$rows ['age'].'</td> </tr> <tr> <td>'.$rows ['pays'].'</td> </tr> </table> </div> <br>'; }} else{ //requête SQL pour sortir toutes les lignes de la table selectionné. $sql = "SELECT * FROM etudiant "; $run_sql = mysqli_query($conn, $sql); while ($rows = mysqli_fetch_assoc($run_sql)){ echo '<div class="container"> <table class="table table-hover"> <tr> <td><h2><a class="btn btn-info" href="detail.php?vo_id='.$rows['num_etu'].'">'.$rows ['nom_etu'].'</a></h2></td> </tr> <tr> <td>'.$rows ['pren_etu'].'</td> </tr> <tr> <td>'.$rows ['age'].'</td> </tr> <tr> <td>'.$rows ['pays'].'</td> </tr> </table> </div> <br>'; }}?> </body> </html>

Re: Problème d'affichage suite à une sélection.

Posté : 07 déc. 2016, 03:53
par kevin254kl
Salut, désolé de ne pas t'avoir répondu avant, il y a des problème dans ton code :
Lorsque tu valides le formulaire cela va envoyer ton paramètre pay et recharger la page.
Tu te rend compte que tu recharges ta page a chaque fois? ici c'est une page assez simple avec peux de contenu mais imagine une page avec beaucoup de données!
le principe de l'ajax est le suivant, tu envois ton paramètre mais tout le code n'ai pas rechargé, est rechargé seulement la différence donc notamment la partie ou tu récupère ta liste après avoir reçu le paramètre get.
Il faut savoir aujourd'hui que pratiquement tout les sites dynamique utilise de l'ajax c'est très important du point de vue temps d’exécutions et de la data qui circule sur ton réseau.

exemple en jquery tu m'est un event onclick en jquery sur ton bouton puis à l'intérieur tu fais ta requête ajax

Code : Tout sélectionner

$.ajax({ method: "POST", url: "some.php", // ton script php data: { name: "John" } // tes parametres })
ton script php

Code : Tout sélectionner

if(!empty($_POST['name'])) { // ici tu fais ta requete sur ton parametre récupéré }
pour renvoyer des données en php vers jquery tu peux utiliser du json regarde ici http://labs.jonsuh.com/jquery-ajax-php-json/
il faut vraiment tu essayes après on pourra t'aider.