Page 1 sur 1

3 table mysql enregistrée à la suite

Posté : 03 oct. 2005, 07:12
par gwendal
Bonjour,

Je vous explique la situation actuel de mes 3 tables.

Une table client
Une table clientlivraison
Une table commandes

Quand j'enregistre dans table client je récupère le last_id pour l'enregistrer dans table cilentlivraison et je récupère le last_id de clientlivraison pour pouvoir enregistrer dans la table commande les deux id récupérés avant.

Ce week-end , suite à des perturbations multiples, doublé d'un bug dans un des mes fichiers, lors de l'enregistrement, il y a eu des problème et les enregistrements ne se sont pas toujours fait dans le bonne ordre.

Je voulais savoir comment je pouvais m'assurer que les 3 tables sont bien renseignés avant de les enregistrer dans la base de données.

Car dans mon cas si la table clientlivraion n'est pas enregistrée la commande est fausse puisque l'id n'est pas bon, au résultat un commande sans adresse de livraison :-(

Merci d'avance

Posté : 03 oct. 2005, 07:21
par DocType
Je pense si je ne me trompe pas que ton problème appartient au langage de programmation...
si tu utilise PHP, des tests peuvent être effectués sur les requêtes PHP à la BDD. Ainsi, tu contrôle efficacement tout ce que tu fais.

Maintenant, je trouve que ton message n'est pas assez précis. Une structure des tables avec un descriptif sur le fonctionnement de ton programme seraient appréciable :roll:
Là, j'ai actuellement compris que l'utilisateur fournit des données qui partent dans 3 tables différentes et qui doivent être liées

Posté : 03 oct. 2005, 10:18
par gwendal
En effet mon explication est pas trés clair

J'ai donc 3 tables

Client, clientlivraison et commande

Voila la structure :

$query="INSERT INTO client .....";
$result=mysql_query($query);
Recupération du last_id

$query="INSERT INTO clientlivraison ....."; // Enregistrement de l'id client
$result=mysql_query($query);
Recupération du last_id

$query="INSERT INTO commande ....."; // Enregistrement des deux id du dessus
$result=mysql_query($query);


J'enregistre donc client en premier, mais si il y a une erreur dans l'enregistrement de clientlivraison alors mon client est tous de même enregistré donc problème après dans mes tables

Je voudrais savoir en fait si il y a un moyen de préparer ses 3 requettes et de les enregistrer en même temps pour ne plus avoir ce problème.

Posté : 03 oct. 2005, 10:26
par Cyrano
Ce que tu peux sommairement faire, c'est des insertions en cascade sur test, voici un schéma sommaire:
<?php
$query = "INSERT INTO client .....";
if($result = mysql_query($query))
{
    /* Recupération du last_id */
    $id = mysql_insert_id($result);

    $query = "INSERT INTO clientlivraison ....."; // Enregistrement de l'id client
    if($result=mysql_query($query))
    {
        /* Recupération du last_id */
        $id = mysql_insert_id($result);

        $query = "INSERT INTO commande ....."; // Enregistrement des deux id du dessus
        if($result=mysql_query($query))
        {

            // message de réussite complète
        }
        else
        {
            // message dernière insertion table commande loupée
        }
    }
    else
    {
        // message seconde insertion table clientlivraison loupée et dernière insertion non effectuée
    }
}
else
{
    // message première insertion table client loupée, insertions 2 et 3 non effectuées
}
?>

Posté : 03 oct. 2005, 14:06
par gwendal
Merci encore une fois Cyrano :-)