Rechercher : dans
Par :

Comment fair un double INSERT dans 2 TABLEs ?

Dernière réponse le 14 jun 2007 à 11:03:52 CaporalDead, le 13 jun 2007 à 22:01:27 
 Signaler ce message aux modérateurs

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.

Configuration: Linux
Firefox 2.0.0.4

Meilleures réponses pour « comment fair un double INSERT dans 2 TABLEs ? » dans :
MySQL - Supprimer des doublons dans une table VoirPour supprimer des doublons au niveau d'une table donnée définie comme suit : CREATE TABLE IF NOT EXISTS TabTest ( cle_prim integer(4) NOT NULL auto_increment, x integer, y integer, z integer, ...
Eviter les doublons dans Excel VoirEviter les doublons lors d'un encodage dans un colonne de feuille excel: prendre le format conditionnel sur le première cellule sous les titres (par ex A2) choisir la formule suivante : =NB.SI($A$2:$A$21;A2)>1 mettre là la couleur de fond...

1

Doctor C, le 13 jun 2007 à 22:06: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! Echo "Lima Mike Alfa";

Répondre à Doctor C

2

CaporalDead, le 13 jun 2007 à 22:07:51

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.

Répondre à CaporalDead

3

Doctor C, le 13 jun 2007 à 22:13:54

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 ?
Echo "Lima Mike Alfa";

Répondre à Doctor C

4

CaporalDead, le 13 jun 2007 à 22:16:29

ç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.

Répondre à CaporalDead

5

CaporalDead, le 13 jun 2007 à 22:26:43

Oui il y a le bon nombre de '',

Répondre à CaporalDead

6

CaporalDead, le 13 jun 2007 à 23:03:19

Up svp !

Répondre à CaporalDead

7

Doctor C, le 14 jun 2007 à 02:05:49

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... Echo "Lima Mike Alfa";

Répondre à Doctor C

8

CaporalDead, le 14 jun 2007 à 02:29:06

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...

Répondre à CaporalDead

9

Doctor C, le 14 jun 2007 à 04:55:54

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 ? Echo "Lima Mike Alfa";

Répondre à Doctor C

10

CaporalDead, le 14 jun 2007 à 10:12:43

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

?>

Répondre à CaporalDead

11

tompouce, le 14 jun 2007 à 10:50:55

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 ;) @+

Répondre à tompouce

12

CaporalDead, le 14 jun 2007 à 10:52:01

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.

Répondre à CaporalDead

13

 CaporalDead, le 14 jun 2007 à 11:03:52

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".

Répondre à CaporalDead