[RESOLU] Formulaire dynamique pour plusieurs table

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 : [RESOLU] Formulaire dynamique pour plusieurs table

Re: Formulaire dynamique pour plusieurs table

par kemepe » 15 mai 2014, 10:52

Merci quand même , j'ai trouver une solution plus simple :

je vous la montre :
$sql= "insert into ".$choix." values(";

			
       foreach($_POST  AS $field => $value) {
			if ($value!='enregistrer')
		       $sql .= '"'.$value.'",';
 } 
$sql .= ")";
$sql = str_replace(strrchr($sql,'",)'),'")',$sql);

Re: Formulaire dynamique pour plusieurs table

par moogli » 14 mai 2014, 17:00

je t'ai déjà répondu la dessus.

lit bien mon message il n'y as pas qu'une info sur la façon de coder il y a aussi l'explication du pourquoi tu essai d'insérer la descriptions des colonnes dans ta table ;)

@+

Re: Formulaire dynamique pour plusieurs table

par kemepe » 14 mai 2014, 16:50

Je vais vous remontrer le code en mieux présenter :

Voici le code de la liste déroulante de toutes les tables :
<?php
/**********************************************************
  Selection de la table via un menu déroulant 
  *********************************************************/
$sql = "SHOW TABLES FROM repair";
$result = mysql_query($sql);

if (!$result) {
   echo "Erreur DB, impossible de lister les tables\n";
   echo 'Erreur MySQL : ' . mysql_error();
   exit;
}
?>


<form method="post" action= "maj.php">
	<select name="choix";>
<?php 
  while ($row = mysql_fetch_row($result)) 
  {
     echo '<option value="' .$row[0] .'" name="table">'.$row[0] . '</option>';
  }
    mysql_free_result($result);
   echo '<br><br><br>';
?> 
	</select>
	<td><input type="submit" name="valider" value="valider"></td>	
</form>
<br>

Voici la partie Formulaire qui changent en fonction du nombre de colonne de la table et qui affiche le nom des colonnes à chaque champs
 <?php if (isset ($_POST["valider"])) {
 $choix = $_POST['choix'];
 $_SESSION['choix']=$choix;
 ?>
<fieldset><legend>Formulaire ajout</legend>
  <form name="loadByForm" method="post" action="<?php echo $_SERVER['PHP_SELF']?>">
    <table id="textleft">
		<?php 	
	          $req="SHOW COLUMNS FROM $choix";
	          $result2 = mysql_query($req);$valeur=0;$i=0;
	           while ($row2 = mysql_fetch_row($result2)) {	
         ?>
		           <td id="titrerow"><?php echo $row2[0] ?> </td>
                   <td id="modif"><input type="text" size="15" name= <?php "$valeur[$i]";?> value="<?php echo $row2[0] ;?>"> </td> 
                   <tr><?php  $i++;  }?>
        <td></td><td colspan="2"><input type="reset" name="btnRstForm" value="effacer"></td>						
        <td><input type="submit" name="btnLoadByForm" value="enregistrer"></td>						
    </tr></table>
  </form>  
</fieldset>
  <?php
  }
Et maintenant voici la parti du code pour insérer les valeurs dans la base :
<?php   

/**********************************************************
  Insertion d'une carte dans la base de données
  *********************************************************/
echo"<h3>Insertion dans la base de données</h3>";  
if (isset ($_POST["btnLoadByForm"])) {// page appelée par le formulaire "loadByForm"    	
  extract($_POST);  
  $choix=$_SESSION['choix'];
  $req="SHOW COLUMNS FROM $choix";
  $result2 = mysql_query($req);

    // Test si la pièce a déja été enregistrée dans la base de données
    $req = "SELECT * FROM $choix WHERE $choix.nom='$valeur[0]'"; 
    $result = mysql_query($req) 
      or die ("Accès à la liste des pièces impossible".mysql_error());

    if (mysql_num_rows($result) != 0) //pièce déjà enregistrée
      echo "<p id='warning'>La pièce a déjà été enregistrée dans la base de données !!</p>";
    else { // Nouvelle pièce => enregistrement

	$sql= "insert into ".$choix." values(";
	while ($valeur = mysql_fetch_array($result2)) {  
	
	$sql .= '"'.$valeur[$i].'",';
	$i++;
    }
	$sql .= ')';
	echo $sql;
      $result = mysql_query($sql) 
      or die ("Accès à la base de données impossible".mysql_error());
	  
      echo"<p id='ok'>Les données ont été enregistrées avec succès!!</p>";
} } 
  ?>
  
Le problème est que j'arrive pas à récuperer les valeurs dans le champs , la requete que j'ai en ce moment est :
insert into cartes values ("varchar(50)")"YES")

Merci

Re: Formulaire dynamique pour plusieurs table

par moogli » 14 mai 2014, 09:48

salut,

ton code est illisible il faut vraiment fair eun effort de présentation (on utilise des espace une indentation correcte et surtout une déclaration de variables par ligne.

echo "$row2[0]" ? NON => echo $row2[0]; oui tu pas besoin d'utiliser une chaîne de caractères pour cela (sans parler tu coté perf ;)).

while ($row2 = mysql_fetch_row($result2)) { ;$i++;

tu as un ; en trop
$i ne vaudra jamais zéro hors tu utilise cette index dans la validation.
=> déplacer le $i++ en fin de while (avant la } ).

while ($valeur = mysql_fetch_array($result2)) {

tu écrase tranquillement les valeurs issue du formulaire par celle de la table ...

Tu n'utilise pas correctement les infos de ta requêtes show columns.
Une requête insert c'est : insert into "TABLE" (les, colonnes, que, l'on, utilise, dans, l'insertion) values ( ... les valeurs ...);

il faut que tu boucle sur les valeur du formulaire (hors mis le bouton) pour créer ta requête sql.
il est import de récupérer cette requête générée afin de pouvoir la tester avec un client SQL (et aussi contrôler par toi même que la requête est correcte).

extract est a proscrire c'est obligatoirement le bordel ensuite. utilise le tableau POST (et vérifie l’existence des champs avant de les utiliser).
tout comme $choix=$_SESSION['choix'] est inutile utilise directement $_SESSION['choix'].
cela apportera de la lisibilité à ton code (on sais d'où viens la valeur pas besoin de fouiller dans le code pour trouver un affectation noyer au milieux du reste).

pour ce qui est des conventions "de codage" voici un exemple http://pear.php.net/manual/fr/standards.php

@+

Formulaire dynamique pour plusieurs table

par kemepe » 14 mai 2014, 08:34

Bonjour à tous

Voici mon problème , j'ai crée un seul est unique formulaire pour plusieur table qu'on choisis sur une liste déroulante
voici le code du formulaire :
<?php
/**********************************************************
  Selection de la table via un menu déroulant
  *********************************************************/
$sql = "SHOW TABLES FROM repair";
$result = mysql_query($sql);
 
if (!$result) {
   echo "Erreur DB, impossible de lister les tables\n";
   echo 'Erreur MySQL : ' . mysql_error();
   exit;
}
 
?>
 
 
<form method="post" action= "maj.php">
    <select name="choix";>
<?php
while ($row = mysql_fetch_row($result)) {
   echo '<option value="' .$row[0] .'" name="table">'.$row[0] . '</option>';
}
mysql_free_result($result);
echo '<br><br><br>';
 
 
?>
    </select>
    <td><input type="submit" name="valider" value="valider"></td>
</form>
        <br>
 
 <?php if (isset ($_POST["valider"])) {
 $choix = $_POST['choix'];
$_SESSION['choix']=$choix;
    ?>
<fieldset><legend>Formulaire ajout</legend>
  <form name="loadByForm" method="post" action="<?php echo $_SERVER['PHP_SELF']?>">
    <table id="textleft">
        <?php   
    $req="SHOW COLUMNS FROM $choix";
    $result2 = mysql_query($req);$valeur=0;$i=0;
    while ($row2 = mysql_fetch_row($result2)) { ;$i++;
        ?>
        <td id="titrerow"><?php echo "$row2[0]" ?> </td>
        <td id="modif"><input type="text" size="15" name= <?php "$valeur[$i]" ?> value="<?php echo "$row2[0]";?>"> </td>
      <tr><?php    }?>
        <td></td><td colspan="2"><input type="reset" name="btnRstForm" value="effacer"></td>                     
        <td><input type="submit" name="btnLoadByForm" value="enregistrer"></td>                      
    </tr></table>
  </form> 
</fieldset>
  <?php

Et je veux récupérer les valeur pour les insérer dans la base de donnée avec un INSERT INTO

Voici le code ;
<?php
/**********************************************************
  Insertion d'une carte dans la base de données
  *********************************************************/
echo"<h3>Insertion dans la base de données</h3>"; 
if (isset ($_POST["btnLoadByForm"])) {// page appelée par le formulaire "loadByForm"       
extract($_POST);  $choix=$_SESSION['choix'];$req="SHOW COLUMNS FROM $choix";
    $result2 = mysql_query($req);

    // Test si la pièce a déja été enregistrée dans la base de données
    $req = "SELECT '$valeur[0]' FROM $choix WHERE $choix.nom='$valeur[0]'";
    $result = mysql_query($req)
      or die ("Accès à la liste des pièces impossible".mysql_error());
       
    if (mysql_num_rows($result) != 0) //pièce déjà enregistrée
      echo "<p id='warning'>La pièce a déjà été enregistrée dans la base de données !!</p>";
    else { // Nouvelle pièce => enregistrement

       $sql = "insert into ".$choix." values(";

 while ($valeur = mysql_fetch_array($result2)) {
  
$i++;
echo $valeur[$i];

    $sql .= '"'.$valeur[$i].'")';
    echo $sql;
      $result = mysql_query($sql)
        or die ("Accès à la base de données impossible".mysql_error());
      echo"<p id='ok'>Les données ont été enregistrées avec succès!!</p>";
} } }
   
  ?>
cela me donne : insert into cartes values ("varchar(50)")"YES")

Le problème c'est que j'arrive pas à récupérer les valeurs dans le formulaire

Le formulaire de la table cartes est sous la forme : voir PJ

Merci à tous