Page 1 sur 2

"action" dynamique dans un formulaire

Posté : 26 avr. 2011, 14:36
par Pauloscorps
Bonjour tout le monde,

Actuellement, j'essaye de créer une liste déroulante dynamique, qui redirige vers des pages différentes selon le choix fait.
Voici le code que j'ai mis en place :

Code : Tout sélectionner

//------------------------------------------------------------------------------ // VARIABLES RECUPEREES //------------------------------------------------------------------------------ $choix = $_POST['choix']; $submit = $_POST['submit']; //------------------------------------------------------------------------------ if (isset($submit)) { if ($choix = '1') { echo('contact/nous-contacter.php'); } else if ($choix = '2') { header('Location : contact/devis-impression.php'); } else if ($choix = '3') { header('Location : contact/devis-textile.php'); } else if ($choix = '4') { header('Location : contact/devis-objets-pub.php'); } } ?> "> <table class="contact"> <tr> <td bgcolor="#000" colspan="1">Selectionner l'objet de votre demande :</td> <td colspan="1"> <select name="choix"> <option value="1" selected="selected">Nous contacter</option> <option value="2">Devis impression</option> <option value="3">Devis textile</option> <option value="4">Devis objets pub</option> </select> </td> </tr> <tr> <td><input type="submit" value="Ok" name="submit"></td> </tr> </table> </form>
[ Je ne l'ai toujours pas découpé en deux, ne me faites pas la remarque ^^].
En fait, il semblerait que cela ne fonctionne pas.
J'obtiens l'erreur suivante :

Code : Tout sélectionner

Notice: Undefined index: choix in C:\wamp\www\SMTK\contact.php on line 16 Call Stack #TimeMemoryFunctionLocation 10.0006371568{main}( )..\contact.php:0
J'ai essayé de ne plus déclarer les variables $choix et $submit, et de les écrire directement. L'erreur ne s'affichait plus mais le code ne fonctionnait tout de même pas.
Comme vous le constaterez, j'ai tenté des echo et des headers à tout va, mais je n'ai pas eu de succès avec l'un ou l'autre x).

Si quelqu'un pouvait donc m'aider à résoudre ce problème, ce serait super =)

Merci d'avance,
Pauline.

Re: "action" dynamique dans un formulaire

Posté : 26 avr. 2011, 15:08
par Mazarini
//------------------------------------------------------------------------------
// VARIABLES RECUPEREES
//------------------------------------------------------------------------------
$choix = $_POST['choix'];
$submit = $_POST['submit'];
//------------------------------------------------------------------------------

   if (isset($submit))
...
à remplacer par
   if (isset($_POST['choix']))
//------------------------------------------------------------------------------
// VARIABLES RECUPEREES
//------------------------------------------------------------------------------
$choix = $_POST['choix'];
...
C'est la variable $_POST['choix'] dont il faut tester l'existence et ceci avant de l'utiliser.

Re: "action" dynamique dans un formulaire

Posté : 26 avr. 2011, 15:37
par Pauloscorps
Bonjour et merci de ta réponse. Effectivement, je n'ai plus d'erreurs désormais. Par contre, le formulaire ne provoque toujours pas l'effet escompté...
Voici ma nouvelle boucle :
<form method="post" action="

<?php
if (isset($_POST['choix']))
{
	$choix = $_POST['choix'];
	
	if (isset($submit))
	{
		$submit = $_POST['submit'];
		if ($choix = '1')
		{
			echo 'contact/nous-contacter.php';
		}
		else if ($choix = '2')
		{
			echo 'contact/devis-impression.php';
		}
		else if ($choix = '3')
		{
			echo 'contact/devis-textile.php';
		}
		else if ($choix = '4')
		{
			echo 'contact/devis-objets-pub.php';
		}
	}
}
?>
">
Si tu pouvais encore m'aider un p'tit peu... :mrgreen:

Re: "action" dynamique dans un formulaire

Posté : 26 avr. 2011, 15:53
par Mazarini
Bonjour,

Pourquoi avoir remplacé les header('Location : contact/devis-impression.php'); de la première version ?

A priori, un fichier index.php qui contient :
if (isset($_POST['choix']))
{
   $choix = $_POST['choix'];
} 
else
{
  $choix = 1; // ou ta page par défaut
}

select case $choix
   case 1:
      header....;
      break;
  case 2:
      header....;
      break;
  othercase:
      header....; // redirection par défaut
      break;
Un fichier menu.php avec ton formulaire mais avec action="index.php" et dans chaque page, tu fais include 'menu.php';

Il faut vérifier la syntaxe php exact de select case.

Re: "action" dynamique dans un formulaire

Posté : 26 avr. 2011, 16:06
par nhachet
En PHP, le switch :
switch ($choix) {
  case 1: // blalbla
  break;
  default:
}

Re: "action" dynamique dans un formulaire

Posté : 26 avr. 2011, 16:12
par Pauloscorps
Merci beaucoup, très bonne idée le switch, je n'y avais pas songé. En revanche, je crois que cela ne marche toujours pas ^^.
A priori, "select($choix) case" n'existe pas. Je me suis donc servi de la boucle "switch" de cette façon :
...
if (isset($_POST['choix']))
{
	$choix = $_POST['choix'];
}
else
{
	$choix = 1; // ou ta page par défaut
}

switch($choix)
{
	case 1:
		header('Location : contact/nous-contacter.php');
		break;
	case 2:
		header('Location : contact/devis-impression.php');
		break;
	case 3:
		header('Location : contact/devis-textile.php');
		break;
	case 4:
		header('Location : contact/devis-objets-pub.php');
		break;
}
		include('includes/liste_contact.html');
		include('includes/footer.php');
?>

Et le formulaire (maintenant appelé liste_contact.html), reste inchangé.
D'où peut venir mon erreur ? #-o

Re: "action" dynamique dans un formulaire

Posté : 26 avr. 2011, 16:24
par xTG
Appelé .html ?
Ton serveur est-il configuré pour exécuter du code PHP sous l'extension HTML ?

Re: "action" dynamique dans un formulaire

Posté : 26 avr. 2011, 16:26
par Pauloscorps
Il n'y a pas de code php dans mon formulaire ;)
<br/>
<h3>COMMENT NOUS CONTACTER ?</h3>
<p>des adresses</p>

<form action="contact.php" method="post">
	<table class="contact">
		<tr>
			<td bgcolor="#000" colspan="1">Selectionner l'objet de votre demande :</td>
			<td colspan="1">
				<select name="choix">
					<option value="1" selected="selected">Nous contacter</option>
					<option value="2">Devis impression</option>
					<option value="3">Devis textile</option>
					<option value="4">Devis objets pub</option>
				</select>
			</td>
			<td colspan="1"><input type="submit" value="Ok" name="submit"></td>
		</tr>
	</table>
</form>
Je l'ai quand même renommé en .php, pour faire plaisir :lol:

Re: "action" dynamique dans un formulaire

Posté : 26 avr. 2011, 16:33
par Mazarini
Tout d'abord mes excuses pour le switch.

Ensuite pour compléter xTG
$select[1] = "";
$select[2] = "";
$select[3] = "";
$select[4] = "";
$select[$choix] = ' selected="selected';

et dans le formulaire à renommer en .php :
<option value="1"<?PHP echo $select[1]; ?>>Nous contacter</option>
(faire la même chose pour les options 2, 3 et 4)

Re: "action" dynamique dans un formulaire

Posté : 26 avr. 2011, 16:45
par Pauloscorps
Hum, merci. J'ai fais comme ceci mais ca ne marche pas. Ma liste déroulante bug avec ce code (une catégorie saute ou une option est vide, et malheureusement, l'effet escompté ne l'est pas :( =.

Voici mon code :

contact.php
<?php
	$metatags = "blabla";  // à changer
	include('includes/header.php');

if (isset($_POST['choix']))
{
	$choix = $_POST['choix'];
}
else
{
	$choix = 1;
}

if (isset($_POST['submit']))
{

	$select[1] = "header('Location : contact/nous-contacter.php')";
	$select[2] = "header('Location : contact/devis-impression.php')";
	$select[3] = "header('Location : contact/devis-textile.php')";
	$select[4] = "header('Location : contact/devis-objets-pub.php')";
	$select[$choix] = ' selected="selected';
}
		include('includes/liste_contact.php');
		include('includes/footer.php');
?>

liste_contact.php :
<br/>
<h3>COMMENT NOUS CONTACTER ?</h3>
<p>adresses</p>

<form action="http://localhost/smtk/contact.php" method="post">
	<table class="contact">
		<tr>
			<td bgcolor="#000" colspan="1">Selectionner l'objet de votre demande :</td>
			<td colspan="1">
				<select name="choix">
					<option value="1" <?PHP echo $select[1]; ?>>Nous contacter</option>
					<option value="2" <?PHP echo $select[2]; ?>>Devis impression</option>
					<option value="3" <?PHP echo $select[3]; ?>>Devis textile</option>
					<option value="4" <?PHP echo $select[4]; ?>>Devis objets pub</option>
				</select>
			</td>
			<td colspan="1"><input type="submit" value="Ok" name="submit"></td>
		</tr>
	</table>
</form>

Re: "action" dynamique dans un formulaire

Posté : 26 avr. 2011, 17:49
par Patriboom
Puis-je m'ingérer?

Si ta liste déroulante, au lieu d'avoir des valeur numérique que tu trateras ensuite avait les valeurs finales, tu épargnerais une étape. En code html ça donne:
<select name="choix">
                                        <option value="<?PHP echo $select[1]; ?>">Nous contacter</option>
                                        <option value="<?PHP echo $select[2]; ?>">Devis impression</option>
                                        <option value="<?PHP echo $select[3]; ?>">Devis textile</option>
                                        <option value="<?PHP echo $select[4]; ?>">Devis objets pub</option>
                                </select>
Tu pourrais pousser la chose plus loin et monter tout cela dans un tableau, puis l'afficher HTML par une boucle, ainsi:
<?php
$select[1] = Array("contact.htm", "Nous contacter");
$select[2] = Array("impression.html", "Devis impression");
$select[3] = Array("textile.php", "Devis textile");
$select[4] = Array("publicite.htm", "Devis objets pub");
$select[$choix][2] = ' selected="selected';

?>

Puis ii y a ici ton code html de page.
Quand vient temps d'afficher ta liste déroulante:


<?php
foreach ($select as $value) {
        echo '<option value="'.$value[0].'" '.$value[2].'>'.$value[1].'</option'>;
}
?>
Puisque ta question initiale visait à faire changer la valeur de "action" en fonction du choix fait dans ton menu déroulant, tu peux aussi songer à une solution comme
<form id="MonFormulaire" action="toto.htm">
<select id="LeMemeQueCiHaut" onchange="document.getElementById('MonFormlaire').action.value = this.value>
blabla_ta_liste_optionns
</select>
</form>


S'cusez l'insértion impromptue. J'essaie seulement d'aider un peu.

Re: "action" dynamique dans un formulaire

Posté : 27 avr. 2011, 10:22
par Pauloscorps
Bonjour,
Merci de ta réponse, Patriboom, mais j'ai testé ton code et a priori ca ne fonctionne pas.
J'ai une quantité de "undefined offset", de "Invalid argument supplied for foreach()" et la variable select est toujours en "undefined index".
Résultat, ca commence a me barber !

Re: "action" dynamique dans un formulaire

Posté : 27 avr. 2011, 13:42
par Pauloscorps
Je reviens vers vous pour un dernier petit coup de pouce, parce que j'y suis presque là !
Finalement, j'ai repris mon code de départ, et l'ai agrémenté avec un peut de JavaScript (même si j'aime pas çà).

contact.php
<?php
	$metatags = "blabla";  // à changer
	include('includes/header.php');

if (isset($_POST['choix']))
{
	if (isset($_POST['submit']))
	{
		$choix = $_POST['choix'];
		if ($choix = "contact/nous-contacter.php") {
			header('Location : contact/nous-contacter.php');
		}
		else if ($choix = "contact/devis-impression.php") {
			header('Location : contact/devis-impression.php');
		}
		else if ($choix = "contact/devis-textile.php") {
			header('Location : contact/devis-textile.php');
		}
		else if ($choix = "contact/devis-objets-pub.php") {
			header('Location : contact/devis-objets-pub.php');
		}
	}
}
	include('includes/liste_contact.php');
	include('includes/footer.php');
?>
et le formulaire liste_contact.php
<br/>
<h3>COMMENT NOUS CONTACTER ?</h3>
<p>EN SAVOIE : Z.A. Plan Cumin - 73800 Les Marches<br/>
EN HAUTE SAVOIE : 825 route de Sallanches - 74920 Combloux <br/>
tél : 04 79 44 86 10 - 04 50 96 10 64 fax : 09 72 15 71 60 - email : [email protected]</p>

<form action="contact.php" method="post">
	<table class="contact">
		<tr>
			<td bgcolor="#000" colspan="1">Selectionner l'objet de votre demande :</td>
			<td colspan="1">
				<select name="choix">
					<option value="contact/nous-contacter.php">Nous contacter</option>
					<option value="contact/devis-impression.php">Devis impression</option>
					<option value="contact/devis-textile.php">Devis textile</option>
					<option value="contact/devis-objets-pub.php">Devis objets pub</option>
				</select>
			</td>
			<td colspan="1"><input type="button" value="Ok" onclick="document.location = '<?php echo $choix;?>';"></td>
		</tr>
	</table>
</form>
Donc là ca fonctionne très bien, j'ai juste un problème, c'est que n'importe quel élément sur lequel je clique, je suis redirigée vers la page nous-contacter.php.
Quelqu'un sait-il d'où le problème provient ?

Re: "action" dynamique dans un formulaire

Posté : 27 avr. 2011, 17:23
par Patriboom
Comme tu vérifies l'existence de $_POST['choix'], c'est aussi la valeur de $_POST['choix'] qu'il te faut traiter.
De plus, le simple = attribue une valeur. Pour comparer, il faut le double ==
Ce qui donnera:

Code : Tout sélectionner

if (isset($_POST['submit'])) { $choix = $_POST['choix']; if ($_POST['choix'] == "contact/nous-contacter.php") { header('Location : contact/nous-contacter.php'); } else if ($_POST['choix'] == "contact/devis-impression.php") { header('Location : contact/devis-impression.php'); }....

Re: "action" dynamique dans un formulaire

Posté : 28 avr. 2011, 09:59
par Pauloscorps
Merci de ta réponse Patriboom, mais j'ai encore des problèmes. Décidèmment, je ne vais jamais en voir le bout. :evil:
Voici un screenshot de ma page contact.php à l'heure actuelle :
Image

Donc on peut voir deux erreurs :
- La première est que la variable $choix n'est pas définie. Or, je ne comprends pas pourquoi étant donné sur ce formulaire est inclus dans la page contact.php qui l'a définie. ???
- J'ai une espèce de bug là ou j'ai fais un rond rouge. Apparemment, il vient de ma ligne :
<td colspan="1"><input type="button" value="Ok" onclick="document.location = '<?php echo $choix;?>[color=#FF0000]';"/>[/color]</td>
Je me demande si cela ne vient pas du tableau d'erreur que génère Wamp non ?*

Merci de vos réponses en tout cas =)