Comment fair un double INSERT dans 2 TABLEs ?

Résolu/Fermé
CaporalDead Messages postés 209 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 23 mars 2011 - 13 juin 2007 à 22:01
CaporalDead Messages postés 209 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 23 mars 2011 - 14 juin 2007 à 11:03
Bonjour voilà je voudrais savoir comment on peux faire un double INSERT dans deux table différente
mon code actuel :

mysql_query("INSERT INTO ". PREFIX ."membres VALUES ('', '". $alea ."', '". $_POST['pseudo'] ."', '". $passe ."', '". $_POST['email'] ."', ". $validation .", ". MEMBRE .") ") or die ('Erreur d\'insertion dans la base de données');

mysql_query("INSERT INTO phpbb_users VALUES('', '', '". $_POST['pseudo'] ."', 'huit', '". $passe ."', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '". $_POST['email'] ."', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '') ") or die ('Erreur d\'insertion dans la base de données');

ce code me permet bien d'éxécuter le premier INSERT mais pas le deuxième. Merci de répondre.
A voir également:

13 réponses

Doctor C Messages postés 627 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 19 février 2016 398
13 juin 2007 à 22:06
Je comprends mal ton problème...

Veux-tu simplement que ta deuxième requête fonctionne ou combiner les deux requêtes ensemble?

P.S. : La deuxième requête est vraiment horrible!
0
CaporalDead Messages postés 209 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 23 mars 2011 6
13 juin 2007 à 22:07
et bien si on peut je veux bien les combinées. La deuxième requête c'est à cause de la table du forum phpbb.
0
Doctor C Messages postés 627 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 19 février 2016 398
13 juin 2007 à 22:13
Petites questions :

Quand tu dis que la deuxième requête n'est pas exécuté, est-ce qu'elle cause un message d'erreur ou elle ne fait juste rien?

Est-ce que tu as vérifié si tu avais le bon nombre de '','','','',... ....... ?

Quelle sorte de BD utilises-tu ? Acces, MySQL ? Avec EasyPHP ?
0
CaporalDead Messages postés 209 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 23 mars 2011 6
13 juin 2007 à 22:16
ça affiche un message d'erreur (celui de la première rerquête) et quand je vérifie dans la BDD (MySQL version 5) je vois bien la première table écrite mais pas la deuxième.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
CaporalDead Messages postés 209 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 23 mars 2011 6
13 juin 2007 à 22:26
oui il y a le bon nombre de '',
0
CaporalDead Messages postés 209 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 23 mars 2011 6
13 juin 2007 à 23:03
up svp !
0
Doctor C Messages postés 627 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 19 février 2016 398
14 juin 2007 à 02:05
Désolé pour le délai, y fallait que je rentre chez moi ;)

Et bien, si le message d'erreur de ta première requête est déclanché, c'est que l'erreur se fait dans l'exécution de ta première requête! J'ai lu un peu sur l'utilisation de la méthode "or die" et si je ne me trompe pas, si la méthode die est appelée (comme dans ton cas), elle quitte le script.

Donc, s'il y a une erreur dans ta première requête, le reste du script est laissé de côté, ce qui expliquerait pourquoi ta deuxième requête ne se fait pas.

Habituellement, la méthode die est utilisée pour la connection à la BD et non pour chaque requête. (encore là, je suis pas expert, je me suis juste renseigné un peu). Tu pourrais essayer ton script en retirant la méthode "or die", juste pour voir s'il y a une différence.

Je me demande quand même pourquoi la méthode or die est appelée dans ton cas si le Insert se fait bien...
0
CaporalDead Messages postés 209 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 23 mars 2011 6
14 juin 2007 à 02:29
Désolé pour la relance. J'ai donc essayé de retirer le die (dans tous les sens possible) et toujours le même problème : j'obtient le premier résultat dans la première table mais rien dans la deuxième. Le problème persiste on dirait :p...
0
Doctor C Messages postés 627 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 19 février 2016 398
14 juin 2007 à 04:55
Je comprends vraiment pas pourquoi l'erreur est dans ta première requête et ta deuxième ne marche pas.

Si tu inverses les deux requêtes dans ton code ? Pour que la deuxième soit en premier...

(Je t'avoue que je sais plus trop quoi penser...)

Peux-tu mettre un peu plus de code pour que je puisse voir un peu plus l'ensemble ?
0
CaporalDead Messages postés 209 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 23 mars 2011 6
14 juin 2007 à 10:12
apparement le problème vient bien de la deuxième requête, si on les intervertis, la plus longue d'abord, aucune des deux requête ne s'éxécute. Le code complet :

<?php



session_start();

if(@$_SESSION['session']) exit; //Si la personne est identifiée, on lui interdit l'accès à la page d'inscription



include_once 'recup_config.php'; //On récupère la configuration du script

$titre_page = INSCRIPTION_TITRE; //Définition du titre de la page

include_once 'haut.php'; //on affiche le haut (header)



if( isset($_POST['envoi']) ) {



require_once 'fonctions/formulaires.php';



$_POST = form_secu($_POST, 'addslashes');

$_POST = form_secu($_POST, 'htmlchars');

$_POST = form_secu($_POST, 'trim');



//// VERIFICATIONS BANALES ////

if( strlen($_POST['mdp']) < 5)

$erreur .=INSCRIPTION_ERREUR_PASS_PETIT ."<br />";



if($_POST['mdp'] !== $_POST['mdp2'])

$erreur .=INSCRIPTION_ERREUR_PASS_IDENTIQUE ."<br />";



if( strlen($_POST['pseudo']) > 15 || strlen($_POST['pseudo']) < 3)

$erreur .=INSCRIPTION_ERREUR_PASS_TAILLE ."<br />";



if( strlen($_POST['email']) < 1)

$erreur .=INSCRIPTION_PAS_DE_EMAIL ."<br />";



if( strlen($erreur) > 5 ) {

echo $erreur ,'<a href="#" onClick="history.back()">', GENERAL_RETOUR, '</a>';

include_once 'bas.php';

exit;

}

connexion();

//// VERIFICATIONS DES EXISTANCES ////

$reponse_mail = @mysql_query("SELECT email FROM ". PREFIX ."membres WHERE email='". $_POST['email'] ."'") or die ('Erreur de vérification d\'e-mail déjà existant'); //verification si e-mail existe déjà

$count_mail = @mysql_num_rows($reponse_mail);

if($count_mail === 1)

$erreur .=INSCRIPTION_DEJA_EMAIL ."<br />";



$reponse_pseudo=mysql_query("SELECT pseudo FROM ". PREFIX ."membres WHERE pseudo='". $_POST['pseudo'] ."'") or die ('Erreur de vérification du pseudo déjà existant'); //verification si pseudo existe déjà

$count_pseudo=mysql_num_rows($reponse_pseudo);

if($count_pseudo === 1)

$erreur .=INSCRIPTION_DEJA_PSEUDO ."<br />";



if( strlen($erreur) > 5 ) {

echo $erreur ,'<a href="#" onClick="history.back()">', GENERAL_RETOUR, '</a>';

include_once 'bas.php';

exit;

}



$alea = id_aleatoire(); //Création d'un identifiant aléatoire



$passe = md5($_POST['mdp']); //Encodage en md5 (c'est pas le plus sécurisé possible)



if($environement_site == 1 AND $validation_site == 1) $validation_site = 3; //Si on est en local, ca revient à ce qu'il n'y ai aucune validation par mail.

$validation = 0;

if($validation_site == 3) $validation = 1;


mysql_query("INSERT INTO phpbb_users VALUES('', '', '". $_POST['pseudo'] ."', 'huit', '". $passe ."', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '". $_POST['email'] ."', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '') ");


mysql_query("INSERT INTO ". PREFIX ."membres VALUES ('', '". $alea ."', '". $_POST['pseudo'] ."', '". $passe ."', '". $_POST['email'] ."', ". $validation .", ". MEMBRE .") ") or die ('Problème d\' écriture dans la base de donné');


if($validation_site == 1)

echo'<span style="color:#00B222">', INSCRIPTION_MESSAGE_FIN, $nom_site ,'.<br />

', INSCRIPTION_MESSAGE_FIN_VALIDATION_1, '</span> <a href="index.php">', GENERAL_RETOUR, '</a>';



if($validation_site == 2)

echo'<span style="color:#00B222">', INSCRIPTION_MESSAGE_FIN, $nom_site ,'.<br />

', INSCRIPTION_MESSAGE_FIN_VALIDATION_2, '</span> <a href="index.php">', GENERAL_RETOUR, '</a>';



if($validation_site == 3)

echo'<span style="color:#00B222">', INSCRIPTION_MESSAGE_FIN, $nom_site ,'.<br />

', INSCRIPTION_MESSAGE_FIN_VALIDATION_3, '</span> <a href="index.php">', GENERAL_RETOUR, '</a>';



if($environement_site == 2)

{

if($validation_site == 1)

mail($_POST['email'], '['. $nom_site .']'.INSCRIPTION_TITRE, INSCRIPTION_MAIL_PARTIE_1. $nom_site .".

". INSCRIPTION_MAIL_PARTIE_2 ."

". INSCRIPTION_PSEUDO ." : ". $_POST['pseudo'] ."

". INSCRIPTION_PASS ." : ". $_POST['mdp'] ."



". INSCRIPTION_MAIL_VALIDATION_1 ."

". $adresse_site ."validation_mail.php?id=". $alea ."



________________________

". INSCRIPTION_MAIL_FORMULES ."

". $nom_site, "From: ". $nom_site ."<robot@". $nom_site .">");



if($validation_site == 3 OR $validation_site == 2)

mail($_POST['email'], '['. $nom_site .']'.INSCRIPTION_TITRE, INSCRIPTION_MAIL_PARTIE_1. $nom_site .".

". INSCRIPTION_MAIL_PARTIE_2 ."

". INSCRIPTION_PSEUDO ." : ". $_POST['pseudo'] ."

". INSCRIPTION_PASS ." : ". $_POST['mdp'] ."



________________________

". INSCRIPTION_MAIL_FORMULES ."

". $nom_site, "From: ". $nom_site ."<robot@". $nom_site .">");

}



} else

?>
0
Tu peut essayer de mettre tes 2 requetes en une seul via la commande UNION ALL
le seul probleme est que tes deux tables doivent avoir le même nbre de colonnes si ce n'est pas le cas utilise des NULLs afin de créer des colones vides et ainsi en avoir le même nombre

ex: table1: 4colonnes table 2: 1colonnes
SELECT * FROM table1 UNION ALL SELECT *, NULL, NULL, NULL, FROM table2;

J'espère que ça pourra t'aider ;) @+
0
CaporalDead Messages postés 209 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 23 mars 2011 6
14 juin 2007 à 10:52
Alors là comment dire... Je suis trés confus lol, en faite je viens de m'apercevoir (aprés 10 recomptage de suite) qu'il y avait un '', dans ma deuxième requête :S. Vraiment désolé pour le dérangement lol. Merci quand même d'avoir pris le temps d'y jeter un coup d'oeil.
0
CaporalDead Messages postés 209 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 23 mars 2011 6
14 juin 2007 à 11:03
par contre j'ai encore une tite question
la table phpbb_user premiére colonne n'est apparement pas 'Autoincrement', comment pourrais faire pour quand dans cette première colonne il y ait toujours " dernier id + 1".
0