Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/11/2007, 17h16   #1
Invité(e)
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
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 :
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 :
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
  Envoyer un message privé Réponse avec citation 00
Vieux 01/11/2007, 17h40   #2
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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 :
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 :
if(mysql_query("SELECT auteur FROM auteur WHERE nom='".$nom."';",$idcom)){
Comme ceci par exemple :
Code :
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.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2007, 13h49   #3
Invité(e)
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
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 :
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
  Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2007, 13h54   #4
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2007, 17h30   #5
Invité(e)
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Voila tout marche bien merci beaucoup de vos aides !
  Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h32.


 
 
 
 
Partenaires

Hébergement Web