Comment fair un double INSERT dans 2 TABLEs ? [Résolu/Fermé]

Signaler
Messages postés
209
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
23 mars 2011
-
Messages postés
209
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
23 mars 2011
-
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.

13 réponses

Messages postés
627
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
19 février 2016
389
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!
Messages postés
209
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
23 mars 2011
6
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.
Messages postés
627
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
19 février 2016
389
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 ?
Messages postés
209
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
23 mars 2011
6
ç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.
Messages postés
209
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
23 mars 2011
6
oui il y a le bon nombre de '',
Messages postés
209
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
23 mars 2011
6
up svp !
Messages postés
627
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
19 février 2016
389
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...
Messages postés
209
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
23 mars 2011
6
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...
Messages postés
627
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
19 février 2016
389
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 ?
Messages postés
209
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
23 mars 2011
6
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

?>
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 ;) @+
Messages postés
209
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
23 mars 2011
6
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.
Messages postés
209
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
23 mars 2011
6
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".