Bonjour à tous,

je rencontre un petit probleme ave mon code
je voulais charger le prix d un produit dans un input de type text en fonction du changement de valeur du produit de l input de type select

Ce que je fais

je recupere la valeur du select et je l envoi par post au fichier php qui traite la requete de selection du prix dans la base de donnee en fonction de cette valeur et j envw le resultat de la requete par json au fichier .js

Entourez votre code pour bien le mettre en forme

Ce que je veux

recuperer la donnee envoyeé par post pour qu elle soit la clause de ma requette sql
et envoyer le resultat de ma requette à mon fichier .js pour la mettre dans mon input text

Ce que j'obtiens

mais la valeur de retour est undifined

14 réponses


Bonjour.
Montres nous du code PHP/JS sinon on va avoir du mal à t'aider sans support de base.

jaguar
Auteur
<?php

    include('connect.php');
 $d = array();
extract($_POST);

      if($_POST["action"]=="switchprix"){
           $sql='SELECT prix_unit FROM produit WHERE libelle_prod = "'.$valeur.'"';
          $req = mysqli_query($conn,$sql) or die(mysqli_error($conn));
          $d["result"]="";
          while($data=mysqli_fetch_assoc($req)){

            $d["result"]= $data["prix_unit"];

          }
           $d['erreur']= 'ok';
      }

         echo json_encode($d);

?>
jaguar
Auteur
var uri="comAjax.php";

$(function(){
$('form').change(function(){
    var valeur = $('#produit').val();
    $.post(uri,{action:"switchprix",valeur:valeur},function(resultat){
        if(resultat.erreur=='ok'){
        $('#prix').val(resultat.result);
        }       
    },"json");

});
});     

hello,
(avant toutes choses pourrais tu formater tes posts correctement ? c très difficile à lire....)
ensuite, observer le change d'un form pour ne récupérer que la valeur d'un select, c un peu lourd.....

cela dit, as tu debuggué ce que tu récupères de #produit, cad valeur, avant de l'envoyer ?

enfin, ds ton php (même s'il est préférable d'utiliser PDO...) ton $d['erreur'] sera toujours à ok, donc inutile...

Bonsoir.
Pour commencer, évites les doubles inclusions et les doubles définitions, ensuite, pourquoi tu fais un while si tu ne vas traiter qu'une seule donnée du côté de javascript ?
Sinon comme l'a dit saibe si tu renvois toujours l'index erreur avec la valeur ok dans ta variable tout le temps, autant ne faire aucune vérification car ça reviendra au même.
Pour terminer, il serait plus judicieux de faire ta requête SQL avec un champ dont tu es sur que sa valeur sera unique, au lieu d'utiliser seulement une chaine de caractère de type alphanumérique et qui peut avoir des espaces et tout le reste.

jaguar
Auteur

Bonjour
Merci saibe
Lartak pour les doubles inclusions et doubles definitions c est une erreur lors du copier coller et pour l index erreur c est reglé mais ça n arrange toujours pas le probleme!! le probleme se trouve lors de la recuperation de la valeur dans le fichier php. je me suis meme amusé a changer un peu mon code en enlevant la requette et faire de telle façon que la valeur envoyée par le fichier .js je la mets dans l index result et je la renvoi à mon .js en l affichant avec un alert question de vwr reellement ce que reçoit .php et normalement c est justement la valeur du select et qui bizarement ne donne pas dans ma requete sql!! y aurait il quelque chose que j oubli de faire??

hello,
merci pour le formatage, c quand même mieux ainsi ;) tu peux même rééditer ton php et supprimer le doublon... ;)

as tu pris en compte la remarque de @Lartak ? cad, la pertinence de ta condition sql ?
pourrait-on avoir le html de ton select (#produit si g bien compris...) et la manière que tu as de le créer, car si tu le fabriques en php tu peux lui attribuer comme value l'id unique de ton produit... suis-je clair ?
d'ailleurs un simple :

$('#produit').change(function(){
    var valeur = $(this).val();

suffirait...

ensuite pour le soucis de $erreur toujours à ok, tu pourrais définir un $d['erreur'] = $d['resultat']==''?'vide':'ok'; même si c pas top (tu ne connaîtras pas la nature de l'erreur...) au moins tu auras une tite protection... et tu pourras récupérer l'info ds la function success de ton ajax (un else suffira...)

car pour l'instant c difficile de t'aider : à priori il n'y a pas d'erreur de syntaxe (je peux me tromper...), le seul hic que je verrai c la condition sql...

jaguar
Auteur

Merci saibe
Oui effectivement j ai fabriqué mon select avec mon php!!
aide moi un peu avec le bout de code à ajouter pour que ma la condition fonctionne dans mon sql

hello,
ok, mais donne nous le code qui fabrique ton select... on va pouvoir l'adapter et te proposer une requête sql adéquat...

jaguar
Auteur
<form action="#" method="POST">
            <label for="numcom">Numero Commande:</label><input type="text" name="numcom" id="numcom" style="text-align:right"  ></br></br>
             <label for="produit">produit:</label>
               <select style="width:150px; height:25px;" id="produit" >
                 <?php
                    $sql="SELECT * FROM produit";
                    $req=mysqli_query($conn,$sql) or die(mysqli_error($conn));
                    $compt=mysqli_num_rows($req);
                    $d=array();
                    while($result=mysqli_fetch_assoc($req)){
                        $d[]=$result;
                     }
                   for($i=0;$i<$compt;$i++){
                 ?>
                  <option name="" value="<?php echo $d[$i]['libelle_prod']; ?>" ><?php echo $d[$i]['libelle_prod']; ?></option>
                 <?php
                   }

                 ?>
               </select>
               <label for="quantite">quantite:</label><input type="text" name="quantite" id="quantite" style="text-align:right"  >
               <label for="prix">prix(En Fcfa):</label><input type="text"  name="prix" id="prix"  style="text-align:right" disabled></br></br>
               <input type="button" onclick="ajouterLigne();" value="Enregistrer"/>
               </form>  

Pour information, en génral pour l'élément select d'un formulaire, on définir des valeurs différentes pour sa valeur et son label.
Donc dans ton cas, tu devrais modifier de cette manière :

<option value="<?php echo $d[$i]['id']; ?>"><?php echo $d[$i]['libelle_prod']; ?></option>

De cette manière, du côté de PHP, tu fais ta requête SQL en passant en condition que l'id corresponde à la valeur, soit :

$sql= "SELECT prix_unit FROM produit WHERE id = $valeur";

Puis ensuite, tu vérifies que tu récupères bien un résultat et tu renvois la valeur du champ prix_unit pour le javascript, dans lequel tu définiras la valeur pour l'input qui a l'id prix avec la valeur récupérée.

jaguar
Auteur

Merci Lartak vraiment pour la disponibilité!!
je l essaie de ce pas!!

hello,
petite parenthèse pour ton code :

<?php
  $sql="SELECT * FROM produit";
  $req=mysqli_query($conn,$sql) or die(mysqli_error($conn));                    
  while($result=mysqli_fetch_assoc($req)){
    echo '<option value="'.$result['id'].'">'.$result['libelle_prod'].'</option>';
  }  
?>

suffirait amplement à la place du count et des 2 boucles... non ?

jaguar
Auteur

Merci les gars j ai pu resoudre mon problème