Formulaire "intelligent"

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Formulaire "intelligent"

par AB » 11 févr. 2009, 12:47

En phase de développement pour mieux comprendre le post retourné fais un
echo '<pre>';
print_r($_POST);
echo '</pre>';

par lacfab » 11 févr. 2009, 08:46

Ben pas trop justement ... ce qui complique un peu la chose ;) mais bon je vais m'y remettre et finir par y arriver !

par Hywan » 08 févr. 2009, 22:39

Sais-tu utiliser les boucles et les tableaux multi-dimensionnels ?

par toom's » 06 févr. 2009, 13:24

un compteur $i qui s'incrémente au fur et a mesure de ta boucle nan?

$_POST['caracteristique'][$i] ???

par lacfab » 06 févr. 2009, 13:14

Ok mais je fais comment pour lui dire de prendre le array suivant ?

$_POST['caracteristique']++ ?? (je sais que ce que je viens d'écrire c'est nimp :roll: )

par Hywan » 05 févr. 2009, 17:01

Au passage, c'est @type et pas @tpye, mais c'est pas important ;-).

par mere-teresa » 05 févr. 2009, 16:49

Bon allez, on va avancer un peu.
En HTML, au niveau du name des input, tu mets des crochets, et en PHP, tu vas pouvoir récupérer tous tes input dans un tableau.

Exemple

Code : Tout sélectionner

Caractéristique 1 : <input name="caracteristique[]" tpye="text" /> Caractéristique 2 : <input name="caracteristique[]" tpye="text" /> Caractéristique 3 : <input name="caracteristique[]" tpye="text" />
Ensuite en PHP, tu auras
$_POST['caracteristique'][0]
$_POST['caracteristique'][1]
$_POST['caracteristique'][2]
Pour les + et - qui ajoutent un champ , il faut voir du côté de Javascript. Ou tu peux faire tout ça en PHP , en PHP tu as un exemple de ce système dans l'application PHPMyAdmin sinon

par Hywan » 05 févr. 2009, 16:33

Hey :),

Je crois que tu t'embrouilles pour pas grand chose. Notre chère et tendre Mere T. t'a donné la solution, à savoir utiliser les tableaux de formulaire avec name="aname[]".
Tu peux donc boucler sur tes champs avec une instruction foreach (par exemple …). Dans cette boucle, on y met quoi ? Tu as plusieurs solutions. La plus sale consiste à faire un test d'existence : on compte le nombre de ligne en SQL et si supérieur à zéro alors …, sinon …. La plus propre consiste à le faire directement en SQL sans faire des allers et retours entre le serveur applicatif et de base de données (typiquement PHP et SQL). Pour ça, tu as les fonctions, les procédures et ce genre de joyeusetés qu'on trouve dans différents SGBDR (Système de Gestion de Bases de Données Relationnelles). Tu travailles avec MySQL visiblement, donc regarde dans la doc' ce que tu as à disposition.

par lacfab » 03 févr. 2009, 02:25

Bon voici mon code :
include ("config.php");
switch ($_GET['page']){
       default:
	      echo "<br><br><center>";
// Test si des enregistrements existent sur la palissade sélectionnée.
		  $affiche = mysql_query("SELECT wt_stockschema_id_palissade FROM WALLTEK_STOCKSCHEMA WHERE wt_stockschema_id_palissade='".$_SESSION['superpal']."'");
		  $test = mysql_num_rows($affiche);
				
		  // Affichage d'une liste d'insert vierge.
          if ($test =="0"){		  
		      echo "<br><form method='post' name='formulaire' action='BO_palissades_schema.php?page=ajouter'>
              <table border='0' class=texte align=center>                
			   <tr>
			     <td><input type=text size=2 maxlength=1 name='input1'> 
				 <input type=text size=2 maxlength=1 name='input2'> 
				 <input type=text size=2 maxlength=1 name='input3'>
..........
				 <input type=text size=2 maxlength=1 name='input10'> 
				 </td>
			   </tr>
		    </table><br>
			<input type='submit' value='Valider ce schéma technique'>
            </form>";
		  }
		  
		  // Modification des élements.
		  else{
		     echo "<br><form method='post' name='formulaire' action='?page=modifier'>";
		  	 for($i=1; $i<=$test; $i++){
			     $input = mysql_fetch_array(mysql_query("SELECT * FROM WALLTEK_STOCKSCHEMA WHERE wt_stockschema_id_palissade='".$_SESSION['superpal']."' AND wt_stockschema_position='".$i."'"));
			     echo "<input type=text size=2 maxlength=1 name='input".$i."' value='".$input['wt_stockschema_id_module']."'> ";
			 }			  
			echo "<br><a href='?page=modifier&action=moins' target='b'>-</a> <a href='?page=modifier&action=plus' target='b'>+</a> ";
			 echo "<br><br>
			<input type='submit' value='Valider ce schéma technique'>
            </form>";
			for($i=1; $i<=$test; $i++){
			     $img = mysql_fetch_array(mysql_query("SELECT * FROM WALLTEK_STOCKSCHEMA WHERE wt_stockschema_id_palissade='".$_SESSION['superpal']."' AND wt_stockschema_position='".$i."'"));
			     echo "<img src='graphs/BO_schema_".$img['wt_stockschema_id_module'].".jpg' border=0>";
			 }
		  }
       break;
	   
	   
	   
	   
	   
	   case "ajouter":	       
	       if ($_POST['input1']!=""){
		   $req1 = mysql_query("INSERT INTO WALLTEK_STOCKSCHEMA (wt_stockschema_id_palissade, wt_stockschema_id_module, wt_stockschema_position) VALUES('".$_SESSION['superpal']."','".$_POST['input1']."','1')")  or die ('ERREUR INSERT 1<br>'. mysql_error());    
                if ($_POST['input2']!=""){
		        $req2 = mysql_query("INSERT INTO WALLTEK_STOCKSCHEMA (wt_stockschema_id_palissade, wt_stockschema_id_module, wt_stockschema_position) VALUES('".$_SESSION['superpal']."','".$_POST['input2']."','2')")  or die ('ERREUR INSERT 2<br>'. mysql_error());    
                  ..........................................
											    if ($_POST['input10']!=""){
		                                        $req10 = mysql_query("INSERT INTO WALLTEK_STOCKSCHEMA (wt_stockschema_id_palissade, wt_stockschema_id_module, wt_stockschema_position) VALUES('".$_SESSION['superpal']."','".$_POST['input10']."','10')")  or die ('ERREUR INSERT 10<br>'. mysql_error());              
                        
		   }}}
		   echo "<meta http-equiv='refresh' content='0; URL=BO_palissades_schema.php'>";
	   break;
          case "modifier":
          break;
}
J'ai peut etre pas eu une bonne idée d'imbriquer les if pour ma page d'ajout mais bon y en a que 10 alors ça passera comme ça ;o)

par mere-teresa » 02 févr. 2009, 19:22

Si tu nous mettais un poil de code, plus ta version de base de données, on pourrait t'aider.
Par exemple avec des requêtes imbriquées, ou bien un système de boucle sur le tableau $_POST[] pour construire ta requête.

par lacfab » 02 févr. 2009, 18:48

Argh je ne sais pas comment prendre en compte mes modifications. J'ai la partie ajout mais je sais pas comment faire pour ma partie "modifier" ... snif

Etant donné que le nombre de inputs varie je ne vois pas comment faire car j'ai plusieurs valeurs PAR enregistrement ... j'ai le numéro d'id de cet enregistrement, l'id du produit correspondant au produit, le numéro de module, et sa position.

par mere-teresa » 02 févr. 2009, 14:06

Donc c'est pas insert, c'est inset/update => regarde si REPLACE en SQL correspond à ton besoin

par lacfab » 02 févr. 2009, 13:20

Oui voilà c'est ça, tu oublies juste ça

3/ modification des caractéristiques (si les données existaient déjà)

par mere-teresa » 02 févr. 2009, 12:59

Peux tu re-décrire le fonctionnement ?
Si j'ai bien compris :
1/ affichage du form
-- 10 champs vides par défaut, si déjà données champs remplis
-- bouton [+] pour ajouter des champs si 10 ne suffisent pas
2/ ajout dans la table (insert) de toutes les caractéristiques

C'est ça ?


par lacfab » 02 févr. 2009, 12:27

oups pardon non je parle du schéma technique ...

si le schéma existe (testé à partir du premier input donc dans ton exemple $_POST['caracteristique'][0] ) alors il va sur la page modifier, sinon il va sur la page ajouter.