Page 1 sur 1

Problème transcription formulaire HTML en PHP

Posté : 24 mars 2009, 01:05
par Stéphanie
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 ? :?

Posté : 24 mars 2009, 02:26
par AB
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

Posté : 24 mars 2009, 09:50
par Invité
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] == '') 


Posté : 24 mars 2009, 11:48
par furiouslol
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

Posté : 24 mars 2009, 16:56
par Stéphanie
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]))) )

Posté : 24 mars 2009, 19:14
par furiouslol
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

Posté : 25 mars 2009, 09:55
par Stéphanie
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

Posté : 25 mars 2009, 11:26
par furiouslol
Oui tu pourrais tout aussi bien sortir de la boucle for dès que tu as trouvé une des conditions

Posté : 25 mars 2009, 14:12
par Stéphanie
C'est OK.
Merci bien furiouslol pour ton aide.

Posté : 25 mars 2009, 16:53
par Ryle
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 !!! ;)