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   -
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 :

<!--  ******   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:

21 réponses

JC_8280 Messages postés 78 Date d'inscription   Statut Membre Dernière intervention  
 
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

<?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));
            
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 753
 
Bonjour,
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
0