IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Insertion sur 2 tables liées par clé étrangère [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de lolymeupy
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2006
    Messages : 402
    Par défaut Insertion sur 2 tables liées par clé étrangère
    Bonjour,
    Voilà, j'ai deux tables :
    Table EVENEMENT
    {
    id
    titre
    descriptif
    ...
    id_ville (foreign key -> references ville(id))
    ...
    }

    et la Table VILLE
    {
    id
    nom_ville
    }

    Donc, qd j'enregistre un évenement dans la Table EVENEMENT, je dois d'abord vérifier que la "ville" saisie existe déjà ou non dans la Table VILLE. Si c'est le cas, je récupère l'id, sinon j'insert la nouvelle ville dans la Table VILLE et je récupère l'id...
    pour mettre cet id dans les champs de mon "insert into EVENEMENT..."

    J'ai d'abord essayé via du code php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    // je test l'existence ou non de la nouvelle ville dans la Table VILLE
    $req_ville = "SELECT nom_ville FROM ville WHERE nom_ville='$ville' ";
    $test_req_ville =mysql_query ($req_ville)or die('Erreur SQL !'.$req_ville.'<br>'.mysql_error());
     
    //je regarde le nombre d'occurences retournées
    $test = mysql_num_rows($test_req_ville);
     
    // s'il y en a au moins 1, la table existe
    if( $test >0 )
    {
    	//la ville est déjà dans la base
    	$req_ville = "SELECT id FROM ville WHERE nom_ville = '$ville' ";
    	$id_test = mysql_query ($req_ville) or die('Erreur SQL !'.$req_ville.'<br>'.mysql_error());	
    	$id_ville=mysql_query($req_ville);	
            $id_ville = mysql_fetch_object($id_test);
    	$id_ville = $id_ville->id;
    	echo "la ville est déjà dans la base<BR>";
        echo "$id_ville<BR>";
    }
    else 
    {
            //la ville n'existe pas encore dans la Table VILLE
    	$req_ville = "INSERT INTO ville (nom_ville) VALUES ('$ville')";
    	mysql_query($req_ville) or die('Erreur SQL !'.$req_ville.'<br>'.mysql_error());
    	$id_ville=mysql_insert_id();
    	//echo "la ville a été rajouté dans la base<BR>";
    	//echo "$id_ville<BR>";
    }
    Le problème c'est que je fais un upload de fichier également, et ce code "bloque" l'upload de fichier (ça fait 3 jours que je cherche et je sais pas pourquoi !)

    donc, je voulais savoir si ce serait pas mieux d'utiliser une procedure stockée directement, ou s'il n'existe pas une autre solution, via du code php, pour résoudre ce problème..?

    Merci d'avance.

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Bonjour

    Tout d'abord un truc qui me chagrine : tu fais deux fois la même requête à la suite et tu utilises le même nom de variable ($id_ville) plusieurs fois pour des choses différentes :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $req_ville = "SELECT id FROM ville WHERE nom_ville = '$ville' ";
    	$id_test = mysql_query ($req_ville) or die('Erreur SQL !'.$req_ville.'<br>'.mysql_error());	
    	$id_ville=mysql_query($req_ville);	
            $id_ville = mysql_fetch_object($id_test);
    	$id_ville = $id_ville->id;
    	echo "la ville est déjà dans la base<BR>";
    Je ne sais pas si ça a une influence, mais à ta place j'éviterais
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Août 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 514
    Par défaut
    Bonjour,
    tout à fait, Celira a bien raison. Pour moi, votre script est un brouillon.

    Pour donner un exemple minimaliste de ce qu'il faut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?php
     
      if (!mysql_connect('localhost', 'pseudo', 'pass') 
       || !mysql_select_db('base')) die(mysql_error());
     
      if (!$res = mysql_query("SELECT `id` FROM `ville` WHERE `nom_ville` = '$ville'"))
       die(mysql_error());;
     
      if (mysql_num_rows($res) === 1) $id_ville = mysql_result($res, 0);
      else
      {  
        if (!mysql_query("INSERT INTO `ville` (`nom_ville`) VALUES ('$ville')")) die(mysql_error());
        $id_ville = mysql_insert_id();    
      }
     
    ?>
    Cordialement,
    DaRiaN.

  4. #4
    Membre éclairé Avatar de lolymeupy
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2006
    Messages : 402
    Par défaut
    Effectivement...
    Je vas retravailler la "propreté" de mon code, et je vous tiens au courant.
    Merci à vous 2 pour ces remarques judicieuses.
    Sinon, que pensez-vous de la solution "procedure stockée" ?

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Août 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 514
    Par défaut
    Inutile dans un cas si banal, sans vouloir vous vexer.

  6. #6
    Membre éclairé Avatar de lolymeupy
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2006
    Messages : 402
    Par défaut
    ca ne me vexe pas du tout. Je considère que je suis là pour apprendre, donc au contraire, toutes les remarques sont les bienvenues..;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Update sur deux table relié par une clé étrangère.
    Par labib23dz dans le forum Développement
    Réponses: 5
    Dernier message: 18/04/2019, 11h40
  2. Update sur 2 tables liées par une FK
    Par enstein8 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 05/05/2012, 13h10
  3. Tronquer une table liée par des clés étrangères
    Par hazem2410 dans le forum Oracle
    Réponses: 11
    Dernier message: 10/11/2010, 15h15
  4. Faire un Insert sur plusieurs tables liées
    Par tiboleo dans le forum ASP.NET
    Réponses: 1
    Dernier message: 07/02/2010, 23h16
  5. Réponses: 3
    Dernier message: 09/06/2009, 10h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo