DCO Posté 4 Mars 2008 Posté 4 Mars 2008 Bonjour, Je voudrai savoir comment faire pour enregistrer des données d'une table MySql dans une autre. Je m'explique: J'ai un ensemble de formulaires travaillant ensembles et l'un d'eux me sert à archiver dans une table MySql. Pour archiver je sélectionne dans un formulaire à l'aide d'une checkbox la ou les lignes à archiver et ensuite avec un bouton j'appelle un autre formulaire qui me liste les enregistrements à archiver et ensuite je confirme ma volonté d'archiver en cliquant sur OK et à partir de là ça ne marche pas mes champs sont vide sauf le Champ numero qui lui à bien le numero ID de l'enregistrement exporté. Voci mes formulaires: Le Formulaire 1 archiver CODE /* *********************** A T T E N T I O N *************************//* Veillez à indiquer le bon chemin vers votre fichier connexion.php */ require("include/connexionDB.php"); /* Connexion au serveur MySQL */ $connection=mysql_connect ($serveur, $username, $password, $table); if (!$connection) { die("Impossible de se connecter au serveur : " . mysql_error()); } /* Sélection de la base de données */ $db_selected = mysql_select_db($database, $connection); if (!$db_selected) { die ("Impossible d'utiliser la base de données : " . mysql_error()); } ?> <html> <head> <title>Archiver</title> <link href="/enreg_form/css/style2.css" rel="stylesheet" type="text/css"> </head> <body> <?php $query="select * from $table ORDER BY nom ASC"; $result=mysql_query($query); $totenreg=mysql_num_rows($result); echo "<form action='scripts/archive.php' method='post' name='archiver' enctype='multipart/form-data'>"; echo "<table width=100% border=1 align=center>"; echo "<tr bgcolor='#00FF00'>"; if ($totenreg==0) echo "<td colspan=8><h2>IL N'Y A PAS D'ENREGISTEMENT A ARCHIVER</td>"; else { echo "<td colspan=8><h2>ARCHIVER ENREGISTREMENTS ?</td>"; echo "</tr>"; echo "<tr align=center bgcolor=#87CEEB>"; echo "<td><h4 class='h41'>Civilite</td>"; echo "<td><h4 class='h41'>Nom & Prénom</td>"; echo "<td><h4 class='h41'>Adresse</td>"; echo "<td><h4 class='h41'>Code Postal</td>"; echo "<td><h4 class='h41'>Ville</td>"; echo "<td><h4 class='h41'>Type</td>"; echo "<td><h4 class='h41'>Date</td>"; echo "<td><h4 class='h41'>Choix</td>"; echo "</tr>"; $i=0; while ($row=mysql_fetch_array($result)) { if ($i==0) { echo "<tr bgcolor=#D3D3D3>"; $i++; } else { echo "<tr bgcolor=#FFFFFF>"; $i--; } echo "<td><h5>".$row["civilite"]."</td>"; echo "<td><h5>".$row["nom"]."</td>"; echo "<td><h5>".$row["adresse"]."</td>"; echo "<td><h5>".$row["codepostal"]."</td>"; echo "<td><h5>".$row["ville"]."</td>"; echo "<td><h5>".$row["type"]."</td>"; echo "<td><h5>".$row["date"]."</td>"; echo "<td align=center><h4><input type='checkbox' name='type[]' value=".$row["id"]."></td>"; echo "<tr>"; } echo "</table>"; echo "<br><br>"; echo "<table width=50% align=center>"; echo "<tr>"; echo "<td align=center><input class='bouton' type='submit' name='Suivant' value='ARCHIVER ?'></td>"; echo "<td align=center><input class='bouton' type='reset' name='Déselectionner' value='Déselectionner'></td>"; echo "</tr>"; } echo "</table>"; echo "</form>"; ?> </body> </html> CODE /* *********************** A T T E N T I O N *************************//* Veillez à indiquer le bon chemin vers votre fichier connexion.php */ require("../include/connexionDB.php"); /* Connexion au serveur MySQL */ $connection=mysql_connect ($serveur, $username, $password, $table); if (!$connection) { die("Impossible de se connecter au serveur : " . mysql_error()); } /* Sélection de la base de données */ $db_selected = mysql_select_db($database, $connection); if (!$db_selected) { die ("Impossible d'utiliser la base de données : " . mysql_error()); } ?> <html> <head> <title>Supprimer</title> <link href="/enreg_form/scripts/css/style2.css" rel="stylesheet" type="text/css"> </head> <body bgcolor="#FFFFE0"> <?php if (!(isset($_POST["type"]))) { echo "<H4>Vous devez sélectionner au moins un enregistrement !"; echo "<br><br><br><br>"; echo "<H4><a href='java script:history.go(-1)'>Retour à la page archiver un ou des enregistrement(s)</a><br>"; } else { echo "<form action='confirm_archive.php' method='post' name='archive' enctype='multipart/form-data'>"; echo "<table width=100% border=1 align=center>"; echo "<tr bgcolor='#00FF00'>"; echo "<td colspan=7><h2>VOULEZ-VOUS ARCHIVER CET ENREGISTREMENT ?</td>"; echo "</tr>"; echo "<tr align=center bgcolor=#87CEEB>"; echo "<td><h4 class='h41'>Civilité</td>"; echo "<td><h4 class='h41'>Nom</td>"; echo "<td><h4 class='h41'>Adresse</td>"; echo "<td><h4 class='h41'>Code Postal</td>"; echo "<td><h4 class='h41'>Ville</td>"; echo "<td><h4 class='h41'>Type</td>"; echo "<td><h4 class='h41'>Date</td>"; echo "</tr>"; $j=0; for ($i=0;$i<count($_POST["type"]);$i++) { $query="select * from $table where id='".$_POST["type"][$i]."'"; $result=mysql_query($query); if ($j==0) { echo "<tr bgcolor=#D3D3D3>"; $j++; } else { echo "<tr bgcolor=#FFFFFF>"; $j--; } $row=mysql_fetch_array($result); echo "<input type='hidden' Name='numero[]' value='".$row["id"]."'>"; echo "<td><h5>".$row["civilite"]."</td>"; echo "<td><h5>".$row["nom"]."</td>"; echo "<td><h5>".$row["adresse"]."</td>"; echo "<td><h5>".$row["codepostal"]."</td>"; echo "<td><h5>".$row["ville"]."</td>"; echo "<td><h5>".$row["type"]."</td>"; echo "<td><h5>".$row["date"]."</td>"; echo "<tr>"; } echo "</table>"; echo "<br><br>"; echo "<table width=50% align=center>"; echo "<tr>"; echo "<td align=center><input class='bouton' type='submit' name='OK' value='OK Archiver'></td>"; echo "<td align=center><button onClick='java script:history.go(-1)'>Annuler</button></td>"; echo "</tr>"; echo "</table>"; echo "</form>"; } ?> </body> </html> Et le 3ème formulaire qui lui devrai copier les enregistrement sélection dans la nouvelle table ET supprimer les ernregistreement après la copie: CODE /* *********************** A T T E N T I O N *************************//* Veillez à indiquer le bon chemin vers votre fichier connexion.php */ require("../include/connexionDB.php"); /* Connexion au serveur MySQL */ $connection=mysql_connect ($serveur, $username, $password, $table, $table_arch); if (!$connection) { die("Impossible de se connecter au serveur : " . mysql_error()); } /* Sélection de la base de données */ $db_selected = mysql_select_db($database, $connection); if (!$db_selected) { die ("Impossible d'utiliser la base de données : " . mysql_error()); } ?> <html> <head> <title>Editer</title> <link href="/enreg_form/scripts/css/style2.css" rel="stylesheet" type="text/css"> </head> <body> <?php for ($i=0;$i<sizeof($_POST["numero"]); $i++) { $query="insert into $table_arch values ('".$_POST["numero"][$i]."', '".$_POST["civilite"][$i]."', '".$_POST["nom"][$i]."', '".$_POST["adresse"][$i]."', '".$_POST["codepostal"][$i]."', '".$_POST["ville"][$i]."', '".$_POST["type"][$i]."', '".$_POST["date"][$i]."', '".$_POST["observation"][$i]."')"; $result=mysql_query($query); $query="delete from $table where id='".$_POST["numero"][$i]."'"; $result=mysql_query($query); } if ($result) { echo "<H4>".$i." Enregistrement(s) archivé(s) !"; echo "<br><br><br><br>"; echo "<H4><a href='../archiver.php'>Archiver Enregistrement(s)</a><br>"; echo "<H4><a href='../lister_archives.php?test=3'>Lister les Archives</a>"; } else echo "<H4>Aucun Enregistrement Archivé !"; ?> </body> </html> Pouvez vous m'aider à résoudre ce problème? Mais je pense que l'erreur doit venir de la ligne 28 du 3ème formulaire mais je ne vois pas où. Avec mes sincères remerciements.
pluriels Posté 4 Mars 2008 Posté 4 Mars 2008 (modifié) utilise les balises codebox, ce sera plus lisible. + 1 indice : http://dev.mysql.com/doc/refman/5.0/fr/insert-select.html dans ton formulaire 2, il n'y a pas de champs correspondant à ta variable => $_POST["civilite"][$i] dans le formulaire 3 Modifié 4 Mars 2008 par pluriels
DCO Posté 5 Mars 2008 Auteur Posté 5 Mars 2008 Bonjour, J'ai lu avec attention le lien donné par pluriels http://dev.mysql.com/doc/refman/5.0/fr/insert-select.html dans ton formulaire 2, il n'y a pas de champs correspondant à ta variable => $_POST["civilite"][$i] dans le formulaire 3 mais je n'y comprend plus rien, je suis perdu. Pouvez vous m'aider? D'avance merci.
pluriels Posté 5 Mars 2008 Posté 5 Mars 2008 1 - tu dois probablement avoir un message d'erreur ou un warning, peux-tu nous l'indiquer ? 2 - la partie insert...select permets de faire une requête du type insertion dans une table depuis une sélection: "INSERT INTO insert into $table_arch SELECT numero, civilite,nom, adresse, codepostal, ville,type,date,observations FROM $table WHERE numero = ".$_POST["numero"][$i]; C'était juste un indice pour faire les choses autrement, mais je t'ai embrouillé je crois 3 - ton formulaire 2 renvoie les variables suivantes dans le $_POST: numero[0] = X1; ... numero[n]= Xn; Dans ta troisième page, tu peux donc utiliser $_POST["numero"][$i] mais pas $_POST["civilite"][$i] qui n'existe pas
DCO Posté 5 Mars 2008 Auteur Posté 5 Mars 2008 Bonjour, He ben non je n'ai pas de message d'erreur ou un warning car il y a bien quelque chose qui se copie dans la table archive et c'est le numero qui est égal à l'ID. et c'est là que je ne comprend plus, pourquoi il n'y a que ce numéro qui est copié et pas le reste: Voici le code qui permet de faire la copie et la suppression: <?php for ($i=0;$i<sizeof($_POST["numero"]); $i++) { $query="insert into $table_arch values ('".$_POST["numero"][$i]."', '".$_POST["civilite"][$i]."', '".$_POST["nom"][$i]."', '".$_POST["adresse"][$i]."', '".$_POST["codepostal"][$i]."', '".$_POST["ville"][$i]."', '".$_POST["type"][$i]."', '".$_POST["date"][$i]."', '".$_POST["observation"][$i]."')"; $result=mysql_query($query); $query="delete from $table where id='".$_POST["numero"][$i]."'"; $result=mysql_query($query); } if ($result) { Et encore merci pour votre aide.
Portekoi Posté 5 Mars 2008 Posté 5 Mars 2008 Si tu fais un "echo $query;" sur le premier, ca affiche quoi?
DCO Posté 5 Mars 2008 Auteur Posté 5 Mars 2008 voici ce que cela affiche insert into archive_form values ('55', '', '', '', '', '', '', '', '')
Portekoi Posté 5 Mars 2008 Posté 5 Mars 2008 Bon ben tu vois que ta requête est bonne, c'est ta facon de traiter les données qui ne l'est pas
Portekoi Posté 5 Mars 2008 Posté 5 Mars 2008 A aucun moment tu ne transmets les données... le seul champ que tu passes est l'ID sur le formulaire pour archiver... Le mieux serais de tout avoir dans la même table avec une colonne "archive" qui contiendrait 0 ou 1 1 - On coche les cases concernées 2 - Tu réceptionnes la variable contenant les cases cochées 3 - Tu passes ta valeur de "archive" à 1 pour les enregistrements choisis Sinon, tu dois récupérer les données pour les enregistrements concernés et les ré-inserés. Mais là, pour le moment, tu ne transmets QUE l'Id et rien d'autre donc, normal...
pluriels Posté 5 Mars 2008 Posté 5 Mars 2008 je crois que mes explications sont foireuses ou je m'exprime mal, ce qui au final donne le même résultat. On n'avance pas. Pour expliquer à nouveau le probleme : Formulaire 2 echo "<input type='hidden' Name='numero[]' value='".$row["id"]."'>";echo "<td><h5>".$row["civilite"]."</td>"; Formulaire 3 $query="insert into $table_arch values ('".$_POST["numero"][$i]."', '".$_POST["civilite"][$i]."', '".$_POST["nom"][$i]."', '".$_POST["adresse"][$i]."', '".$_POST["codepostal"][$i]."', '".$_POST["ville"][$i]."', '".$_POST["type"][$i]."', '".$_POST["date"][$i]."', '".$_POST["observation"][$i]."')"; Dans la logique, c'est ce qui vient du formulaire 2 qui est utilisé dans ta requête du formulaire 3. or si on observe bien, tu as un input type hidden pour les numeros mais tu n'as rien d'autres. Dans ta requête du formulaire 3, tu utilises $_POST["numero"][$i] qui a bien été envoyé, par contre $_POST["civilite"][$i] n'existe pas .
DCO Posté 5 Mars 2008 Auteur Posté 5 Mars 2008 Bonsoir, Ok maintenant c'est plus clair et cela fonctionne. J'ai fait comme ceci: Dans mon deuxième formulaire j'ai recopier cette ligne autant de fois que de champs: echo "<input type='hidden' Name='numero[]' value='".$row["id"]."'>"; 1 pour civilite, 1 pour le nom ..... et cela à fonctionné. Et un GRAND merci pour votre aide.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant