Prbleme de "value" sur un <input=hidd

Résolu/Fermé
moicjm Messages postés 271 Date d'inscription mardi 16 octobre 2007 Statut Membre Dernière intervention 12 décembre 2012 - 28 oct. 2008 à 17:55
moicjm Messages postés 271 Date d'inscription mardi 16 octobre 2007 Statut Membre Dernière intervention 12 décembre 2012 - 29 oct. 2008 à 12:24
Bonjour,

J'ai fait une boucle pour afficher tous les élements de base de données et envoyer les modifiications via un formulaires. Normalement, le formulaire envoie sur la page ok.php les variables $_POST['traiter'] et $_POST['numeroid'].



Je ne comprends pas ce qui ne va pas dans mon 2nd <input=hidden>, car il n'envoie pas la valeur de $id :
<form method="post" action="ok.php">
<input type="hidden" name="traiter" value="o">
<p class="black"><?php echo $id;?></p>
<input type="hidden" name="numeroid" value="coucou <?php echo "$id"; ?>">
<input type="submit" value="Vu !"> 
<p class="black"><?php echo $id;?></p>
</form>


Sauriez vous me dire ce qu'il se passe.. Merci d'avance !

4 réponses

okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
28 oct. 2008 à 20:57
Il y a une grosse faute
tu a écrit
<input type="hidden" name="numeroid" value="coucou <?php echo "$id"; ?>">

au lieu d'écrire
<input type="hidden" name="numeroid" value="coucou <?php echo $id; ?>">

tu dois enlever les "
et personellement je préfère écrire comme ceci (avec la concaténation)
<input type="hidden" name="numeroid" value="<?php echo 'coucou '.$id ;?>">

Je trouve ça plus lisible mais bon, fais comme tu veux :p
0
moicjm Messages postés 271 Date d'inscription mardi 16 octobre 2007 Statut Membre Dernière intervention 12 décembre 2012 18
29 oct. 2008 à 09:42
Déja, merci pour la réponse.

J'avais en effet, entre temps, vu le coup des "..."
Malheureusement, ca ne marche pas mieux. C'est tres bizarre, et je ne comprends vraiment pas ce qu'il se passe.

En gros, il s'agit de lire, comme si c'était un livre d'or, les mails que les internautes me laissent en ligne.
J'ai fait une boucle pour appeler, donc, toute la base de donnée.

Le formulaire me sert à marquer les messages lus, comme étant lus. Tres pratique.

Le probleme : à chaque fois, au lieu de transmettre la variable $id qui vaut la valeur du numéro du message, cela renvoie la valeur du dernier message.

Exemple : j'ai les messages 1, 2, 3, ... , 23. Dans mon tableau, j'ai pour chaque message :
- le numéro du message
- le contenu du message
- une image vert ou rouge (pour marquer comme lu en vert ou non lu en rouge)
- le bouton "lu" pour marquer comme lu

Figurez vous que chaque message affiche le bon numéro :
<p class="black"><?php echo $id;?></p>

Mais que le formulaire n'envoie pas le numéro, mais à chaque fois le numéro 23.


Je mets le code :

<?php
if (isset($_POST['mail']))
	{
	$mail = $_POST['mail'];
	$mail = htmlspecialchars($mail); 
	$mail = strtolower($mail); 

	$sujet = $_POST['sujet'];
	$sujet = htmlspecialchars($sujet); 
	$sujet = strtolower($sujet); 

	$message = $_POST['message'];
	$message = htmlspecialchars($message); 
	$message = strtolower($message); 
	}

else 
	{
	$mail = "";
	$sujet = "";
	$message = "";
	$id= "";
	$traite = "";
	}





	mysql_connect("localhost", "root", "");
	mysql_select_db("test");

	$reponse = mysql_query("SELECT * FROM mecontacter ORDER BY id DESC") or die(mysql_error());
	

WHILE ($donnees = mysql_fetch_array($reponse))
{
	?>
	<br>

	<table class="table" border=0 bordercolor=#3F4C6B width=100% cellspacing=0 cellpadding=0>

	<tr>
		<td width="10%" align="center">
			<p class="black"><?php echo $donnees['id'];?></p>
		</td>

		<td width=25% align="center">
			<p class="edito2">De&nbsp;: </p>
		</td>

		<td align="center">
			<p class="adressemail"><?php echo $donnees['mail'];?></p>
		</td>
	</tr>

	<tr>
		<td width="10%" align="center">
			<?php 
			if ($donnees['traite'] == "o")
				{
				?> <img src="images/vert.gif"> <?php
				}

			else 		
				{
				?> <img src="images/rouge.gif"> <?php
				}
			?>
		</td>

		<td width=15%>
			<p class="edito2">Sujet&nbsp;: </p>
		</td>

		<td align="center">
			<p class="sujetmessage"><?php echo $donnees['sujet'];?></p>

		</td>
	</tr>

	<tr>
		<td width="10%" align="center">
			<?php
			if ($donnees['traite'] == "o")
				{ }

			else
				{
				$id = $donnees['id'];
				?>
				<p class="black"><?php echo $id;?></p>
				<form method="post" action="ok.php?numid=coucou<?php echo $id; ?>">
				<input type="hidden" name="traiter" value="o">
				<p class="black"><?php echo $id;?></p>
				<input type="hidden" name="numeroid" value="<?php echo 'coucou '.$id ;?>">
				<input type="submit" value="Vu !"> 
				<p class="black"><?php echo $id;?></p>
				<?php
				}
			?>
		</td>

		<td width=15%>
			<p class="edito2">Son message&nbsp;: </p>
		</td>

		<td align="center">
			<p class="sujetmessage"><?php echo $donnees['message'];?></p>
		</td>

	</tr>

	</table>


<?php
}

mysql_close();
?>
</form>

0
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
29 oct. 2008 à 10:11
Peut tu mettre le code de la page ok.php ?
0
moicjm Messages postés 271 Date d'inscription mardi 16 octobre 2007 Statut Membre Dernière intervention 12 décembre 2012 18
29 oct. 2008 à 10:35
Bjr,

il est très simple et me servait surtout à voir si les variables étaient bien transmises... (merci !)

<?php
if (isset($_POST['traiter']))
	{
	$traiter = $_POST['traiter'];
	$numid = $_GET['numid'];
	}

else
	{
	$traiter = "variable à fixer";
	$numid = "numero non transmis";
	}

?> 


La variable est : <?php echo $traiter; ?>
<br>
Le numéro est : <?php echo $numid; ?>
<br><br>
0
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126 > moicjm Messages postés 271 Date d'inscription mardi 16 octobre 2007 Statut Membre Dernière intervention 12 décembre 2012
29 oct. 2008 à 10:44
si j'ai bien compris pour
$numid = $_GET['numid'];
tu n'a pas le bon numéro?
0
moicjm Messages postés 271 Date d'inscription mardi 16 octobre 2007 Statut Membre Dernière intervention 12 décembre 2012 18 > okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014
29 oct. 2008 à 10:59
oui, au lieu de transmettre à la page ok.php le numéro du message (le 1 pour le message numéro 1, le 2 pour le message numéro 2, le 23 pour le message numéro 23), ca transmet le numéro 23 quoique je fasse. A chaque fois, ca transmets le 23.
0
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
29 oct. 2008 à 11:15
Je crois savoir pourquoi, il y a confusion dans tes donnée parce que tu a mis ton </form> après le while
essaye en fermant la balise form juste après ton formulaire
<p class="black"><?php echo $id;?></p>
				<form method="post" action="ok.php?numid=coucou<?php echo $id; ?>">
					<input type="hidden" name="traiter" value="o">
					<p class="black"><?php echo $id;?></p>
					<input type="hidden" name="numeroid" value="<?php echo 'coucou '.$id ;?>">
					<input type="submit" value="Vu !"> 
					<p class="black"><?php echo $id;?></p>
				</form>

oublie pas de supprimer le <form> tout en bas de ton code
0
moicjm Messages postés 271 Date d'inscription mardi 16 octobre 2007 Statut Membre Dernière intervention 12 décembre 2012 18
29 oct. 2008 à 11:20
ok, ca marche impec..

Mais je ne comprends pas, parce que j'avais lu qu'il fallait justement que je sorte le </form> de ma boucle...

UN GRAND MERCI !!!!!!!!!!!!
0
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
29 oct. 2008 à 11:28
Si tu le sors de la boucle, $id que tu enverra par POST sera le dernier (donc ici 23)
si tu le met a l'intérieur alors tu enverra celui que tu a sélectionné.

il y a une astuce qu'on utilise en mettant le </form> après la boucle, c'est pour envoyer plusieur information en même temps (ici plusieur numéro)
mais alors tu dois changer ton nom de l'input contenant le numéro par un nom + un chiffre que tu incrémente a chaque tour.

exemple
$n = 1;
	$numLine = 1;
	$prixtot = 0;
	
	if (isset($_SESSION['compteur'.$n]))
	{
		//Pagination
		include ('../includes/pagination.php');
		?>
		<form method="POST" action="">
		<table>
			<tr>
				<th>Nom</th>
				<th>Prix unitaire</th>
				<th>Quantité</th>
				<th>Prix total</th>
			</tr>
		<?php
		while (isset($_SESSION['compteur'.$n]))
		{
		?>
			<tr>
				<td><?php echo $_SESSION['nom_produit'.$n];?></td>
				<td><?php echo $_SESSION['prix'.$n].' €';?></td>
				<td><?php echo '<input type="text" style="text-align:center;" class="formulaire" name="nombre_produit' . $numLine . '" value="'.$_SESSION['nbr_achat'.$n].'" />';?></td>
				<td><?php echo $_SESSION['prix'.$n] * $_SESSION['nbr_achat'.$n].' €';?></td>
				<td><a href="?page=commander&mod=<?php echo $_SESSION['id_produit'.$n];?>"></a></td>
			</tr>
		<?php
		$prix = $_SESSION['prix'.$n] * $_SESSION['nbr_achat'.$n];
		$prixtot = $prix + $prixtot;
		
		//Incrémentation
		$numLine++;
		$n++;
		}
		?>
			<tr>
				<td></td>
				<td><input type="submit" name="recalculer" value="recalculer" /></td>
				<td>Total :</td>
				<td><?php echo $prixtot.' €';?></td>
			<tr>
			<tr>
				<td colspan="5"><input type="submit" name="valider" value="valider" /></td>
			</tr>
		</table>
		</form>

C'est le code que j'ai fais pour afficher un panier virtuel (j'utilise ici les SESSION)

lorsqu'on clique sur valider, on a donc : (sa se complique :p)
$n = 1;
			for ($numLine = 1; isset($_POST['nombre_produit'.$numLine]); $numLine++)
			{
				$id_produit = $_SESSION['id_produit'.$n];
				$nom_produit = $_SESSION['nom_produit'.$n];
				$prix = $_SESSION['prix'.$n];
				$nbr_achat = $_SESSION['nbr_achat'.$n];
				$taille = $_SESSION['taille'.$n];
				$couleur = $_SESSION['couleur'.$n];
				
				$result = mysql_query("INSERT INTO ...");
				
				$n++;
			}

voila en gros a quoi sert de mettre le "</form>" a l'extérieur :)

a+ :D
0
moicjm Messages postés 271 Date d'inscription mardi 16 octobre 2007 Statut Membre Dernière intervention 12 décembre 2012 18
29 oct. 2008 à 12:24
Merci beauocup tres interessant ta façon de faire, je vais la garder en mémoire pour une autre fois. Merci pour toutes ces explications!

JMS
0