2 mysql_insert_id() à la suite

Eléphanteau du PHP | 26 Messages

05 avr. 2006, 10:00

Bonjour;

Résolu, voir dernières questions sur mon cas en fin de page. Merci :wink: :wink:

Etant donné que celà traite exactement du même sujet je ne recréer pas un post.

Voilà, je fait un mysql_insert_id(); que je place dans une variable. Je l'incert dans ma requete pour remplire ma table intermédiaire. Jusque là tout va bien.

Mais j'ai une autre table intermédiaire à remplire avec cette variable, bien sur celà marche sans problème mais ce qui coince c'est que j'ai également une autre variable qui reprend le dernière id d'un autre insert dans une autre table.

Donc...je fait un INSERT suivi d'un mysql_insert_id(); que je place dans une variable. Ensuite je refait un autre INSERT et je refait mysql_insert_id(); que je place dans une variable.
Mais il ne me prend que le premier (dans la bonne variable) mais la seconde variable qui reprend le second mysql_insert_id(); est vide (0).

Quel est le problème? On ne peut faire deux fois un mysql_insert_id();? Si c'est le cas, avez vous une solutions?

Explication du rôle de la page: J'ajoute une oeuvre en envoyant un titre, une légende, une date, 3 images. Cette oeuvre est liée à une catégorie et à une expo. Cette dernière étant soit sélectionable via un Select soit ajoutable via un input de type text, d'où l'INSERT et la récupération du dernièr ID de expo.

Je vous donne le bout de code:

Le première mysql_insert_id(); se trouve dans:
//ADD Table Intermédiaire pour la Catégorie

et le second se trouve dans:
//ADD Table Intermédiaire pour l'Expo (projet)
        //ADD Oeuvre
        $oeuvre_name = trim($_POST['oeuvre_name']);
        $legende = trim($_POST['legende']);
        $pub = trim($_POST['pubList']);
        $date = trim($_POST['date']);
        if(empty($dest_fichier_detail) && empty($dest_fichier_detail2))
        {
            $query_add_oeuvre = "INSERT INTO t_oeuvre VALUES ('', '$oeuvre_name', '$dest_fichier_image', '$legende', '', '', '$date', '$pub')";
        }
        elseif (isset($dest_fichier_detail) && empty($dest_fichier_detail2))
        {
            $query_add_oeuvre = "INSERT INTO t_oeuvre VALUES ('', '$oeuvre_name', '$dest_fichier_image', '$legende', '$dest_fichier_detail', '', '$date', '$pub')";
        }
        elseif (empty($dest_fichier_detail) && isset($dest_fichier_detail2))
        {
            $query_add_oeuvre = "INSERT INTO t_oeuvre VALUES ('', '$oeuvre_name', '$dest_fichier_image', '$legende', '', '$dest_fichier_detail2', '$date', '$pub')";
        }
        else
        {
            $query_add_oeuvre = "INSERT INTO t_oeuvre VALUES ('', '$oeuvre_name', '$dest_fichier_image', '$legende', '$dest_fichier_detail', '$dest_fichier_detail2', '$date', '$pub')";
        }
        mysql_query($query_add_oeuvre) or die("Ajout d'oeuvre : ".mysql_error());
        //ADD Table Intermédiaire pour la Catégorie
        $cat = trim($_POST['catId']);
        $last_oeuvre = mysql_insert_id();
        $query_add_int_cat = "INSERT INTO t_oeuvre_cat VALUES ('$cat', '$last_oeuvre')";
        mysql_query($query_add_int_cat) or die("Ajout d'oeuvre table intermédiaire : ".mysql_error());
        //ADD Table Intermédiaire pour l'Expo (projet)
        if (isset($_POST['expoList']))
        {
            $expoList = trim($_POST['expoList']);
            $query_add_int_expo = "INSERT INTO t_oeuvre_expo VALUES ('$expoList', '$last_oeuvre')";
            mysql_query($query_add_int_expo) or die("Ajout d'oeuvre table intermédiaire : ".mysql_error());
        }
        elseif (isset($_POST['expo_add'])) 
        {
            $expo_add = trim($_POST['expo_add']);
            $query_new_expo = "INSERT INTO t_expo VALUE ('', '$expo_add')";
            mysql_query($query_new_expo) or die("Ajout d'oeuvre table intermédiaire : ".mysql_error());
            $last_expo = mysql_insert_id();
            $query_add_int_expo = "INSERT INTO t_oeuvre_expo VALUES ('$last_expo', '$last_oeuvre')";
            mysql_query($query_add_int_expo) or die("Ajout d'oeuvre table intermédiaire : ".mysql_error());
        }
Merci d'avance.
Kevin

ps: j'espère que mes explications sont complètes et compréhensibles.
Modifié en dernier par freemen le 07 avr. 2006, 10:11, modifié 2 fois.
Etudiant -- Infographiste Web/Multimédia

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

05 avr. 2006, 10:49

Salut,

c'est le même sujet mais pas le même problème => nouveau post

De plus, en posant ta question à la suite d'un sujet marqué [Résolu], tu diminues tes chances de la voir lue par les membres ;)

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

05 avr. 2006, 10:51

Je lis dans la doc :
Valeurs de retour

L'ID généré pour une colonne AUTO_INCREMENT par la dernière requête INSERT en cas de succès, 0 si la dernière requête n'a pas généré de valeur AUTO_INCREMENT, ou FALSE si aucune connexion MySQL n'a été établie.
Et tu me dis avoir un 0 dans la deuxième variable, as-tu vérifié que ta requête avait fonctionné ?

Mammouth du PHP | 19672 Messages

05 avr. 2006, 10:52

Si la seconde varriable est vide, vérifie donc l'exécution correcte de la requête correspondante :-k

Au passage, je te suggère une petite optimisation du code :
<?php
        //ADD Oeuvre
        $oeuvre_name = trim($_POST['oeuvre_name']);
        $legende     = trim($_POST['legende']);
        $pub         = trim($_POST['pubList']);
        $date        = trim($_POST['date']);
        $query_add_oeuvre = "INSERT INTO t_oeuvre VALUES ('', '". $oeuvre_name ."', '". $dest_fichier_image ."', '". $legende ."',";
        if(empty($dest_fichier_detail) && empty($dest_fichier_detail2))
        {
            $query_add_oeuvre .= " '', '', '". $date ."', '". $pub ."')";
        }
        elseif (isset($dest_fichier_detail) && empty($dest_fichier_detail2))
        {
            $query_add_oeuvre .= " '". $dest_fichier_detail ."', '', '". $date ."', '". $pub ."')";
        }
        elseif (empty($dest_fichier_detail) && isset($dest_fichier_detail2))
        {
            $query_add_oeuvre .= " '', '". $dest_fichier_detail2 ."', '". $date ."', '". $pub ."')";
        }
        else
        {
            $query_add_oeuvre .= " '". $dest_fichier_detail ."', '". $dest_fichier_detail2 ."', '". $date ."', '". $pub ."')";
        }
        mysql_query($query_add_oeuvre) or die("Ajout d'oeuvre : ".mysql_error());
        //ADD Table Intermédiaire pour la Catégorie
        $cat = trim($_POST['catId']);
        $last_oeuvre = mysql_insert_id();
        $query_add_int_cat = "INSERT INTO t_oeuvre_cat VALUES ('". $cat ."', '". $last_oeuvre ."')";
        mysql_query($query_add_int_cat) or die("Ajout d'oeuvre table intermédiaire : ". mysql_error());
        //ADD Table Intermédiaire pour l'Expo (projet)
        if (isset($_POST['expoList']))
        {
            $expoList = trim($_POST['expoList']);
            $query_add_int_expo = "INSERT INTO t_oeuvre_expo VALUES ('". $expoList ."', '". $last_oeuvre ."')";
            mysql_query($query_add_int_expo) or die("Ajout d'oeuvre table intermédiaire : ". mysql_error());
        }
        elseif (isset($_POST['expo_add'])) 
        {
            $expo_add = trim($_POST['expo_add']);
            $query_new_expo = "INSERT INTO t_expo VALUE ('', '". $expo_add ."')";
            mysql_query($query_new_expo) or die("Ajout d'oeuvre table intermédiaire : ".mysql_error());
            $last_expo = mysql_insert_id();
            $query_add_int_expo = "INSERT INTO t_oeuvre_expo VALUES ('". $last_expo ."', '". $last_oeuvre ."')";
            mysql_query($query_add_int_expo) or die("Ajout d'oeuvre table intermédiaire : ". mysql_error());
        }
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 26 Messages

05 avr. 2006, 11:06

Cyrano < tu peux frapper si tu veux :oops:

Je fesait ma vérification comme sagoin.

j'ai remplacé:
if (isset($_POST['expoList']))


par
if (empty($_POST['expo_add']))


Ca marche, merci. :wink:
Etudiant -- Infographiste Web/Multimédia

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

05 avr. 2006, 11:06

Résolu ?

Eléphanteau du PHP | 26 Messages

05 avr. 2006, 11:08

Par contre pourquoi inscrit tu tes variables comme ceci?
$query_add_oeuvre .= " '', '', '". $date ."', '". $pub ."')";
Ce n'est pas bon comme ça?
('','$oeuvre_name','$dest_fichier_image','$legende','$dest_fichier_detail','','$date','$pub')";
Je parle du '". ."'
Etudiant -- Infographiste Web/Multimédia

Mammouth du PHP | 19672 Messages

05 avr. 2006, 12:34

Ce que j'ai fait avec tes variable, ça s'appelle la concaténation pour séparer proprement le PHP de ce qui est chaine de caractère : ça fait moins de travail pour l'interpréteur PHP et du coup, tu vas gagner en performance : sur une simple ligne, ça ne sera pas mesurable ou peut-être au niveau de la nano-seconde, mais si tu fais toute une application comme ça et que le site est visité par des milliers de gens par jour, ça va commencer à se faire sentir davantage.

Code : Tout sélectionner

$query_add_oeuvre .= " '', '', '". $date ."', '". $pub ."')"; PHP | chaine | PHP |chai| PHP |ch|PHP
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 26 Messages

05 avr. 2006, 12:37

:wink: Merci pour l'info.
Etudiant -- Infographiste Web/Multimédia

Eléphanteau du PHP | 26 Messages

07 avr. 2006, 10:09

Question subsidiaire sur mon code. Cela ne risque pas d'être super lourd déjà là? Et surtout si j'ajoute imagecopyresampled pour crée un tumb au premier jpg ?
Etudiant -- Infographiste Web/Multimédia