Page 1 sur 2

Formulaire "intelligent"

Posté : 02 févr. 2009, 11:26
par lacfab
Hello,

Alors voici le détail de ce que je veux faire :

Je dois faire un formulaire qui une fois remplit permet de d'afficher un schéma technique. Une table A existe avec les différentes valeurs à rentrer dans ces formulaire et une table B existe pour enregistrer ces valeurs.
Ces input sont de type texte et on ne peut y écrire que les lettres correspondantes à la table A.

Exemple pour mes tables :
TABLE A :
valeur:A libellé:valeurA
valeur:B libellé:valeurB

TABLE B :
id:1 valeur:B position:1
id:2 valeur:B position:2
id:3 valeur:A position:3

Si le schéma n'existe pas (= input 1 vierge) il affiche un formulaire de 10 inputs vide.
Si le schéma existe (= input 1 existant) alors il affiche les inputs correspondant aux enregistrements de la table B.

Maintenant il se peut que j'ai besoin de 15 inputs dans mon formulaire ... je pensais donc faire un bouton + et un -.
Le + enregistre les valeurs entrée dans les formulaires et ajoute un input (donc un enregistrementà.
Le - supprime le dernier enregistrement.

Seulement voilà ... je peux avoir 10 champs à enregistrer comme 30 ... comment je peux gérer ma requête SQL ? je ne vais pas mettre des if en boucle je pense qu'il existe une solution.

Merci d'avance

Posté : 02 févr. 2009, 11:40
par mere-teresa
Modération :
Afin d'obtenir plus de réponses, le sujet est déplacé dans le forum "Javascript, AJAX".

Merci de prendre le temps de lire les règlements
ainsi que l'intitulé de chaque forum avant de poster un nouveau sujet.

Posté : 02 févr. 2009, 11:55
par lacfab
Non non il faut le faire en PHP ;-)

Posté : 02 févr. 2009, 11:56
par mere-teresa
Modération :
Afin d'obtenir plus de réponses, le sujet est re-déplacé dans le forum "PHP"

Merci de prendre le temps de lire les règlements
ainsi que l'intitulé de chaque forum avant de poster un nouveau sujet.

Posté : 02 févr. 2009, 12:03
par mere-teresa
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

Posté : 02 févr. 2009, 12:17
par lacfab
Pour l'ajout je pensais faire ça :

il update les valeurs des inputs existants et juste derrière il fait un insert. Bon ça fait deux requêtes mais ce n'est pas grave.

Sinon merci pour le valeur[] mais comment je fais mes inputs dans le cas ou le schéma n'existe pas encore ? je fais une boucle qui ajoute les valeurs une par une ?

genre :

for(blablabla){
INSERT INTO bliblibli;
}

Posté : 02 févr. 2009, 12:23
par mere-teresa
Par schema, tu entends Base ? Table ? Enregistrement ?

Posté : 02 févr. 2009, 12:27
par lacfab
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.

Posté : 02 févr. 2009, 12:59
par mere-teresa
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 ?



Posté : 02 févr. 2009, 13:20
par lacfab
Oui voilà c'est ça, tu oublies juste ça

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

Posté : 02 févr. 2009, 14:06
par mere-teresa
Donc c'est pas insert, c'est inset/update => regarde si REPLACE en SQL correspond à ton besoin

Posté : 02 févr. 2009, 18:48
par lacfab
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.

Posté : 02 févr. 2009, 19:22
par mere-teresa
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.

Posté : 03 févr. 2009, 02:25
par lacfab
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)

Posté : 05 févr. 2009, 16:33
par Hywan
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.