8791 sujets

Développement web côté serveur, CMS

Bonjour,

Suite du sujet Panier ...
Voilà j'ai un problème pour récupérer deux types de variables : les variables d'un formulaires et celles du code PHP.
J'ai un bouton qui s'appelle Rafraichir qui appelle ma page panier.php afin de recalculer le prix en fonction des quantités.
Un second bouton est Valider la Commande.
Celui-ci envoie des informations à la page commande.php
Ces informations sont : $nbArticles et $total_achat
Mais lors de la page panier un achat peut nécessiter un code promo, l'utilisateur est donc censé rentrer ce code.
Le truc c'est que c'est un formulaire, mais comme j'envoie les données de cette façon à la page commande :

<input type=\"submit\" name=\"action\" value=\"Commander&amp;nbArticles=$nbArticles&amp;total_achat=$total_achat'\" />";

La page commande ne connait pas les champs du formulaire précédemment rempli.
Je ne sais pas comment faire pour associer mes variables PHP et ma variable issu du formulaire et les envoyer directement à la page commande.php

C'est peut-être un peu plus clair que dans l'ancien post ...
Merci de votre attention.
Salut,

les variables récupérables après soumission d'un formulaire sont celles du formulaire en question (si ! si ! Smiley langue ). Du coup si tu as besoin d'en faire passer plus que celles qui sont à saisir par le visiteur tu peux utiliser des éléments INPUT de type hidden : ils ne seront pas visibles dans le formulaire mais seront néanmoins soumis.
Je n'ai pas tout compris ...
Le truc c'est que mon champ doit être visible c'est pas comme un champ ID par exemple.
Là c'est un champ qui doit être remplis par l'utilisateur sur cette page : panier.php puis transmis à commande.php.
Donc si je met un truc du genre :
<input type="hidden" name="action" value="code"/>
Je ne vois pas comment faire pour que ma page ait justement le code saisit afin de l'envoyer à commande.php
Il faudrait que le champ en hidden puisse transmettre la valeur lorsqu'on clique sur le bouton vérifier commande.
Ah OK : j'avais mal compris. En même temps ça serait plus clair avec tout le code plutôt qu'avec une seule ligne. Smiley cligne

if (creationPanier())
	{
	   $nbArticles=count($_SESSION['panier']['IdBonbons']);
	   if ($nbArticles <= 0)
	   echo "<tr><td colspan='4'>Votre panier est vide </td></tr>";
	   else
	   {
	      for ($i=0 ;$i < $nbArticles ; $i++)
	      {

	         echo "<tr>";
	         echo "<td>".htmlspecialchars($_SESSION['panier']['IdBonbons'][$i])."</td>";
			 echo "<td>".htmlspecialchars($_SESSION['panier']['billet'][$i])."</td>";
			 		 echo "<td>".htmlspecialchars($_SESSION['panier']['Emplacement'][$i])."</td>";
			 if($_SESSION['panier']['Code'][$i] == "Oui")
			 {
				[b]echo " <td><input type=\"text\" size=\"10\" name=\"Code\" value=\"\" \></td> ";[/b]
			 }
			 else
			 echo " <td><input type=\"text\" size=\"10\" readonly=\"readonly\" name=\"Code\" value=\"Aucun code\" \></td> ";
	         echo "<td><input type=\"text\" size=\"4\" name=\"choix[]\" value=\" ".htmlspecialchars($_SESSION['panier']['qteBonbons'][$i])."\" /></td>";
	         echo "<td>".htmlspecialchars($_SESSION['panier']['prixBonbons'][$i])."</td>";
			 echo "<td><a href=\"".htmlspecialchars("index.php?page=panier&action=suppression&id=".rawurlencode($_SESSION['panier']['IdBonbons'][$i]))."\"><img src=\"/Images/b_drop.png\" alt=\"Supprimer\"/></a></td>";
	         echo "</tr>";
	      }

	      echo "<tr><td colspan=\"4\"> </td>";
		  echo "<td colspan=\"3\">Total de vos achats : ".MontantGlobal()." € </td>";
		  $total_achat = MontantGlobal(); //On récupère le prix total
		  echo "</tr>";
	   }
		echo"	</table>";
		echo"	<br />";
		echo"	<div align=\"center\">";
		echo"	<input type=\"submit\" value=\"Rafraichir\" />";
		echo"	<input type=\"submit\" value=\"Commander\" onclick=\"document.form.action='index.php?page=commande&nbArticles=$nbArticles&total_achat=$total_achat'\" />";
		echo"	<input type=\"hidden\" name=\"action\" value=\"refresh\"/>";
		echo"	</div>";
	}


C'est la valeur de la ligne en gras qu'il faut que je passe en paramètre de :

echo"	<input type=\"submit\" value=\"Commander\" onclick=\"document.form.action='index.php?page=commande&nbArticles=$nbArticles&total_achat=$total_achat'\" />";
Hem... ton code est difficile à lire !

Je ne comprends toujours pas ce que tu veux faire mais ce que je peux déjà dire :
* si dans une boucle tu appelles toujours un champ de la même façon ça va être difficile de récupérer toutes les valeurs : ce n'est donc pas name="code" mais name="code[]"
* qu'est-ce que c'est que cette idée d'avoir plusieurs INPUT submit dont l'un est en fait bloqué par un onclick JavaScript pour (je suppose) appeler un autre formulaire ? Quoi qu'il en soit c'est normal que tu ne t'y retrouves pas et je te suggère de commencer par faire fonctionner ton code sans JavaScript et seulement ensuite de rajouter une surcouche en JS. Smiley murf
Décidément je ne suis vraiment pas clair Smiley decu
J'ai corrigé sur le nom de l'input.

En fait le submit refresh permet de réaliser l'action définie par le form c'est à dire recharger la page panier.php, la valeur $action sera alors = refresh et ça va recalculer le prix en fonction de la quantité d'article saisie. (utilise si l'utilisateur modifie la quantité dans la page panier.php)

Ensuite le second submit avec le javascript c'est une astuce que j'avais trouvée pour contrecarrer l'action principale du form.

Ainsi en cliquant sur commander on ne lancer pas l'action du form mais la valeur de l'action définie grâce au javascript. Comme ça la page commande.php récupère avec deux $_GET les variables PHP envoyées dans l'adresse.

Jusque là le code marche, il n'y a pas de problème.

Là ou ça merde c'est que cette fois-ci je demande au client de saisir un code promo pour certains articles.
Il le rentre sur la page panier.php.
Et faut qu'il soit vérifier dans la page commande.php car s'il est faux je dois stopper la commande.
Et c'est pour transmettre cette valeur du code saisit que je bloque...
En effet la cette dernière variable est une variable issue d'un formulaire et non une variable PHP donc je ne peux pas la transmettre dans l'URL.
Et si je fais un $_POST dans ma page commande.php il ne la trouve pas car dans le form c'est pas commande.php qui est spécifié mais panier.php.

Je ne sais pas si c'est plus clair ?

EDIT : Je viens de me rendre compte que je ne pourrais pas, (dans le cas où j'arriverais à faire fonctionner ce que j'ai expliqué ci-dessus), récupérer le code saisit plusieurs billet...
Du coup je ne sais pas du tout quand faire ma vérification Smiley decu
Modifié par Petit Rasta (21 Mar 2010 - 00:43)