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 :

[SQL] Probleme sur requete


Sujet :

PHP & Base de données

  1. #1
    Invité(e)
    Invité(e)
    Par défaut [SQL] Probleme sur requete
    Bonjour,
    Je suis etudiant et j'ai un exercice à faire en php en relation avec une BDD. En gros je dois faire un dictionnaire de citation intératif avec nom d'auteur et texte. Pour ajouter une citation il faut que l'auteur ne soit pas deja present dans la table auteur ce qui fait que l'on créer un nouvel auteur et la citation associé avec un id. Sinon si il est deja présent on recupereson id et on l'associe a sa nouvel citation.
    Pour plus de compréhension voici mes fichiers parce que là je bloque :

    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
    30
    <?php
     
    	include('param.inc.php') ;
     
    	// Etape 1 : connexion au serveur de base de données MySQL
    	$idcom=mysql_connect(MYHOST,MYUSER,MYPASS) or die ("Erreur : ".mysql_error()) ;
    	$idbase=mysql_select_db(MYDB) or die ("Erreur : ".mysql_error()) ;
    	// Etape 2 : envoi de la requête SQL au serveur
    	$nom= $_POST['nom'];
    	$prenom = $_POST['prenom'];
    	$siecle = $_POST['siecle'];
    	$texte = $_POST['texte'];
     
    	if(mysql_query("SELECT auteur FROM auteur WHERE nom='".$nom."';",$idcom)){
    		$numID=mysql_query("SELECT id_auteur FROM auteur WHERE nom='".$nom."';",$idcom);
    		mysql_query("INSERT INTO citation VALUES(NULL,'".$numID."','".$texte."')",$idcom);
    		echo "Citation insèrée sans nouvel auteur";
    	}
    	else{
    		$numID=mysql_num_rows(mysql_query("SELECT id_auteur FROM auteur;",$idcom));
    		$numID++;
    		mysql_query("INSERT INTO auteur VALUES(".$numID.",'".$nom."','".$prenom."',".$siecle.")",$idcom);
    		mysql_query("INSERT INTO citation VALUES(NULL,'".$numID."','".$texte."')",$idcom);
    		echo "Citation insèrée avec nouvel auteur";
    	}
     
     
    	mysql_close($idcom) ;
     
    	?>
    Voici mes tables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    TABLE auteur (
    	id_auteur INT NOT NULL AUTO_INCREMENT,
    	nom VARCHAR(50), 
    	prenom VARCHAR(50),
     	siecle VARCHAR(50), 
            PRIMARY KEY(id_auteur) ) ;
    TABLE citation (
    	id_citation INT NOT NULL AUTO_INCREMENT,
    	id_auteur INT NOT NULL,
    	texte TEXT,
            PRIMARY KEY(id_citation,id_auteur) ) ;
    Mon principal problème est que en fait si l'auteur existe deja je ne veut pas recréer un autre auteur et la apparament avec ce que j'ai fais sa en créer un quand meme meme s'il a le même nom donc je ne comprend pas trop donc si vous auriez des solutions .

    Merci beaucoup

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Il faudrait éventuellement revoir vos clés sur la table auteur

    Par contre il est normal que vous n'obteniez pas le résultat escompté car :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(mysql_query("SELECT auteur FROM auteur WHERE nom='".$nom."';",$idcom)){
    Renverra toujours vrai sauf en cas d'erreur au niveau de la requête ou du SGBD.

    Il aurait fallu écrire le test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(mysql_query("SELECT auteur FROM auteur WHERE nom='".$nom."';",$idcom)){
    Comme ceci par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $row = mysql_query("SELECT id_auteur FROM auteur WHERE nom='".mysql_real_escape_string($nom)."'", $idcom) or die(mysql_error());
    if (mysql_num_rows($row) != 0) {
        $auteur = mysql_fetch_assoc($row);
        mysql_query("INSERT INTO citation VALUES(NULL, " . $auteur['id_auteur'] . ", '" . mysql_real_escape_string($texte) . "')", $idcom) or die(mysql_error());
        echo "Citation insérée sans nouvel auteur";
    } else {
        mysql_query("INSERT INTO auteur VALUES(NULL, '" . mysql_real_escape_string($nom) . "', '" . mysql_real_escape_string($prenom) . "', " . intval($siecle) . ")", $idcom) or die(mysql_error());
        mysql_query("INSERT INTO citation VALUES(NULL, LAST_INSERT_ID(), '" . mysql_real_escape_string($texte) . "')", $idcom) or die(mysql_error());
        echo "Citation insérée avec nouvel auteur";
    }
    (non testé)

    Puisque id_auteur est auto_incrémenté j'ai simplifié et j'en ai profité pour vous protéger des injections SQL.

  3. #3
    Invité(e)
    Invité(e)
    Par défaut
    Au final j'ai réussi pour ce que j'avais demandé mais j'un un autre problème différent je pense.
    Cela marche maintenant pour savoir si c'est un nouvel auteur ou pas. Mon seul problème maintenant est que l'ID de l'auteur doit etre aussi inscrit dans la table citation. Mes citation sont bien inscrites mais à l'ID auteur cela est toujours ecrit 0. Voici mon code :

    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
    30
    31
    32
    33
    34
    35
    <?php
     
    	include('param.inc.php') ;
     
    	// Etape 1 : connexion au serveur de base de données MySQL
    	$idcom=mysql_connect(MYHOST,MYUSER,MYPASS) or die ("Erreur : ".mysql_error()) ;
    	$idbase=mysql_select_db(MYDB) or die ("Erreur : ".mysql_error()) ;
    	// Etape 2 : envoi de la requête SQL au serveur
    	$nom= $_POST['nom'];
    	$prenom = $_POST['prenom'];
    	$siecle = $_POST['siecle'];
    	$texte = $_POST['texte'];
     
        $req="SELECT COUNT(*) FROM auteur WHERE nom='".$nom."'";
     
        $res=mysql_query($req);
     
        if(mysql_result($res,0)==0)
        {
    		mysql_query("INSERT INTO auteur VALUES(NULL,'".$nom."','".$prenom."',".$siecle.")",$idcom);
    		$numID=mysql_query("SELECT id_auteur FROM auteur WHERE nom='".$nom."';",$idcom);
    		mysql_query("INSERT INTO citation VALUES(NULL,'".$numID."','".$texte."')",$idcom);
     
    		echo "Citation insèrée avec nouvel auteur";
        }
        else{
    		$numID=mysql_query("SELECT id_auteur FROM auteur WHERE nom='".$nom."';",$idcom);
    		mysql_query("INSERT INTO citation VALUES(NULL,'".$numID."','".$texte."')",$idcom);
     
    		echo "Citation insèrée sans nouvel auteur";
        }
     
    	mysql_close($idcom) ;
     
    	?>
    Merci d'avance pour vos réponses
    PS: la où il y a '".$numID."' j'ai pourtant essayer en enlevant les ' car c'est un INT mais là c'est encore pire plus rien ne s'écrit dans la table citation .
    Merci bonne journée

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Une requête SELECT ne renvoie jamais une information précise : elle renvoie une ressource (s'il n'y a pas d'erreur) qui doit être exploitée par les fonctions mysql_fetch_*, j'ai déjà soulevé et corrigé ce point plus tôt

  5. #5
    Invité(e)
    Invité(e)
    Par défaut
    Voila tout marche bien merci beaucoup de vos aides !

Discussions similaires

  1. Probleme sur requete SQL
    Par xms54 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 24/10/2010, 18h17
  2. Réponses: 1
    Dernier message: 12/05/2009, 15h31
  3. [SQL] Probleme de requete sur une même table
    Par LP-mpascolo dans le forum Langage SQL
    Réponses: 3
    Dernier message: 30/01/2008, 14h02
  4. Plantage SQL Server sur requete de mise a jour
    Par Laurent_75000 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/09/2005, 10h00
  5. [SQL] probleme sur recherche
    Par Tib781 dans le forum Access
    Réponses: 2
    Dernier message: 19/05/2005, 12h31

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