Récupérer id d'un <select><option>//php//html

Résolu
Bonjour, j'ai un ptit soucis de récupération de variable très simple sauf que je me creuse la tête pour trouver où est le problème ...

Tout d'abord j'ouvre mon form :
echo"<form action='modif.php' method='POST'>";

Je récupère des données via ma base de donnée :
$requete="select * from tarif";
$resultat=mysql_query($requete)

Après ca je fais :
echo "<select name="id_prix">
while($rows=mysql_fetch_array($resultat))
{
echo"<option value=' ".$rows['id_prix']." '>".rows['desc']." - ".rows['prix']."</option>"
}
echo"</select>";

tout simplement. Cela fonctionne car il me récupère bien tous les tarifs sauf que j'aimerais pouvoir modifier le prix d'un article.

Donc j'ai ajouté :
echo"<input type='text' name='prix'><input type='submit' name='modif' id='modif' value='Modifier'></form>";

Et donc quand je clic sur modifier rien ne se passe.. j'ai fait un echo $_POST['id_prix'] et $_POST['prix']... il m'affiche que le prix. et quand je fais un $rows['id_prix'] dans mon <option> il me les affiche...

A l'evennement submit j'effectue une requete simple :

$sql="UPDATE 'tarif' SET prix='$_POST['prix'] WHERE id_prix='$_POST['id_prix']";
$result=mysql_query($sql);

Je suis proche je le sent mais...
P'tite question : Auriez vous une meilleur solution pour modifier le prix d'un article ?
Merci pour votre aide

11 réponses

  1. ça y est, j'ai réussi. Après avoir gardé la selection j'ai modifier la requete en rajouter juste 2 ptits " et ça fonctionne . Merci pour ton aide !
    0
    1. Oui ça fonctionne. ça garde bien l'article selectionné ! Mais ne veut toujours pas modifier =(
      0
      1. ça devrait donner un truc du style :
        echo '<option value="'.$rows['id_prix'].'-'.$rows['prix'].'"';
        if($_POST['id_prix']==''.$rows['id_prix'].'-'.$rows['prix'].''){ echo "selected='selected'";}
        echo '>'.$rows['desc'].' - '.$rows['prix'].'</option>';
        
        0
        1. Bravo et félicitation le code est clair optimal y'a des virgules qui m'echape mais vraiment bravo et merci vraiment merci christophe du b68
          0
        2. J'ai jamais vu une tel incrémentation et pour un code simple mais en plus d'être bien pensée c'est optimale ment écrit bravo ça c du programmeur j'en prend plein la vu tu métrise ce langage
          Mais ou as tu appris cette syntaxe? quelle formation? autodidacte?
          J'aimerais prendre contact et te soumettre quelques lignes de code Je payerai si tu le veux
          christophe diebold alsace 68 adresse d.christophe68@ yahoo ou hotmail.fr Merci se serrais vraiment cool de prendre contacts a 1 de C 4 ' j'espere
          0
      2. oww... <option value=valeur ?? oui enfin "echo '<option value="'.$rows['id_prix'].'" renvoi une valeur différente à chaque fois. en l'occurrence 1,2,3,... un simple $rows['id_prix'] placer dans l'option affiche ceci. donc c'est bien que chaque id sont différent. Le truc c'est pourquoi il ne veut pas le garder. Pourtant à l'évenement submit je lui dit d'afficher l'id_prix et il me l'affiche ...

        Je vais essayé ce que tu m'as écris ci-dessus pour pouvoir garder l'option selectionnée.
        0
        1. Dans vos "option" de votre liste, il faut un élément de comparaison pour rester sur la sélection "selected='selected'" sinon à chaque submit la liste revient par défaut au début.

          <option value=valeur" <?php if($_POST['id_prix']=='valeur'){ echo "selected='selected'";}?>>***</option>
          0
          1. Je ne comprend pas, pourtant mon id s'affiche bien dans mon input ... j'ai testé ma requete dans phpmyadmin elle fonctionne parfaitement ... Sauf que ma selection reviens toujours par défaut à 0 après l'évenement submit

            Je ne sais pas quel est le problème ?
            0
            1. Étonnant... votre formulaire en version simplifié sur le principe de mon dernier poste :
              <form action="#" method="POST">
              <select name="id_prix" onchange="javascript:submit(this)"> 
              <option value="1-100" <?php if($_POST['id_prix']=='1-100'){ echo "selected='selected'";}?>>100</option>
              <option value="2-200" <?php if($_POST['id_prix']=='2-200'){ echo "selected='selected'";}?>>200</option>
              <option value="3-300" <?php if($_POST['id_prix']=='3-300'){ echo "selected='selected'";}?>>300</option>
              </select>
              <?php
              //à la sélection de la liste
              if(isset($_POST['id_prix'])){
              	echo 'Value = '.$_POST['id_prix'].'';
              	//on effectue un explode du value pour séparer l'id du prix
              	$explore = explode('-',$_POST['id_prix']);
              	echo '<pre>';
              	print_r($explore);
              	echo '</pre>';
              	//on case le tout dans des champs
              	echo 'id:<input type="text" name="id" value="'.$explore[0].'" READONLY><br/>
              prix:<input type="text" name="prix" value="'.$explore[1].'"><br/>
              <input type="submit" name="modif" id="modif" value="Modifier">';
              }
              ?>
              </form>
              
              <?php 
              //si action de valider
              if(isset($_POST['modif'])){
              	echo 'id='.$_POST['id'].'<br/>prix='.$_POST['prix'].'';
              	/*ici on a donc l'Update avec redirection vers la même page pour que la liste prenne en compte la modification du prix*/
              }
              ?>
              
              0
              1. L"idée de la remise du prix concernant l'article etait deja fait mais je ne l'avais pas rajouté à mon post. En tout cas celui ci me fait exactement la meme chose : lors de la selection, il revient toujours à la première valeur cependant il affiche le bon prix de l'article selectionné ..

                il ne récupère toujours pas la valeur correspondante (l'id correspondant)...
                0
                1. Ok merci pour tout je test quelque chose dans ce genre et je t'en redonne des nouvelles
                  0
                  1. $_POST['id_prix'] renvoie $rows['id_prix']
                    $_POST['prix'] ne peut rien renvoyé puisqu'il est en dehors de la boucle while et ne contient aucune valeur (value).

                    L'idée serait peut être d'ajouter le prix suite à l'id renvoyé de la value de boucle, d'effectuer un rechargement de la page à la sélection de la liste pour y afficher le champ de modification et de validation, etc...

                    En gros, non testé et juste pour l'idée :

                    <form action="modif.php" method="POST">
                    <?php
                    $requete="select * from tarif"; 
                    $resultat=mysql_query($requete);
                    
                    //rechargement de la page à la sélection
                    echo '<select name="id_prix" onchange="javascript:submit(this)">';
                    while($rows=mysql_fetch_array($resultat)) 
                    { 
                    	//insertion de l'id + prix dans le value séparé par un tiret
                    	echo '<option value="'.$rows['id_prix'].'-'.$rows['prix'].'">'.$rows['desc'].' - '.$rows['prix'].'</option>';
                    } 
                    echo '</select>'; 
                    //à la sélection de la liste
                    if(isset($_POST['id_prix'])){
                        //on effectue un explode du value pour séparer l'id du prix
                    	$explore = explode('-',$_POST['id_prix']);
                    	//$explore[0] = id_prix
                    	//$explore[1] = prix
                    	//on case le tout dans des champs
                    	echo '<input type="text" name="id" value="'.$explore[0].'">
                    <input type="text" name="prix" value="'.$explore[1].'">
                    <input type="submit" name="modif" id="modif" value="Modifier">';
                    }
                    echo '</form>';
                    //si action de valider
                    if(isset($_POST['modif'])){
                    	$sql="UPDATE tarif SET prix=$_POST['prix'] WHERE id_prix=$_POST['id']"; 
                    	$result=mysql_query($sql); 
                    }
                    ?>
                    
                    1