Optimisation de reqête mysqli en PDO
Résolu/Fermé
Alcantara75
Messages postés
16
Date d'inscription
mercredi 11 décembre 2019
Statut
Membre
Dernière intervention
17 décembre 2019
-
17 déc. 2019 à 12:58
Jules_2569 Messages postés 52 Date d'inscription vendredi 13 décembre 2019 Statut Membre Dernière intervention 28 juillet 2020 - 27 déc. 2019 à 15:28
Jules_2569 Messages postés 52 Date d'inscription vendredi 13 décembre 2019 Statut Membre Dernière intervention 28 juillet 2020 - 27 déc. 2019 à 15:28
A voir également:
- Optimisation de reqête mysqli en PDO
- Optimisation pc - Guide
- Optimisation découpe panneau gratuit - Télécharger - Outils professionnels
- Optimisation windows 10 - Guide
- Glary Utilities : l'outil référence pour entretenir un PC - Télécharger - Nettoyage
- TweakPower : un outil complet pour optimiser Windows - Télécharger - Nettoyage
7 réponses
jordane45
Messages postés
38112
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
29 mars 2024
4 635
17 déc. 2019 à 17:28
17 déc. 2019 à 17:28
Il faut s'inspirer du code de tes autres pages.... pas les copier/coller bêtement...
La requête de ton fichier initiale n'est pas celle que tu as cherché à utilisé.
De plus, le fichier doit certainement être utilisé dans un ajax puisque tu faisais un json_encode du résultat...
Là.. tu as remis du html dedans...
Toi.. tu dois juste remplacer le code
par :
La requête de ton fichier initiale n'est pas celle que tu as cherché à utilisé.
De plus, le fichier doit certainement être utilisé dans un ajax puisque tu faisais un json_encode du résultat...
Là.. tu as remis du html dedans...
Toi.. tu dois juste remplacer le code
if(isset($_POST['search'])){ $search = $_POST['search']; $query = "SELECT * FROM clients WHERE prenom like'%".$search."%'"; $result = mysqli_query($mysqli,$query); while($row = mysqli_fetch_array($result) ){ $response[] = array("value"=>$row['id_clients'],"label"=>$row['prenom']); } echo json_encode($response); }
par :
//on inclus le fichier de connexion à la bdd dont le nom est ???? require_once "../inc/connexion.php"; //connexion à la bdd $bdd = getDB(); if(isset($_POST['search'])){ $search = $_POST['search' $query = "SELECT * FROM clients WHERE prenom like'%".$search."%'"; try{ $requete = $bdd -> prepare($sql) ; $requete->execute() ; $response= $requete->fetchAll(); // on stocke le resultat dans un array }catch(Exception $e){ // en cas d'erreur : $response = " Erreur ! ".$e->getMessage(); } echo json_encode($response); exit; }
jordane45
Messages postés
38112
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
29 mars 2024
4 635
17 déc. 2019 à 13:22
17 déc. 2019 à 13:22
Bonjour
Et quel est le souci exactement ?
Il suffit de faire comme tes autres pages..
https://forums.commentcamarche.net/forum/affich-36358957-php-mysql-probleme-pour-avoir-un-affichage-avec-un-tri-decroissant-dans-un-tab
.
Et quel est le souci exactement ?
Il suffit de faire comme tes autres pages..
https://forums.commentcamarche.net/forum/affich-36358957-php-mysql-probleme-pour-avoir-un-affichage-avec-un-tri-decroissant-dans-un-tab
.
Alcantara75
Messages postés
16
Date d'inscription
mercredi 11 décembre 2019
Statut
Membre
Dernière intervention
17 décembre 2019
17 déc. 2019 à 15:51
17 déc. 2019 à 15:51
Le souci c'est que pour cette fonctionnalités, j'ai besoin de l'autocomplétion. J'ai une fenêtre modal avec un seul champ input correspondant au nom, dans ce champ input je tape les premières lettres et il me sort les noms correspondant aux premières lettres. En cliquant sur le nom ça me sélectionne son id dans un champs caché.. L'autre fonction de recherche quand je tape un nom ça m'affiche tout les noms correspondant sous forme de tableau, je n'ai pas l'autocompletion pour choisir le nom que je veux.
Alcantara75
Messages postés
16
Date d'inscription
mercredi 11 décembre 2019
Statut
Membre
Dernière intervention
17 décembre 2019
Modifié le 17 déc. 2019 à 15:05
Modifié le 17 déc. 2019 à 15:05
Le problème que je rencontre, c'est que pour cette fonctionnalités, j'ai adapté le code de l'autre jour, je l'ai modifié comme je n'ai pas besoin d'afficher un tableau. j'ai juste besoin d'une valeur qui s'affiche dans un input (la fonction qui recherche et m'affiche le résultat fonctionne). en retirant l'affichage du tableau (le SELECT *) je me retrouve avec cette erreur :
La page clients PHP
NULL Erreur ! SQLSTATE[42000]: Syntax error or access violation: 1065 Query was empty Donées non trouvées
La page clients PHP
<?php //on inclus le fichier de connexion à la bdd dont le nom est ???? require_once "../inc/connexion.php"; //connexion à la bdd $bdd = getDB(); // on récupère PROPREMENT les variables AVANT de les utiliser $query = !empty($_POST["query"]) ? $_POST["query"]: NULL; var_dump($query); //on prépare la requête SQL $sql = " "; //début du traitement : if($query){ $search = $query; // var_dump($search); //si il y a une recherche on ajoute le WHERE à la requete : $sql .= " SELECT * FROM clients LEFT JOIN utilisateurs ON (clients.user_id=utilisateurs.id_user) WHERE ".$_SESSION['id_user']." =user_id AND ( lastname LIKE '%".$search."%' OR id_clients LIKE '%".$search."%' ) ORDER BY id_clients DESC "; // var_dump($sql); } try{ $requete = $bdd -> prepare($sql) ; $requete->execute() ; $result = $requete->fetchAll(); // on stocke le resultat dans un array }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); } ?> <html> <head> <meta charset="utf-8"> </head> <body> <?php $output = ''; if(!empty($result)) { $output .= '</br> <div class="box-body table-responsive no-padding" id="tableData"> <table class="table table-striped "> <thead> <tr> <th>ID</th> </tr> </thead> <tbody>'; foreach($result as $row){ $output .= ' <tr> <td width="5%"> <input type="text" class="control-form" name="id_clients" value="'.$row["id_clients"].'" ></td> <td width="5%"> <input type="text" class="control-form" name="id_clients" value="'.$row["lastname"].'" ></td> </tr> '; } echo '</tbody> </table></div>'; } else { echo 'Données non trouvées'; } echo $output; ?> </body> </html>
Jules_2569
Messages postés
52
Date d'inscription
vendredi 13 décembre 2019
Statut
Membre
Dernière intervention
28 juillet 2020
Modifié le 17 déc. 2019 à 20:05
Modifié le 17 déc. 2019 à 20:05
Je sais pas ce que je fais car je n'ai aucune erreur qui s'affiche.
j'ai juste une fenêtre modal, quand ça ne fonctionne, il n'y a aucune erreur.
Voici l'Ajax
La fenêtre modal
j'ai juste une fenêtre modal, quand ça ne fonctionne, il n'y a aucune erreur.
Voici l'Ajax
<script > $( function() { $( "#autocomplete" ).autocomplete({ source: function( request, response ) { $.ajax({ url: "fetch/Clients.php", type: 'post', dataType: "json", data: { search: request.term }, success: function( data ) { response( data ); } }); }, select: function (event, ui) { $('#autocomplete').val(ui.item.label); // display the selected text $('#selectuser_id').val(ui.item.value); // save selected id to input return false; } }); }); function split( val ) { return val.split( /,\s*/ ); } function extractLast( term ) { return split( term ).pop(); } </script>
La fenêtre modal
<div class="modal fade" id="updateClients" > <form action="../process/updateClients.php" method="GET"> <div class="modal-dialog" role="document" > <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span> </button> <h4 ></h4> </div> <div class="modal-body"> <div class="form-group"> <label>Nom:</label> <input type="text" class="form-control" id='autocomplete' name="prenom" value=""> <input type="hidden" class="form-control" id="selectuser_id" name="id_clients" value=""> </div> </div> <div class="modal-footer"> <div align="left"> <button type="submit" class="btn btn-space btn-primary">Valider</button> </form> </div>
jordane45
Messages postés
38112
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
29 mars 2024
4 635
Modifié le 20 déc. 2019 à 13:56
Modifié le 20 déc. 2019 à 13:56
Bonjour,
Là... tu fais de l'ajax.
C'est à dire que tu fais appel à des scripts php depuis du JAVASCRIPT.
Il te faut donc regarder dans la console de ton navigateur les éventuels messages qui pourraient s'afficher au niveau du javascript.
NB: Pour débuguer de l'ajax, je te recommande vivement d'utiliser le navigateur FireFox ( bien plus facile à utiliser pour ça )
NB² : Dans ton code ajax, pour l'instant tu n'as pas géré les éventuelles erreurs.
Modifie donc comme ceci :
edit: alert et non almert (erreur de copier/coller )
Là... tu fais de l'ajax.
C'est à dire que tu fais appel à des scripts php depuis du JAVASCRIPT.
Il te faut donc regarder dans la console de ton navigateur les éventuels messages qui pourraient s'afficher au niveau du javascript.
NB: Pour débuguer de l'ajax, je te recommande vivement d'utiliser le navigateur FireFox ( bien plus facile à utiliser pour ça )
NB² : Dans ton code ajax, pour l'instant tu n'as pas géré les éventuelles erreurs.
Modifie donc comme ceci :
$.ajax({ url: "fetch/Clients.php", type: 'post', dataType: "json", data: { search: request.term }, success: function( data ) { console.log("Resultat Ajax",data); response( data ); }, error:function(xhr){ console.log("Erreur AJAX",xhr); alert("Erreur AJax, regarder la console pour plus de détails !"); } });
edit: alert et non almert (erreur de copier/coller )
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Jules_2569
Messages postés
52
Date d'inscription
vendredi 13 décembre 2019
Statut
Membre
Dernière intervention
28 juillet 2020
Modifié le 26 déc. 2019 à 15:15
Modifié le 26 déc. 2019 à 15:15
Bonjour,
Quand je regarde dans la console, dans la partie "POST" j'ai les premières lettres que je tape au niveau du champs de recherche.
Dans la partie "Réponse" j'ai le tableau ci-dessous, c'est toutes les informations concernant le client quand je tape les premières lettres de son nom. J'ai pas mis le tableau en entier.
Il y a des fichiers jQuery qui vont avec aussi.
Actuellement la config est comme ci-dessous:
Le modal
clients.php
autocomplete.php
sur cette ligne:
On ne peut pas stocker juste les valeurs que j'ai besoin, on dirait qu'il récupère tout, il n'y a pas de filtre
Quand je regarde dans la console, dans la partie "POST" j'ai les premières lettres que je tape au niveau du champs de recherche.
Dans la partie "Réponse" j'ai le tableau ci-dessous, c'est toutes les informations concernant le client quand je tape les premières lettres de son nom. J'ai pas mis le tableau en entier.
Il y a des fichiers jQuery qui vont avec aussi.
[{"id_clients":"266","0":"266","showin":"","1":"","firstname":"******","2":"V*******","lastname":"Pi***","3":"Picha","address":"Adresse","4":"Adresse","zipcode":"00000","5":"00000","city":"VILLE","6":"VILLE"}]
Actuellement la config est comme ci-dessous:
Le modal
<div class="modal-dialog" role="document" > <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span> </button> <h4 class="modal-title" id="myModalLabel">Nom </h4> </div> <div class="modal-body"> <div class="form-group"> <label>Nom:</label> <input type="text" class="form-control" id='autocomplete' name="nom" value=""><br> <input type="hidden" class="form-control" id="selectuser_id" name="id_clients" value=""> </div> </div> <div class="modal-footer"> <div align="left"> <button type="submit" class="btn btn-space btn-primary">Valider</button> </form> </div> </div> </div> </div>
clients.php
require "../../inc/connexion.php"; //connexion à la bdd $bdd = getDB(); if(isset($_POST['search'])){ $search = $_POST['search']; $query = "SELECT * FROM clients WHERE nom like '%".$search."%' " ; try{ $requete = $bdd -> prepare($query) ; $requete->execute() ; //var_dump($requete); $response= $requete->fetchAll(); // on stocke le resultat dans un array }catch(Exception $e){ // en cas d'erreur : $response = " Erreur ! ".$e->getMessage(); } echo json_encode($response); // var_dump($response); exit; }
autocomplete.php
<script > $( function() { $( "#autocomplete" ).autocomplete({ source: function( request, response ) { $.ajax({ url: "fetch/Clients.php", type: 'post', dataType: "json", data: { search: request.term }, success: function( data ) { response( data ); }, error:function(xhr){ console.log("Erreur AJAX",xhr); alert("Erreur AJax, regarder la console pour plus de détails !"); } }); }, select: function (event, ui) { $('#autocomplete').val(ui.item.label); // display the selected text $('#selectuser_id').val(ui.item.value); // save selected id to input return false; } }); }); function split( val ) { return val.split( /,\s*/ ); } function extractLast( term ) { return split( term ).pop(); } </script>
sur cette ligne:
$response= $requete->fetchAll(); // on stocke le resultat dans un array
On ne peut pas stocker juste les valeurs que j'ai besoin, on dirait qu'il récupère tout, il n'y a pas de filtre
jordane45
Messages postés
38112
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
29 mars 2024
4 635
26 déc. 2019 à 21:08
26 déc. 2019 à 21:08
il te retourne ce que tu ta requête donnes ...
As tu testé la même requête en base de données directement pour voir ce que ça te donnait comme résultat ?
As tu testé la même requête en base de données directement pour voir ce que ça te donnait comme résultat ?
Jules_2569
Messages postés
52
Date d'inscription
vendredi 13 décembre 2019
Statut
Membre
Dernière intervention
28 juillet 2020
27 déc. 2019 à 14:05
27 déc. 2019 à 14:05
J'ai trouver la solution, j'ai ajouter cette ligne, ça fonctionne correctement.
Merci en tout cas.
en dessous de celle-ci :
Merci en tout cas.
foreach($response as $row){ $response[] = array("value"=>$row['id_clients'],"label"=>$row['nom']); }
en dessous de celle-ci :
$response= $requete->fetchAll(); // on stocke le resultat dans un array
jordane45
Messages postés
38112
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
29 mars 2024
4 635
27 déc. 2019 à 14:29
27 déc. 2019 à 14:29
Y'a plus simple je pense..
Dans ta requête..
Remplce
par
et avec ça.. plus besoin de faire une boucle en php pour reconstruire le format de sorti attendu.
Dans ta requête..
Remplce
$query = "SELECT * FROM clients WHERE prenom like'%".$search."%'";
par
$query = "SELECT id_clients as value, nom as label FROM clients WHERE prenom like'%".$search."%'";
et avec ça.. plus besoin de faire une boucle en php pour reconstruire le format de sorti attendu.
jordane45
Messages postés
38112
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
29 mars 2024
4 635
>
jordane45
Messages postés
38112
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
29 mars 2024
27 déc. 2019 à 14:30
27 déc. 2019 à 14:30
et n'oublie pas de mettre le sujet en résolu :
https://www.commentcamarche.net/infos/25917-marquer-un-fil-de-discussion-comme-etant-resolu/
https://www.commentcamarche.net/infos/25917-marquer-un-fil-de-discussion-comme-etant-resolu/
Jules_2569
Messages postés
52
Date d'inscription
vendredi 13 décembre 2019
Statut
Membre
Dernière intervention
28 juillet 2020
27 déc. 2019 à 15:28
27 déc. 2019 à 15:28
J'ai essayé, c'est bon.
Merci
Merci