Problème transcription formulaire HTML en PHP

Stéphanie
Invité n'ayant pas de compte PHPfrance

24 mars 2009, 01:05

Bonjour,
j'ai un formulaire HTML qui devient + en + long (avec un code très répétitif !!) , et j'aurai voulu le réécrire en PHP donc je me suis lancée :D mais j'ai beaucoup de mal avec la syntaxe et les concaténations :(

Code : Tout sélectionner

<form id="wsform" method="post" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" onsubmit="return validateForm(this)"> <table id="box-table"> <thead> <tr> <th class="tab1 tab1sup" colspan="4">Commanditaire : <input type="text" name="nom" id="nom" class="commanditaire" /></th> </tr> <tr> <th class="tab1" colspan="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <input type="text" name="code" id="code" class="code" maxlength="8"/></th> </tr> <tr> <th class="separate" colspan="4">&nbsp;</th> </tr> <tr> <th class="tab2">Référence</th> <th class="tab2">Marques</th> <th class="tab2">Quantité</th> </tr> </thead> <tbody> ................................................................................. <tr> <td>0986478046</td> <td>Citroën,Peugeot</td> <td><input type="text" name="qte_0986478046" id="qte_0986478046" class="quantite" maxlength="5" /></td> </tr> <tr> <td>0986478370</td> <td>Citroën,Peugeot</td> <td><input type="text" name="qte_0986478370" id="qte_0986478370" class="quantite" maxlength="5" /></td> </tr> <tr> <td>0986478105</td> <td>Renault</td> <td><input type="text" name="qte_0986478105" id="qte_0986478105" class="quantite" maxlength="5" /></td> </tr> ................................................................................. </tbody> <tfoot> <tr> <td colspan="4"><input type="submit" name="envoi" value="Envoyer" /></td> </tr> </tfoot> </table> </form>
la partie répétitive que j'ai remplacée par :
<?php

$products = array(  array( Reference => '0986478046', Marques => 'Citroën,Peugeot'),
					array( Reference => '0986478370', Marques => 'Citroën,Peugeot'),
					array( Reference => '0986478105', Marques => 'Renault'),
					array( Reference => '0986478268', Marques => 'Citroën,Peugeot'),
					array( Reference => '0986478276', Marques => 'Renault'),
					array( Reference => '0986478246', Marques => 'Citroën,Peugeot'),
					array( Reference => '0986478273', Marques => 'Renault'),
					array( Reference => '0986478852', Marques => 'Audi,Volkswagen'),
					array( Reference => '0986478124', Marques => 'Renault'),
					array( Reference => '0986478868', Marques => 'Audi,Volkswagen')
					);

			for ($i=0; $i<10; $i++)
			{
				echo '<tr><td>'.$products[$i]['Reference'].'</td><td>'.$products[$i]['Marques'].'</td><td><input type="text" name="qte_'.$products[$i]['Reference'].'" id="qte_'.$products[$i]['Reference'].'" class="quantite" maxlength="5" /></td></tr>';					
			}
			?>

Lorsque je veux réafficher le formulaire (selon l'exemple de formulaire complexe développé par Cyrano), je m'emmêle les pinceaux au niveau de la syntaxe :
if (isset($_POST['envoi']))
{ 
	
	
	$nom                 = isset($_POST['nom'])                  ?    htmlentities(trim($_POST['nom']))            : ""; 
	$code                = isset($_POST['code'])                 ?    htmlentities(trim($_POST['code']))           : ""; 
	
	
	for ($i=0; $i<10; $i++)
	{
		$qte[$i] = 'qte_'.$products[$i]['Reference'];
		$qte[$i]      = isset($_POST[$qte[$i]])       ?    htmlentities(trim($_POST[$qte[$i]])) : ""; 


		
je n'arrive pas à traduire en PHP les conditions de test comme par exemple :
if ($qte_0986478046 == '')

Quelqu'un pourrait-il m'aider ?
Ai-je été assez claire dans l'explication de mon problème ? :?

ViPHP
AB
ViPHP | 5818 Messages

24 mars 2009, 02:26

Dans ton code php en phase de développement écris
if (isset($_POST['envoi']))
{ 
echo '<pre>';
echo '$_POST envoi = ';
print_r($_POST['envoi']);
echo '</pre>';

// suite de ton code ...
Tu verras mieux ce que te retourne ton tableau et sa structure et donc comment le manipuler

Invité
Invité n'ayant pas de compte PHPfrance

24 mars 2009, 09:50

Je te remercie AB.
Les (énormes!) conditions de test de mon formulaire, je n'arrive pas à les retranscrire, par exemple celle ci-dessous j'aimerai faire varier mon indice mais je ne sais pas comment m'y prendre (je suis débutante PHP :? )
 	if ($qte[0] == '' && $qte[1] == '' && $qte[2] == '' && $qte[3] == '' &&   $qte[4] == '' && $qte[5] == '' && $qte[6] == '' && $qte[7] == '' && $qte[8] == '' && $qte[9] == '') 


Eléphant du PHP | 254 Messages

24 mars 2009, 11:48

Salut,

Peut etre qu'une boucle serait ce qu'il te faut ?
$bOK=TRUE;
foreach ($qte as $key=>$value)
{
     if ($value != '')          $bOk = FALSE;
}
Il ne te reste plus qu'a test $bOK pour effectuer ton traitement

Stéphanie
Invité n'ayant pas de compte PHPfrance

24 mars 2009, 16:56

merci furiouslol, grâce à ta proposition j'ai réussi à retranscrire ma condition en faisant :

					$Qte_value = 0;
					for ($i=0; $i<$taille; $i++)
					{
						 if ($qte[$i] != '')          
						 $Qte_value = 1;
					} 
					if ($Qte_value == 0)
					{

Par contre pour la condition principale (qui englobe toutes les autres conditions) je ne sais pas comment faire :shock: ???
if ($nom == '' || $code == '' 
    || ($qte[0] == '' && $qte[1] == '' && $qte[2] == '' && $qte[3] == '' &&   $qte[4] == '' && $qte[5] == '') 
    || (!empty($qte[0]) && !(preg_match($qte_valid,$qte[0]))) 
    || (!empty($qte[1]) && !(preg_match($qte_valid,$qte[1]))) 
    || (!empty($qte[2]) && !(preg_match($qte_valid,$qte[2]))) 
    || (!empty($qte[3]) && !(preg_match($qte_valid,$qte[3]))) 
    || (!empty($qte[4]) && !(preg_match($qte_valid,$qte[4]))) 
    || (!empty($qte[5]) && !(preg_match($qte_valid,$qte[5]))) )

Eléphant du PHP | 254 Messages

24 mars 2009, 19:14

La première boucle était pour simuler une succession de &&, pour faire l'équivalent pour le OU logique, il te suffit d'incrémenter un compteur, initialement a 0. A la fin de ta boucle si celui ci est supérieur strictement a 0 c'est qu'au moins une de tes condition a été validée :
$bOk=0;
foreach ($qte as $key=>$value)
{
     if (!empty($value) && !(preg_match($qte_valid,$value)))
          $bOK++;
}

If ($bOK>0)
//suite du traitement

Stéphanie
Invité n'ayant pas de compte PHPfrance

25 mars 2009, 09:55

Merci bien furiouslol, je comprends mieux le principe.
Mais je n'ai pas compris l'histoire de l'incrémentation du compteur : passer une valeur (1 par exemple) à la variable $bOk si ma condition est vérifiée au moins 1 fois suffirait, non ?
$bOk=0;
foreach ($qte as $key=>$value)
{
     if (!empty($value) && !(preg_match($qte_valid,$value)))
          $bOk=1;
}

If ($bOk==1)
//suite du traitement

Eléphant du PHP | 254 Messages

25 mars 2009, 11:26

Oui tu pourrais tout aussi bien sortir de la boucle for dès que tu as trouvé une des conditions

Stéphanie
Invité n'ayant pas de compte PHPfrance

25 mars 2009, 14:12

C'est OK.
Merci bien furiouslol pour ton aide.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

25 mars 2009, 16:53

Modération :
Puisque ta question est résolue, j'ajoute le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.

Tu peux réaliser cette opération toi-même
en cliquant sur le bouton Image qui s'affiche en haut à gauche de ce sujet
si tu as posté le 1er message en tant que membre (inscrit et identifié).

Alors... inscris-toi !!! ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...