"action" dynamique dans un formulaire

Eléphant du PHP | 57 Messages

26 avr. 2011, 14:36

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.

ViPHP
ViPHP | 2577 Messages

26 avr. 2011, 15:08

//------------------------------------------------------------------------------
// 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.

Eléphant du PHP | 57 Messages

26 avr. 2011, 15:37

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:

ViPHP
ViPHP | 2577 Messages

26 avr. 2011, 15:53

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.

Eléphant du PHP | 127 Messages

26 avr. 2011, 16:06

En PHP, le switch :
switch ($choix) {
  case 1: // blalbla
  break;
  default:
}

Eléphant du PHP | 57 Messages

26 avr. 2011, 16:12

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

ViPHP
xTG
ViPHP | 7331 Messages

26 avr. 2011, 16:24

Appelé .html ?
Ton serveur est-il configuré pour exécuter du code PHP sous l'extension HTML ?

Eléphant du PHP | 57 Messages

26 avr. 2011, 16:26

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:

ViPHP
ViPHP | 2577 Messages

26 avr. 2011, 16:33

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)

Eléphant du PHP | 57 Messages

26 avr. 2011, 16:45

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>

Mammouth du PHP | 881 Messages

26 avr. 2011, 17:49

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.
Soyez artisans de paix

Eléphant du PHP | 57 Messages

27 avr. 2011, 10:22

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 !

Eléphant du PHP | 57 Messages

27 avr. 2011, 13:42

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 ?

Mammouth du PHP | 881 Messages

27 avr. 2011, 17:23

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'); }....
Soyez artisans de paix

Eléphant du PHP | 57 Messages

28 avr. 2011, 09:59

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 =)