Formulaire "intelligent"

Eléphant du PHP | 164 Messages

02 févr. 2009, 11:26

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

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

02 févr. 2009, 11:40

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.
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphant du PHP | 164 Messages

02 févr. 2009, 11:55

Non non il faut le faire en PHP ;-)

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

02 févr. 2009, 11:56

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.
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

02 févr. 2009, 12:03

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
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphant du PHP | 164 Messages

02 févr. 2009, 12:17

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;
}

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

02 févr. 2009, 12:23

Par schema, tu entends Base ? Table ? Enregistrement ?
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphant du PHP | 164 Messages

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.

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

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 ?


Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphant du PHP | 164 Messages

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

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

02 févr. 2009, 14:06

Donc c'est pas insert, c'est inset/update => regarde si REPLACE en SQL correspond à ton besoin
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphant du PHP | 164 Messages

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.

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

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.
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphant du PHP | 164 Messages

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)

ViPHP
ViPHP | 4674 Messages

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.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).