Valeur JavaScript dans requete SQL

Résolu/Fermé
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 - Modifié le 13 nov. 2018 à 10:49
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 - 16 nov. 2018 à 14:18
Bonjour à tous !

J'utilise Ajax pour rafraichir des DIV qui doivent récupérer certaines valeurs. Bon là j'y arrive mais je souhaiterais utiliser ces valeurs (en JavaScript) dans une requête SQL.
J'ai quelques grandes difficultés avec ce code et sollicite votre aide :

<script>
var c_Zone = $('#VAL_Zone').val();
var c_Weig = $('#VAL_Weight').val();

document.getElementById("madiv_1").innerHTML = c_Zone;
document.getElementById("madiv_3").innerHTML = c_Weig;

if(c_Deli == "S1")  {var c_Table = "tb_s1"; document.getElementById("madiv_7").innerHTML = c_Table;}
if(c_Deli == "S2")  {var c_Table = "tb_s2"; document.getElementById("madiv_7").innerHTML = c_Table;}
</script>

<?php
try{$Stat = $pdo->query("SELECT * FROM '".$c_Table."' WHERE '".$c_Weig."' >= Poids_min AND '".$c_Weig."' <= Poids_max AND 
'".$c_Zone."' = ZoneA OR 
'".$c_Zone."' = ZoneB OR 
'".$c_Zone."' = Zone1 OR 
'".$c_Zone."' = Zone2 OR 
'".$c_Zone."' = Zone3");
while($data = $Stat->fetch(PDO::FETCH_ASSOC))
{

$Poids = $data["ZoneA"].$data["ZoneB"].$data["Zone1"].$data["Zone2"].$data["Zone3"];

}}catch(PDOException $e){echo "<div class='alert alert-danger'>".$e->getMessage()."</div>";} ?>

<script>
document.getElementById("madiv_8").innerHTML = "<?php echo $Poids; ?>";
</script>


Merci d'avance !

A voir également:

6 réponses

jordane45 Messages postés 38137 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
13 nov. 2018 à 10:52
Bonjour,

A quoi correspond le code que tu viens de nous poster ?
Il n'y a aucun AJAX à l'intérieur... ne serait-ce pas le code APPELÉ par ton code ajax justement ?
Si oui... le javascript n'y a pas sa place !

Il serait bien que tu nous montres ton code ajax (en indiquant le nom de chaque fichier)
Aussi bien le Javascript... que côté PHP.
Ensuite, explique ce que tu désires réaliser.

là on pourra peut-être t'aider....

1
jordane45 Messages postés 38137 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
Modifié le 13 nov. 2018 à 14:12
Le Javascript s'exécute côté utilisateur (dans le navigateur) alors que le php s'exécute côté SERVEUR.
Tes variables JS ne peuvent pas être récupérées comme tu le fais dans un script php !

Ne mélange pas non plus le quotes et les backquotes ( 'table' n'est pas pareil que `table`)


Voici à quoi devrait ressembler ton code avec les corrections nécéssaires :

//recupération des variables de ton formulaire
var c_Weig = $('#VAL_Weight').val();
var c_Deli = $('#VAL_Dlvry').val();
var c_Zone = $('#VAL_Zones').val();
var c_Table = c_Deli == "POSTE" ? "tb_laposte" : null;
var c_Table = c_Deli == "DHL" ? "tb_dhl" : null;

//on stocke les variables au format JSON pour les envoyer en ajax
var data = {c_Weig:c_Weig, c_Deli:c_Deli, c_Table:c_Table,c_Zone:c_Zone };

//appel Ajax
  $.ajax({ 
        type: "POST",
        url: "_calcul.php",
        cache: false,
        data: data,
        async: true,
        dataType: "json"
  })
  .done(function(reponse){
      var erreur = typeof(reponse.Error)!='undefined' ? reponse.Error : null;
      var result = typeof(reponse.result)!='undefined' ? reponse.result : null;
      if(!erreur){
          if(result!=null){
            console.log('Resultat',result);//affiche le résultat dans la console du navigateur
            //traitement du resultat
            //par exemple :
            var v="";
            $.each(result,function(i,vx){
              v += vx;
            }
            $("#VAL_Amunt").val(v);
          }
      }else{
          alert('Erreur ajax !');
          console.log('Erreur',erreur);//affiche l'erreur dans la console du navigateur
      }
      

  })
  .fail(function(jqXHR, textStatus){
    console.log('Ajax error :',jqXHR, textStatus);
    alert('Erreur AJAX !');
 });
}


//ici tu placeras la connexion à ta bdd
// par exemple: 
// require_once 'cnxBdd.php';

//récupération propre des variables avant de les utiliser
$c_table = !empty($_POST['c_Table']) ? $_POST['c_Table']: NULL;
$c_Weig = !empty($_POST['c_Weig']) ? $_POST['c_Weig']: NULL;
$c_Deli = !empty($_POST['c_Deli']) ? $_POST['c_Deli']: NULL;
$c_Zone = !empty($_POST['c_Zone']) ? $_POST['c_Zone']: NULL;

$result = array();
if($c_table){


  $sql = "SELECT * FROM `".$c_table."` 
          WHERE `".$c_Weig."` >= Poids_min 
          AND `".$c_Weig."` <= Poids_max 
          AND(`".$c_Zone."` = 'ZoneA' 
            OR `".$c_Zone."` = 'ZoneB' 
            OR `".$c_Zone."` = 'Zone1' 
            OR `".$c_Zone."` = 'Zone2' 
            OR `".$c_Zone."` = 'Zone3' 
            OR `".$c_Zone."` = 'Zone4' 
            OR `".$c_Zone."` = 'Zone5' 
            OR `".$c_Zone."` = 'Zone6' 
            OR `".$c_Zone."` = 'Zone7' 
            OR `".$c_Zone."` = 'Zone8'"; 



  try{
    $Stat = $pdo->prepare($sql);
    $Stat->execute();
    $result['success'] = $Stat->fetchAll(PDO::FETCH_ASSOC))
  }catch(PDOException $e){
    $result['Error'] = "<div class='alert alert-danger'>".$e->getMessage()."</div>";
  }
}

//on renvoi les données au javascript au format json
echo json_encode($result);
exit();




1
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 17
13 nov. 2018 à 18:55
O_O !! Jordan !! je suis mort ! et dire que je comptais me débrouiller pour faire ça tout seul au début !!!
En tout cas merci pour ton aide !

Il y avait quelques erreurs de syntaxes que j'ai corrigé.
Je n'ai plus d'erreurs en tant que tels, mais la console me dit sur cette ligne :
$.each(result,function(i,vx)) {v += vx;}
et me dit :
Uncaught SyntaxError: Unexpected token )
.

Aussi, j'ai changé la requête en mettant ceci à sa place :
$sql = "SELECT `".$c_Zone."` FROM `".$c_table."` WHERE $c_Weig BETWEEN Poids_min AND Poids_max ";


Malgré ça je n'ai pas de résultats dans mon input,
0
jordane45 Messages postés 38137 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
13 nov. 2018 à 19:14
La parenthèse du each fermante n'est pas à la bonne place
0
jordane45 Messages postés 38137 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
13 nov. 2018 à 19:35
 $.each(result,function(i,vx){
              v += vx;
            });
0
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 17
13 nov. 2018 à 11:08
Merci Jordan.

Dans un input, je récupère le poids total des produits.
Ensuite, je dois aller faire une comparaison dans une table afin d'avoir le prix selon le poids et la zone de livraison.
Je me suis dis que je dois utiliser Ajax pour rafraichir la page appelée toutes les X secondes et (oui tu as raison, c'est la page appelée)...

J'ai des valeurs dans des inputs qui s'actualise quand l'utilisateur choisis un service ou autre :
Le service : poste, dhl
id="VAL_Delivery"

La zone : A, B, 1 à 8 :
id="VAL_Zone"

Le poids :
id="VAL_Weight"

Si le service est égale à poste, alors la table sql est tb_poste, sinon tb_dhl
Ensuite, une comparaison du poids doit se faire :
Si VAL_Weight >= tb_poste.poids_min ET VAL_Weight <= tb_poste.poids_max, affiche le prix selon la Zone


Voici ce que j'essaie de faire depuis quelques jours mais j'y arrive pas parce que je ne sais pas comment récupérer ces valeurs et les mettre dans ma requête.
J'ai essayé de ne pas me compliquer la vie avec des
GET['VAL_Delivery']
mais j'y arrive toujours pas...
0
jordane45 Messages postés 38137 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
13 nov. 2018 à 11:17

je ne sais pas comment récupérer ces valeurs et les mettre dans ma requête.

Ca se passe côté Javascript DANS la page qui fait l'appel AJAX. (que tu ne nous as toujours pas montré ! )

Au passage, (encore une fois....) merci de poster ton code en utilisant CORRECTEMENT les balises de code (pour que l'on ait la coloration syntaxique )
Explications sur l'utilisation des balises de code disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
0
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 17
Modifié le 13 nov. 2018 à 13:23
Désolé Jordan, JavaScript et Ajax... j'y connais rien encore, prends moi au niveau de mon ignorance :$

Lorsque l'utilisateur sélectionne ses services, ces zones de textes sont automatiquement renseignées comme suite :
index.php (page ajax) :
Zone :   <input name="VAL_Zones"  id="VAL_Zones"   value="A">
Delivery :  <input name="VAL_Dlvry"  id="VAL_Dlvry"   value="POSTE">
Money :  <input name="VAL_Money"  id="VAL_Money"   value="ORANGE">
Total weight :  <input name="VAL_Weight"  id="VAL_Weight"  value="4.30142">
Amount weight : <input name="VAL_Amount"  id="VAL_Amount"  value="0">


Dans cette même page, j'ai mon ajax qui rafraîchit une autre page où je souhaite faire ma requête :
<script>
    function loadLog() {
        $.ajax({
            url: "_calcul.php",
            cache: false,
            success: function(v) {
    $("#VAL_Amunt").val(v);
            },
        });
    }
setInterval(loadLog, 1000);
</script>

Et donc insérer le montant du transport selon sa zone choisie dans
id="VAL_Amount"
.

Ensuite donc dans mon _calcul.php :
<script>
var c_Weig = $('#VAL_Weight').val();
var c_Deli = $('#VAL_Dlvry').val();
if(c_Deli == "POSTE")  {var c_Table = "tb_laposte";}
if(c_Deli == "DHL")  {var c_Table = "tb_dhl";}
</script>

try{$Stat = $pdo->query("SELECT * FROM '".c_table."' WHERE '".$c_Weig."' >= Poids_min AND '".$c_Weig."' <= Poids_max AND 
'".$c_Zone."' = ZoneA OR 
'".$c_Zone."' = ZoneB OR 
'".$c_Zone."' = Zone1 OR 
'".$c_Zone."' = Zone2 OR 
'".$c_Zone."' = Zone3 OR 
'".$c_Zone."' = Zone4 OR 
'".$c_Zone."' = Zone5 OR 
'".$c_Zone."' = Zone6 OR 
'".$c_Zone."' = Zone7 OR 
'".$c_Zone."' = Zone8
");
while($data = $Stat->fetch(PDO::FETCH_ASSOC))
{

$Montant = $data["ZoneA"].$data["ZoneB"].$data["Zone1"].$data["Zone2"].$data["Zone3"].$data["Zone4"].$data["Zone5"].$data["Zone6"].$data["Zone7"].$data["Zone8"];

}}catch(PDOException $e){echo "<div class='alert alert-danger'>".$e->getMessage()."</div>";}


Il y a certainement plus simple, mais j'avoue que j'ai une constipation cérébrale en ce moment... :\
0
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 17
13 nov. 2018 à 21:42
Ligne corrigée, coquilles et valeurs nettoyées, aucune erreur console mais pas de résultats.
Penses-tu que j'ai oublié quelque chose ?

Voici le script de ma page d'accueil ;
//recupération des variables de ton formulaire
var c_Weig = $('#VAL_Weigt').val();
var c_Deli = $('#VAL_Dlvry').val();
var c_Zone = $('#VAL_Zones').val();
var c_Table = c_Deli == "POSTE" ? "tb_shop_prices_laposte" : null;
var c_Table = c_Deli == "DHL" ? "tb_shop_prices_dhl" : null;

//on stocke les variables au format JSON pour les envoyer en ajax
var data = {
    c_Weig: c_Weig,
    c_Deli: c_Deli,
    c_Table: c_Table,
    c_Zone: c_Zone
};

//appel Ajax
$.ajax({
        type: "POST",
        url: "_shop-calcul.php",
        cache: false,
        data: data,
        async: true,
        dataType: "json"
    })

    .done(function(reponse) {
        var erreur = typeof(reponse.Error) != 'undefined' ? reponse.Error : null;
        var result = typeof(reponse.result) != 'undefined' ? reponse.result : null;
        if (!erreur) {
            if (result != null) {
                console.log('Resultat', result); //affiche le résultat dans la console du navigateur
                //traitement du resultat
                //par exemple :
                var v = "";
                $.each(result, function(i, vx) {
                    v += vx;
                });
                $("#VAL_Amunt").val(v);
            }
        } else {
            alert('Erreur ajax !');
            console.log('Erreur', erreur);
        }
    })

    .fail(function(jqXHR, textStatus) {
        console.log('Ajax error :', jqXHR, textStatus);
        alert('Erreur AJAX !');
    });


Et celui de ma page calcul :
<?php
$c_Table = !empty($_POST['c_Table']) ? $_POST['c_Table']: NULL;
$c_Weig = !empty($_POST['c_Weig']) ? $_POST['c_Weig']: NULL;
$c_Deli = !empty($_POST['c_Deli']) ? $_POST['c_Deli']: NULL;
$c_Zone = !empty($_POST['c_Zone']) ? $_POST['c_Zone']: NULL;

$result = array();

if($c_Table){

  $sql = "SELECT `".$c_Zone."` FROM `".$c_Table."` WHERE `".$c_Weig."` BETWEEN Poids_min AND Poids_max "; 

try{
    $Stat = $pdo->prepare($sql);
    $Stat->execute();
    $result['success'] = $Stat->fetchAll(PDO::FETCH_ASSOC);
  }
	catch(PDOException $e)

	{$result['Error'] = "<div class='alert alert-danger'>".$e->getMessage()."</div>";}
}

echo json_encode($result);
exit();
?>
0
jordane45 Messages postés 38137 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
13 nov. 2018 à 22:08
Tu nous as collé le code complet la ??
Car si oui... tu as légèrement oublié de mettre le code de connexion à la bdd..... (alors que c'était quand même marqué dans les commentaires du code que je t'ai donné !!! )

N'oublies pas non plus de regarder dans la CONSOLE de ton navigateur afin de voir ce que retourne l'appel ajax.
(de préférence utilise Firefox ou sinon installe le plugin ajax debuger pour chrome )
0
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 17
13 nov. 2018 à 22:10
Oui oui la connexion a la base de donnée est faite... require_once
La console n'affiche rien comme message en tout cas
0
jordane45 Messages postés 38137 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649 > Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023
13 nov. 2018 à 22:13
La console affiche forcément des choses..... ça ne peut pas en être autrement.....
Fais nous donc une capture écran de la console qu'on puisse voir ce qu'il en est. (pense à déplier les éventuelles lignes précédées d'un triange )
Comme ça :


0
jordane45 Messages postés 38137 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
13 nov. 2018 à 22:14
et au passage.... moi c'est jordane .. (le prénom a été francisé)
donc merci de mettre le "e" ^^
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 17
13 nov. 2018 à 22:23
lool bien noté Jodane :D

Voici le scrren de la page avec console ouvert. Pour me rassurer, j'ai fais aussi un Ctrl+F5 et vidé le cache manuellement :

0
jordane45 Messages postés 38137 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
13 nov. 2018 à 22:48
Tu as bien placé le code javascript dans la fonction loadLog() ?
Cette fonction est appellée par quel moyen ?

Il serait bien que tu nous montres le code html COMPLET de ta page....

Pense aussi que tu peux ajouter, dans ton code JS des console.log() et/ou des alerte() pour essayer de voir si tu entres bien dedans....

Pense aussi à regarder (comme dans ma capture écran....) dans l'onglet "network"
0
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 17
13 nov. 2018 à 23:16
Avec Firefox il m'affiche ceci :
0
jordane45 Messages postés 38137 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
13 nov. 2018 à 23:24
Il faudrait regarder dans l'onglet paramètres.
Je pense que cela vient de la variable c_Table
modifie le code JS comme ceci :
var c_Table = c_Deli == "POSTE" ? "tb_shop_prices_laposte" : null;
var c_Table = c_Deli == "DHL" ? "tb_shop_prices_dhl" : null;

A remplacer par
var  c_Table;
switch(c_Deli){
  case "POSTE":
   c_Table = "tb_shop_prices_laposte";
   break;
  case  "DHL" :
    c_Table = "tb_shop_prices_dhl";
   break;
  default:
   c_Table = null;
   break;
}
0
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 17
Modifié le 14 nov. 2018 à 00:14
Le code a été modifié comme tu as demandé.
La console n'affiche aucune erreur.
J'ai changé le nom de la table en attribuant une table inexistante, il affiche une erreur comme quoi cette table n'existe pas. Ce qui dit qu'il récupère bien le nom de la table... mais pourquoi il n'affiche rien ?
J'ai changé ma requête de
SELECT `".$c_Zone."` FROM `".$c_Table."` WHERE `".$c_Weig."` BETWEEN Poids_min AND Poids_max 

en
SELECT $c_Zone FROM $c_Table WHERE $c_Weig BETWEEN Poids_min AND Poids_max 

sachant que $c_Weig es un float, mais pareil.
0
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 17
14 nov. 2018 à 00:23
Je viens de tester aussi la requête en dur :
SELECT ZoneA FROM tb_shop_prices_laposte WHERE 4301.42 BETWEEN Poids_min AND Poids_max
, pareil, aucun résultat...
0
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 17
16 nov. 2018 à 14:18
Bonjour Jordane,

Je tiens a te remercier pour le temps et l'effort que tu as pris pour résoudre mon problème.
Tout fonctionne parfaitement maintenant, et j'avoue que je ne serai pas arrivé sans toi.
Je te dois une fière chandelle !

Merci encore !
0