PHP Mysql et Javascript : Affichage dans plusieurs input selon (autocomplétion)
Résolu
Jules_2569
Messages postés
52
Date d'inscription
Statut
Membre
Dernière intervention
-
Jules_2569 Messages postés 52 Date d'inscription Statut Membre Dernière intervention -
Jules_2569 Messages postés 52 Date d'inscription Statut Membre Dernière intervention -
Bonjour a tous,
J'ai une fenêtre modal ou j'entre le nom d'un article ou d'un service, quand je tape les premières lettres, l'autocomplétion me permet de sélectionner l'article parmi une liste et d'en afficher le prix, pour pouvoir l'insérer dans une autre table.
Maintenant je souhaiterais afficher une deuxième valeur en plus du prix, l'ID du produits ou service sélectionnée.
Pour afficher le prix, j'utilise le fichier items.php pour la requête SQL, le fichier autocomplete.php pour le javascript et la page du formulaire (modal) pour les champs input.
Sur le fichier items.php au niveau de la requête ligne 10 :
J'ai essayer en ajoutant id_items en le séparant d'une virgule (jai essayé plusieurs combinaisons) a côté de prix_ht :
dans ce cas la il va seulement afficher la valeur de prix_ht sur les 2 champs input même celui réservé a id_items.
J'ai aussi ajouté pour le champs input : id_items dans le fichier autocomplete.php en dessous de la ligne 21 la ligne ci dessous :
ça m'affiche systématiquement la même valeur sur les 2 champs input du formulaire.
quelqu'un saurait pourquoi ce qui fonctionne avec un champs ne fonctionne pas avec 2.
Merci d'avance
Fenêtre modal :
autocomplete.php :
items.php :
J'ai une fenêtre modal ou j'entre le nom d'un article ou d'un service, quand je tape les premières lettres, l'autocomplétion me permet de sélectionner l'article parmi une liste et d'en afficher le prix, pour pouvoir l'insérer dans une autre table.
Maintenant je souhaiterais afficher une deuxième valeur en plus du prix, l'ID du produits ou service sélectionnée.
Pour afficher le prix, j'utilise le fichier items.php pour la requête SQL, le fichier autocomplete.php pour le javascript et la page du formulaire (modal) pour les champs input.
Sur le fichier items.php au niveau de la requête ligne 10 :
$query = "SELECT prix_ht as value, item as label FROM items WHERE item like'%".$search."%'";
J'ai essayer en ajoutant id_items en le séparant d'une virgule (jai essayé plusieurs combinaisons) a côté de prix_ht :
$query = "SELECT id_items, prix_ht as value, item as label FROM items WHERE item like'%".$search."%'";
dans ce cas la il va seulement afficher la valeur de prix_ht sur les 2 champs input même celui réservé a id_items.
J'ai aussi ajouté pour le champs input : id_items dans le fichier autocomplete.php en dessous de la ligne 21 la ligne ci dessous :
$('#id_items').val(ui.item.value); // save selected id to input
ça m'affiche systématiquement la même valeur sur les 2 champs input du formulaire.
quelqu'un saurait pourquoi ce qui fonctionne avec un champs ne fonctionne pas avec 2.
Merci d'avance
Fenêtre 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> </div> <div class="modal-body"> <div class="form-group"> <label>item:</label> <input type="text" class="form-control" id="autocompletei" name="item" value=""> <input type="hidden" class="form-control" id="id_items" name="id_items"> </div> <div class="form-group"> <label>Prix HT:</label> <input type="number" class="form-control" id="prix_ht" name="prix_ht" value=""> </div> <div class="modal-footer"> <div align="left"> <button type="reset" class="btn btn-default" data-dismiss="modal">Cancel</button> <button type="submit" name="createItems" class="btn btn-space btn-primary">Ouvrir la demande</button> </form> </div> </div>
autocomplete.php :
$( function() { $( "#autocompletei" ).autocomplete({ source: function( request, response ) { $.ajax({ url: "<?php echo URLSITE;?>/fetch/Items.php", type: 'post', dataType: "json", data: { search: request.term }, success: function( data ) { response( data ); } }); }, select: function (event, ui) { $('#autocompletei').val(ui.item.label); // display the selected text $('#prix_ht').val(ui.item.value); // save selected id to input $('#id_items').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(); }
items.php :
<?php require "../inc/connexion.php"; //connexion à la bdd $bdd = getDB(); if(isset($_POST['search'])){ $search = $_POST['search']; $query = "SELECT id_items, prix_ht as value, item as label FROM items WHERE item 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; }
A voir également:
- PHP Mysql et Javascript : Affichage dans plusieurs input selon (autocomplétion)
- Easy php - Télécharger - Divers Web & Internet
- Mysql community server - Télécharger - Bases de données
- Telecharger javascript - Télécharger - Langages
- Expert php pinterest - Télécharger - Langages
- Javascript echo ✓ - Forum PHP
10 réponses
Bonjour,
Sans regarder plus loin ... tu as écris
Sauf que tu veux 1 value
et 1 ids
Donc
Sans regarder plus loin ... tu as écris
$('#prix_ht').val(ui.item.value); // save selected id to input $('#id_items').val(ui.item.value);
Sauf que tu veux 1 value
et 1 ids
Donc
$('#prix_ht').val(ui.item.value); // save selected id to input $('#id_items').val(ui.item.id_items);
Merci Jordane,
La requête ci-dessous est correcte ?
J'ai fais la modifiication ci-dessous :
ça me renseigne l'id_items ça l'affiche dans le champs input prix_ht et dans le champs ,id_items je n'ai rien
La requête ci-dessous est correcte ?
$query = "SELECT id_items, prix_ht as value, item as label FROM items WHERE item like'%".$search."%'";
J'ai fais la modifiication ci-dessous :
ça me renseigne l'id_items ça l'affiche dans le champs input prix_ht et dans le champs ,id_items je n'ai rien
$('#prix_ht').val(ui.item.value); // save selected id to input $('#id_items').val(ui.item.id_items); // save selected id to input
Je viens de le faire, j'ai essayé avec un autre navigateur pas encore utilisé c'est pareil.
Dans la console j'ai ça?
Json
0:79
1:9
2: PREMIUM PETITE CITADINES
prix_ht : 79
value: 9
label: PREMIUM PETITE CITADINES
$('#prix_ht').val(ui.item.value); // save selected id to input $('#id_items').val(ui.item.id_items); // save selected id to input
Dans la console j'ai ça?
Json
0:79
1:9
2: PREMIUM PETITE CITADINES
prix_ht : 79
value: 9
label: PREMIUM PETITE CITADINES
Et vu que tu fais du PDO, suis les consignes données ici : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
J'ai fais la vérification, au niveau de PDO j'ai vérifier ce qu'il fallait. Je n'ai pas de message d'erreur
As tu également indiqué le mode de fetch par défaut ? il serait bien de le mettre sur FETCH_ASSOC ( comme dans le code du lien que je t'ai donné).
Ensuite, remontre nous une capture écran de ton ajax (onglet REPONSE) qu'on voit ce que ton code retourne...
Il serait bien également de nous remontrer le code php de ton fichier items.php ... car je pense que tu n'y as pas mis la bonne requête.
Ensuite, remontre nous une capture écran de ton ajax (onglet REPONSE) qu'on voit ce que ton code retourne...
Il serait bien également de nous remontrer le code php de ton fichier items.php ... car je pense que tu n'y as pas mis la bonne requête.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
la page de connexion :
Voici le code de la page items.php
Le fichier Ajax

<?php //session_start(); //On commence par activer l'affichage des erreurs PHP error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); /* DATABASE CONFIGURATION */ define('DB_SERVER', 'localhost'); define('DB_USERNAME', 'root'); define('DB_PASSWORD', ''); define('DB_DATABASE', 'test'); function getDB() { $dbhost=DB_SERVER; $dbuser=DB_USERNAME; $dbpass=DB_PASSWORD; $dbname=DB_DATABASE; try { $bdd = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass); $bdd->exec("set names utf8"); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); // $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ); return $bdd; } catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); exit; } } ?>
Voici le code de la page items.php
<?php require "../inc/connexion.php"; //connexion à la bdd $bdd = getDB(); if(isset($_POST['search'])){ $search = $_POST['search']; $query = "SELECT id_items , prix_ht, as value, item as label FROM items WHERE item 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; }
Le fichier Ajax
<script > $( function() { $( "#autocompletei" ).autocomplete({ source: function( request, response ) { $.ajax({ url: "<?php echo URLSITE;?>/fetch/Items.php", type: 'post', dataType: "json", data: { search: request.term }, success: function( data ) { response( data ); } }); }, select: function (event, ui) { $('#autocompletei').val(ui.item.label); // display the selected text $('#id_items').val(ui.item.id_items); // save selected id to input $('#prix_ht').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>

Donc...
le code de ton fichier items.php ... n'est pas celui que ton code utilise.
Il semble que ton script ajax (côté JS) appelle le fichier Items.php (avec un I majuscule )
Et puis.. si c'était réellement le "bon" que tu nous montres.. ce n'est pas possible car tu devrais avoir une erreur...
Ta requête
ne peut pas marcher !
Tu n'a qu'a la tester directement dans ta bdd (via phpmyadmin) en remplacer le $search par une "vraie valeur" pour t'en rendre compte...
Je maintiens donc que tu ne nous montres pas le bon fichier !
le code de ton fichier items.php ... n'est pas celui que ton code utilise.
Il semble que ton script ajax (côté JS) appelle le fichier Items.php (avec un I majuscule )
Et puis.. si c'était réellement le "bon" que tu nous montres.. ce n'est pas possible car tu devrais avoir une erreur...
Ta requête
"SELECT id_items , prix_ht, as value, item as label FROM items WHERE item like'%".$search."%'";
ne peut pas marcher !
Tu n'a qu'a la tester directement dans ta bdd (via phpmyadmin) en remplacer le $search par une "vraie valeur" pour t'en rendre compte...
Je maintiens donc que tu ne nous montres pas le bon fichier !
ben oui, ta requête est fausse...
A changer par
Quoi qu'il en soit, ton ajax n'appelle pas le bon fichier...
Donc soit tu ne modifies pas le bon....
Soit tu ne pousses pas tes modifs sur le bon serveur
Y'a pas de magie ... soit tu changes le bon fichier.. soit ça ne marchera jamais !
A changer par
$query = "SELECT id_items , prix_ht as value, item as label FROM items WHERE item like'%".$search."%'";
Quoi qu'il en soit, ton ajax n'appelle pas le bon fichier...
Donc soit tu ne modifies pas le bon....
Soit tu ne pousses pas tes modifs sur le bon serveur
Y'a pas de magie ... soit tu changes le bon fichier.. soit ça ne marchera jamais !
persoo je viens de tester
avec, comme code pour le php Items.php (n'ayant pas ta bdd.. j'ai juste généré un array qui devrait correspondre à ce que ta requête retourne...)
<!Doctype html> <html> <head> <title>TEST</title> <meta charset="utf-8"> <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"> <script src="jquery-3.5.1.js"></script> <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js" integrity="sha256-VazP97ZCwtekAsvgPBSUwPFKdrwD3unUfSGVYrahUqU=" crossorigin="anonymous"></script> </head> <body> <div class="modal-body"> <div class="form-group"> <label>item:</label> <input type="text" class="form-control" id="autocompletei" name="item" value=""> <input type="text" class="form-control" id="id_items" name="id_items"> </div> <div class="form-group"> <label>Prix HT:</label> <input type="number" class="form-control" id="prix_ht" name="prix_ht" value=""> </div> </div> <script type="text/javascript"> $( function() { $( "#autocompletei" ).autocomplete({ source: function( request, response ) { $.ajax({ url: "Items.php", type: 'post', dataType: "json", data: { search: request.term }, success: function( data ) { response( data ); } }); }, select: function (event, ui) { console.log('UI',ui.item); $('#autocompletei').val(ui.item.label); // display the selected text $('#prix_ht').val(ui.item.value); // save selected id to input $('#id_items').val(ui.item.id_items); // save selected id to input return false; } }); }); </script> </body> </html>
avec, comme code pour le php Items.php (n'ayant pas ta bdd.. j'ai juste généré un array qui devrait correspondre à ce que ta requête retourne...)
<?php $response = array(); $response[] = array("id_items"=>1,"value"=>9,"label"=>"test"); $response[] = array("id_items"=>2,"value"=>7,"label"=>"test 2"); echo json_encode($response); exit;