Récupérer id d'un <select><option>//php//html [Résolu/Fermé]

Signaler
Messages postés
641
Date d'inscription
vendredi 18 janvier 2008
Statut
Membre
Dernière intervention
9 mai 2016
-
 KIKOFF -
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

Messages postés
1292
Date d'inscription
mardi 24 janvier 2012
Statut
Membre
Dernière intervention
26 octobre 2014
224
$_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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

Messages postés
641
Date d'inscription
vendredi 18 janvier 2008
Statut
Membre
Dernière intervention
9 mai 2016
57
Ok merci pour tout je test quelque chose dans ce genre et je t'en redonne des nouvelles
Messages postés
641
Date d'inscription
vendredi 18 janvier 2008
Statut
Membre
Dernière intervention
9 mai 2016
57
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)...
Messages postés
1292
Date d'inscription
mardi 24 janvier 2012
Statut
Membre
Dernière intervention
26 octobre 2014
224
É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*/
}
?>
Messages postés
641
Date d'inscription
vendredi 18 janvier 2008
Statut
Membre
Dernière intervention
9 mai 2016
57
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 ?
Messages postés
1292
Date d'inscription
mardi 24 janvier 2012
Statut
Membre
Dernière intervention
26 octobre 2014
224
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>
Messages postés
641
Date d'inscription
vendredi 18 janvier 2008
Statut
Membre
Dernière intervention
9 mai 2016
57
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.
Messages postés
1292
Date d'inscription
mardi 24 janvier 2012
Statut
Membre
Dernière intervention
26 octobre 2014
224
ç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>';
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
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
Messages postés
641
Date d'inscription
vendredi 18 janvier 2008
Statut
Membre
Dernière intervention
9 mai 2016
57
je test ;D.
Messages postés
641
Date d'inscription
vendredi 18 janvier 2008
Statut
Membre
Dernière intervention
9 mai 2016
57
Oui ça fonctionne. ça garde bien l'article selectionné ! Mais ne veut toujours pas modifier =(
Messages postés
641
Date d'inscription
vendredi 18 janvier 2008
Statut
Membre
Dernière intervention
9 mai 2016
57
ç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 !