IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Formulaire dynamique pour plusieurs tables (INSERT INTO) [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 12
    Par défaut Formulaire dynamique pour plusieurs tables (INSERT INTO)
    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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    <?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 ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    <?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
    Images attachées Images attachées  

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 12
    Par défaut
    Je vais vous remontrer le code en mieux présenter :

    Voici le code de la liste déroulante de toutes les tables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <?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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     <?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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <?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

  3. #3
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Dans la deuxième partie tu as un problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $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>
    Tu assignes la valeur "0" à "valeur" puis tu agis comme si c'était un tableau ensuite. Tu n'as pas de "echo" également sur le name, et tu as un problème de guillemet au même endroit. Et il y a probablement d'autres erreurs ailleurs. Debug ton code HTMl avec la console (touche F12 sous chorme, extension firebug sous firefox).

    Deux remarques au passage : ton code n'est absolument pas sécurisé, et l'extension Mysql est déprécié, il faut dès à présent utiliser l'extension Mysqli qui lui est très similaire, ou encore mieux, PDO.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 12
    Par défaut
    Merci pour tes conseils
    Mais quelle est la façon pour que mon tableau renvoie les valeurs inscrites de mes champs?
    et de les insérer dans une requête ?

    Pour la sécurité je sais , je le met au dernier moment

    Merci

  5. #5
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Comme tu as fait, tu es sur la bonne piste, tu as juste fait des erreurs de syntaxe. Corrige les comme je te l'ai indiqué.

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 12
    Par défaut
    J'ai changé de méthode , voici la solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $sql= "insert into ".$choix." values(";
     
     
           foreach($_POST  AS $field => $value) {
    			if ($value!='enregistrer')
    		       $sql .= '"'.$value.'",';
     } 
    $sql .= ")";
    $sql = str_replace(strrchr($sql,'",)'),'")',$sql);
    Merci beaucoup à toi Spartacusply

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Formulaire pour plusieurs tables
    Par Dark Neggror dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 10/05/2009, 17h53
  2. Réponses: 1
    Dernier message: 20/06/2007, 03h18
  3. Réponses: 2
    Dernier message: 09/08/2006, 22h04
  4. sous-formulaire : champs provenant plusieurs tables
    Par patbeautifulday1 dans le forum IHM
    Réponses: 13
    Dernier message: 21/12/2005, 11h17
  5. [ Design ] commentaires pour plusieurs tables
    Par Celelibi dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 31/10/2005, 18h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo