Ma requête AJAX de JS vers PHP ne fonctionne pas
Résolu
JC_8280
Messages postés
78
Date d'inscription
Statut
Membre
Dernière intervention
-
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
Je débute en programmation et je suis en train de faire mon premier projet et je bloque sur une requête AJAX.
1°) J' ai affiché sur une page web un tableau de ma base de données MySQL, ensuite je veux le filtrer en ne gardant que des éléments déterminés dans un formulaires multicritères html.
J'ai testé la requête du PHP dans la table MySQL, ça marche.
Je pense que le problème se situe dans la requête JS ou bien la réception dans le PHP.
2°) Il faut aussi que j'inverse le résultat de ma requête, car pour l'instant j' efface les éléménts que je veux garder, je n'ai pas encore réfléchi à ce problème.
Merci par avance pour votre aide.
Le formulaire, le JS et le PHP sont dans 3 fichiers différents, mais je pense que cela ne gêne pas.
Le code ci-dessous
Formulaire HTML :
CODE JAVA SCRIPT
FICHIER PHP
JC
EDIT : remise en forme partielle du code...
Je débute en programmation et je suis en train de faire mon premier projet et je bloque sur une requête AJAX.
1°) J' ai affiché sur une page web un tableau de ma base de données MySQL, ensuite je veux le filtrer en ne gardant que des éléments déterminés dans un formulaires multicritères html.
J'ai testé la requête du PHP dans la table MySQL, ça marche.
Je pense que le problème se situe dans la requête JS ou bien la réception dans le PHP.
2°) Il faut aussi que j'inverse le résultat de ma requête, car pour l'instant j' efface les éléménts que je veux garder, je n'ai pas encore réfléchi à ce problème.
Merci par avance pour votre aide.
Le formulaire, le JS et le PHP sont dans 3 fichiers différents, mais je pense que cela ne gêne pas.
Le code ci-dessous
Formulaire HTML :
<!-- ****** FORMULAIRE RECHERCHER ****** --> <form id='idFormRechercher' action="" method="post"> * ** *** **** ***** ****** ******* ******** ********* ********** ***********CRITERES de SELECTION*********** <!-- ****** BOUTONS RECHERCHE ****** --> <div class = "boutonsRecherche"> <!-- ****** BOUTON VALIDER RECHERCHE ****** --> <input id = "idboutonValiderRecherche" class = 'classboutonValiderRecherche' type = "submit" value = "VALIDER">
CODE JAVA SCRIPT
//BOUTON VALIDER RECHERCHE // reference www.w3schools.com -> JAVA SCRIPT / JSON PHP let boutonValiderRecherche = document.getElementById('idboutonValiderRecherche'); boutonValiderRecherche.addEventListener('click',validerRecherche) ;function validerRecherche(){ var xmlhttp ="", resultRecherche = "", x ="", idRow ="" ; xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { resultRecherche = JSON.parse(this.responseText); for (x in resultRecherche) { idRow = document.getElementById('x'); idRow.style.display = 'none'; } } }; xmlhttp.open("POST", "trouver.php", true);xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");xmlhttp.send(); }
FICHIER PHP
header("Content-Type: application/json; charset=UTF-8"); $_POST = json_decode($_POST["x"], false); $VR = []; $VR0=$VR1=$VR2=$VR3=$VR4=$VR5=$VR6=$VR7=$VR8=$VR9=$VR10=$VR11=$VR12= $VR13=$VR14=$VR15=$VR16=$VR17=$VR18=$VR19=$VR20=$VR21=$VR22=$VR23=""; $_POST["id"]=""; // à enlever lors des implementations dans recherche.php $_POST["RefMag"]=""; // à enlever $_POST["Caract2"]="";// à enlever function cleanData($dataToClean){ $dataToClean = trim($dataToClean); $dataToClean = stripslashes($dataToClean); $dataCleaned = htmlspecialchars($dataToClean); return $dataCleaned; } $VR0 = cleanData($_POST["id"]); $VR1 = cleanData($_POST["RefMag"]); $VR2 = cleanData($_POST["familleOutil"]); $VR3 = cleanData($_POST["SousFamille"]); $VR4 = cleanData($_POST["Matiere"]); $VR5 = cleanData($_POST["NbreZ"]); $VR6 = cleanData($_POST["Dia1"]); $VR7 = cleanData($_POST["Long1"]); $VR8 = cleanData($_POST["Dia2"]); $VR9 = cleanData($_POST["Dia3"]); $VR10 = cleanData($_POST["LongUtile"]); $VR11 = cleanData($_POST["LongTotale"]); $VR12 = cleanData($_POST["Caract1"]); $VR13 = cleanData($_POST["Caract2"]); $VR14 = cleanData($_POST["Fournisseur"]); $VR15 = cleanData($_POST["Ref_Fournisseur"]); $VR16 = cleanData($_POST["Prix"]); $VR17 = cleanData($_POST["QteMini"]); $VR18 = cleanData($_POST["CasEmploi1"]); $VR19 = cleanData($_POST["CasEmploi2"]); $VR20 = cleanData($_POST["CasEmploi3"]); $VR21 = cleanData($_POST["CasEmploi4"]); $VR22 = cleanData($_POST["CasEmploi5"]); $VR23 = cleanData($_POST["CasEmploi6"]); // colonne de la table $VR = array ("id"=>"$VR0", "REF_MAG"=>"$VR1", "FAMILLE_OUTIL"=>"$VR2", "SOUS_FAMILLE"=>"$VR3", "MATIERE_OUTIL"=>"$VR4", "NBRE_Z"=>"$VR5", "DIA_1"=>"$VR6", "LONGUEUR_1"=>"$VR7", "DIA_2"=>"$VR8", "DIA_3"=>"$VR9", "LONG_UTILE"=>"$VR10", "LONG_TOTALE"=>"$VR11", "CARACT_1"=>"$VR12", "CARACT_2"=>"$VR13", "FOURNISSEUR"=>"$VR14", "REF_FOURNISSEUR"=>"$VR15", "PRIX"=>"$VR16", "QTE_MINI"=>"$VR17", "CAS_EMPLOI_1"=>"$VR18", "CAS_EMPLOI_2"=>"$VR19", "CAS_EMPLOI_3"=>"$VR20", "CAS_EMPLOI_4"=>"$VR21", "CAS_EMPLOI_5"=>"$VR22", "CAS_EMPLOI_6"=>"$VR23"); $concat = "" ; foreach($VR as $VRn => $VRn_value){ if($VRn_value !== ""){ $concat = $concat. 'AND '.$VRn.' = \''.$VRn_value.'\' '; }; }; $condition = ltrim($concat,"AND"); // echo 'Concat = ' .$concat; //echo ' et Condition = '.$condition; /* *************************************************** *//* REQUETE *//* *************************************************** */ $serveur = "localhost"; $login = "root"; $pass = ""; try{ $connexion = new PDO("mysql:host=$serveur;dbname=hydro", $login, $pass); $connexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $requete = $connexion->query('SELECT id FROM cutting_tools_01 WHERE' . $condition ); $resultat = $requete->fetchAll(PDO::FETCH_ASSOC); echo json_encode($resultat); } catch(PDOException $e){ echo 'ECHEC : ' .$e->getMessage(); }
JC
EDIT : remise en forme partielle du code...
A voir également:
- Ma requête AJAX de JS vers PHP ne fonctionne pas
- Easy php - Télécharger - Divers Web & Internet
- Windows 7 vers windows 10 - Accueil - Mise à jour
- Clavier qwerty vers azerty - Guide
- Vers quelle adresse web renvoie ce lien - Guide
- Envoyer vers destinataire ne fonctionne pas - Guide
21 réponses
Bonjour Jordane45,
J'ai encore un problème.
En fait, jusqu' à présent j' ai extrait de la table les éléménts que je voulais garder à l'affichage, et mon plan est de soustraire tous les autres de la table html, donc je veux soustraire cette liste d'une 2ème qui serait la liste du tableau complète. J'ai donc fait une deuxième requête de la liste complète, mais la soustraction me pose un problème.
Quelle fonction faut il utiliser car array_diff ne fonctionne pas, je ne comprends pas pourquoi.
Peut être que c'est parce que cene sont pas des arrays, mais des objets...
Peux tu aussi m'expliquer pourquoi tu utilise la variable $datas dans la requête?.
Cordialement.
JC
J'ai encore un problème.
En fait, jusqu' à présent j' ai extrait de la table les éléménts que je voulais garder à l'affichage, et mon plan est de soustraire tous les autres de la table html, donc je veux soustraire cette liste d'une 2ème qui serait la liste du tableau complète. J'ai donc fait une deuxième requête de la liste complète, mais la soustraction me pose un problème.
Quelle fonction faut il utiliser car array_diff ne fonctionne pas, je ne comprends pas pourquoi.
Peut être que c'est parce que cene sont pas des arrays, mais des objets...
Peux tu aussi m'expliquer pourquoi tu utilise la variable $datas dans la requête?.
Cordialement.
JC
<?php header("Content-Type: application/json; charset=UTF-8"); error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //--------------------------------------------------------------------------// // fonctions diverses... //--------------------------------------------------------------------------// function cleanDataPOST($dataToClean=NULL,$defaultValue=""){ $result = !empty($_POST[$dataToClean]) ? trim($_POST[$dataToClean]) : $defaultValue; $result = stripslashes($result); return $result; } //--------------------------------------------------------------------------// //connexion à la bdd //--------------------------------------------------------------------------// require_once "cnxbdd.php"; //--------------------------------------------------------------------------// // Variables .. //--------------------------------------------------------------------------// $VR = array(); $resultat = array(); $VR0 = cleanDataPOST("id"); $VR1 = cleanDataPOST("RefMag"); $VR2 = cleanDataPOST("familleOutil"); $VR3 = cleanDataPOST("SousFamille"); $VR4 = cleanDataPOST("Matiere"); $VR5 = cleanDataPOST("NbreZ"); $VR6 = cleanDataPOST("Dia1"); $VR7 = cleanDataPOST("Long1"); $VR8 = cleanDataPOST("Dia2"); $VR9 = cleanDataPOST("Dia3"); $VR10 = cleanDataPOST("LongUtile"); $VR11 = cleanDataPOST("LongTotale"); $VR12 = cleanDataPOST("Caract1"); $VR13 = cleanDataPOST("Caract2"); $VR14 = cleanDataPOST("Fournisseur"); $VR15 = cleanDataPOST("Ref_Fournisseur"); $VR16 = cleanDataPOST("Prix"); $VR17 = cleanDataPOST("QteMini"); $VR18 = cleanDataPOST("CasEmploi1"); $VR19 = cleanDataPOST("CasEmploi2"); $VR20 = cleanDataPOST("CasEmploi3"); $VR21 = cleanDataPOST("CasEmploi4"); $VR22 = cleanDataPOST("CasEmploi5"); $VR23 = cleanDataPOST("CasEmploi6"); // colonne de la table $VR = array ("id"=>$VR0, "REF_MAG"=>$VR1, "FAMILLE_OUTIL"=>$VR2, "SOUS_FAMILLE"=>$VR3, "MATIERE_OUTIL"=>$VR4, "NBRE_Z"=>$VR5, "DIA_1"=>$VR6, "LONGUEUR_1"=>$VR7, "DIA_2"=>$VR8, "DIA_3"=>$VR9, "LONG_UTILE"=>$VR10, "LONG_TOTALE"=>$VR11, "CARACT_1"=>$VR12, "CARACT_2"=>$VR13, "FOURNISSEUR"=>$VR14, "REF_FOURNISSEUR"=>$VR15, "PRIX"=>$VR16, "QTE_MINI"=>$VR17, "CAS_EMPLOI_1"=>$VR18, "CAS_EMPLOI_2"=>$VR19, "CAS_EMPLOI_3"=>$VR20, "CAS_EMPLOI_4"=>$VR21, "CAS_EMPLOI_5"=>$VR22, "CAS_EMPLOI_6"=>$VR23 ); $concat = "" ; $datas = array(); foreach($VR as $VRn => $VRn_value){ if($VRn_value !== ""){ $concat = $concat. 'AND '.$VRn. ' = :' .$VRn.' '; $datas[":" .$VRn] = $VRn_value; }; }; $condition = ltrim($concat,"AND"); //--------------------------------------------------------------------------// // REQUETE //--------------------------------------------------------------------------// $sql = 'SELECT id FROM cutting_tools_01 '; $fullList = $sql; $sql .= !empty($condition)? ' WHERE' . $condition : ""; try{ $requete1 = $connexion->prepare($sql); $requete1->execute($datas); $resultat1 = $requete1->fetchAll(PDO::FETCH_ASSOC); //echo $resultat2; }catch(PDOException $e){ echo 'ECHEC : ' .$e->getMessage(); } try{ $requete2 = $connexion->prepare($fullList); $requete2->execute(); $resultat2 = $requete2->fetchAll(PDO::FETCH_ASSOC); //echo $resultat2; }catch(PDOException $e){ echo 'ECHEC : ' .$e->getMessage(); } //--------------------------------------------------------------------------// //calcul des éléments a retirer du tableau //--------------------------------------------------------------------------// $resultat=array_diff_assoc($resultat2,$resultat1); // print_r ($resultat); // ,'resultat1'=>$resultat1,'resultat2'=>$resultat2 //--------------------------------------------------------------------------// //on renvoi la réponse au script ajax au format json //--------------------------------------------------------------------------// //echo $result; echo json_encode(array('resultat'=>$resultat,'sql'=>$sql,'datas'=>$datas));
Je n'avais pas vu ta question... en effet, lorsqu'elle est marquée comme "résolue" je ne la surveille plus.
Quoi qu'il en soit, il est préférable, lorsqu'il s'agit d'une nouvelle question.. d'ouvrir une nouvelle discussion.
Cela permet plus facilement de retrouver les discussions dans le forum en cas de recherche.
Jet 'invite donc à ouvrir une nouvelle discussion pour ce nouveau souci.
Pense au passage à expliquer en détail ta "logique".
Je ne vois pas pourquoi tu veux soustraire ... alors qu'il serait plus simple de faire une requête "inverse".
Au lieu de chercher les lignes qui correspondent aux criètres.. tu ne prends que les lignes qui ne "correspondent" pas aux critères