Verifier avant d'ajouter un sujet

Fermé
ladj59 Messages postés 322 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 29 décembre 2008 - 21 avril 2008 à 13:47
ladj59 Messages postés 322 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 29 décembre 2008 - 5 mai 2008 à 08:51
Bonjour,

j'ai une table (base_physique)avec des sujets et une autre table(sujets) avec d'autres sujets
Tous les sujets de base_physique sont forcément dans mon formulaire et quand je rajoute un sujet dans la table sujets, je le rajoute que s'il n'est pas déja présent dans la table base_physique
il faut donc que a chaque fois que je rajoute un sujet dans la table sujets, je verifie qu'il ne soitr pas déja present dans la table base_physique

Comment faire svp???

38 réponses

sly-bzh Messages postés 415 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 5 décembre 2009 118
21 avril 2008 à 19:49
Bonjour,
Tu peux faire cela :
mysql_query = "INSERT INTO sujet VALUES .... IF NOT EXIST (SELECT * FROM base_physique WHERE .....)"; 


J'espère que ça te va...
0
ladj59 Messages postés 322 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 29 décembre 2008 3
21 avril 2008 à 20:31
j'ai essayé cela et ca ne marche pas et je comprends pas pourquoi


if(isset($_POST['sujet2']))
{

//ajout à la bdd
$sujet2=$_POST['sujet2'];
$nombre2=mysql_query("SELECT COUNT (*) AS nombre2 FROM sujets WHERE sujet2 ='$sujet2'");
$n2=$nombre2['nombre2'];
// nombre correspond au nombre de fois où le sujet est déjà présent
//s'il vaut 0 on l'ajoute sinon on passe

if ($n2==0)
{
mysql_query("INSERT INTO sujets VALUES('', '$sujet2') IF NOT EXIST (SELECT * FROM base_physique WHERE sujet LIKE '".$sujet2."'");
}
}
?>
0
sly-bzh Messages postés 415 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 5 décembre 2009 118
21 avril 2008 à 21:08
Je suppose qu'avant tu as mis tout ce qu'il fallait (mysql_connect, etc) J'espère que oui mais on ne sait jamais, mieux vaut demander...

Partons du principe que ce n'est pas cela le problème. On va partir dans du débugage
if(isset($_POST['sujet2']))
{
echo "on est bien entré dans le if isset <BR/>";
//ajout à la bdd
$sujet2=$_POST['sujet2'];
$nombre2=mysql_query("SELECT COUNT (*) AS nombre2 FROM sujets WHERE sujet2 ='$sujet2'") or die(mysql_error());
$n2=$nombre2['nombre2'];

echo "n2 vaut $n2 <BR />";
// nombre correspond au nombre de fois où le sujet est déjà présent
//s'il vaut 0 on l'ajoute sinon on passe

if ($n2==0)
{
echo "on est bien entré dans la boucle if ==0 <BR />"
$sql="INSERT INTO sujets VALUES('', '$sujet2') IF NOT EXIST (SELECT * FROM base_physique WHERE sujet LIKE '".$sujet2."'";
echo "La requète SQL qui va se lancer est : $sql";
mysql_query($sql) or die(mysql_error();
}
} 

Tu lance ça et normalement ça devrait t'apporter des infos intéressantes tu n'a qu'à me donner les infos que tu obtiens et je te dirais ce que ça vaut
0
ladj59 Messages postés 322 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 29 décembre 2008 3
21 avril 2008 à 21:21
ca renvoie ca

on est bien entré dans le if isset
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*) AS nombre2 FROM sujets WHERE sujet2 ='bbbb'' at line 1
0
sly-bzh Messages postés 415 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 5 décembre 2009 118
21 avril 2008 à 21:24
Effectivement j'avais pas vu l'erreur pourtant hyper classique : il ne faut pas mettre d'espace entre le COUNT et la parenthèse
Donc ceci devrait fonctionner :

if(isset($_POST['sujet2']))
{

//ajout à la bdd
$sujet2=$_POST['sujet2'];
$nombre2=mysql_query("SELECT COUNT(*) AS nombre2 FROM sujets WHERE sujet2 ='$sujet2'");
$n2=$nombre2['nombre2'];
// nombre correspond au nombre de fois où le sujet est déjà présent
//s'il vaut 0 on l'ajoute sinon on passe

if ($n2==0)
{
mysql_query("INSERT INTO sujets VALUES('', '$sujet2') IF NOT EXIST (SELECT * FROM base_physique WHERE sujet LIKE '".$sujet2."'");
}
}
?>
0
ladj59 Messages postés 322 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 29 décembre 2008 3
21 avril 2008 à 21:31
ok merci le probleme la est réglé mais maintenant il y a un autre probleme qui est :

on est bien entré dans le if isset
n2 vaut
on est bien entré dans la boucle if ==0
La requète SQL qui va se lancer est : INSERT INTO sujets VALUES('', 'le silice') IF NOT EXIST (SELECT * FROM base_physique WHERE sujet LIKE 'le silice'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF NOT EXIST (SELECT * FROM base_physique WHERE sujet LIKE 'le silice'' at line 1
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sly-bzh Messages postés 415 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 5 décembre 2009 118
21 avril 2008 à 22:27
OUPS avec un "s" à EXIST je pense que ça marchera mieux
:oops: :pas taper:
0
ladj59 Messages postés 322 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 29 décembre 2008 3
22 avril 2008 à 07:41
je n'ai pas compris ce que tu voulais dire
UN S A EXIST??
0
sly-bzh Messages postés 415 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 5 décembre 2009 118
22 avril 2008 à 13:37
"IF NOT EXISTS" c'est juste ça..
0
ladj59 Messages postés 322 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 29 décembre 2008 3
22 avril 2008 à 13:41
ca me mets encore cela quans je mets EXISTS

on est bien entré dans le if isset
n2 vaut
on est bien entré dans la boucle if ==0
La requète SQL qui va se lancer est : INSERT INTO sujets VALUES('', 'iii') IF NOT EXISTS (SELECT * FROM base_physique WHERE sujet LIKE 'iii'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF NOT EXISTS (SELECT * FROM base_physique WHERE sujet LIKE 'iii'' at line 1
0
sly-bzh Messages postés 415 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 5 décembre 2009 118
22 avril 2008 à 18:09
et avec un WHERE NOT EXISTS à la place du IF NOT EXISTS ? Excuse moi mais en fait ça fait longtemps que j'avais pas utilisé cela d'où mes retards à l'allumage...
0
ladj59 Messages postés 322 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 29 décembre 2008 3
22 avril 2008 à 18:58
ca marche toujours pas snif
au fait c'est normal que ca ne ette pas la valeur de n2 vaut
j'ai vraiment besoin que ca marche, tu ne vois pas un autre truc
c'est simpa de m'aider

on est bien entré dans le if isset
n2 vaut
on est bien entré dans la boucle if ==0
La requète SQL qui va se lancer est : INSERT INTO sujets VALUES('', 'tt') WHERE NOT EXISTS (SELECT * FROM base_physique WHERE sujet LIKE 'tt'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE NOT EXISTS (SELECT * FROM base_physique WHERE sujet LIKE 'tt'' at line 1
0
sly-bzh Messages postés 415 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 5 décembre 2009 118
22 avril 2008 à 19:43
Mouaif effectivement c'est pas normal mais bon vu que tu rentres dans la boucle c'est pas non plus la mort...
essaye ça :
$sujet2=$_POST['sujet2'];
$sql=mysql_query("SELECT COUNT (*) AS nombre2 FROM sujets WHERE sujet2 ='$sujet2'") or die(mysql_error());
$n2=$sql['nombre2'];

echo "n2 vaut ".$n2." <BR />";

Par contre quelque-chose de beaucoup plus grave est de fermer les parenthèses :
mysql_query("INSERT INTO sujets VALUES('', '$sujet2') IF NOT EXIST (SELECT * FROM base_physique WHERE sujet LIKE '".$sujet2."')");

En espérant que ça finisse par fonctionner...
0
ladj59 Messages postés 322 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 29 décembre 2008 3
22 avril 2008 à 20:04
voila ce que ca m'affiche : on est bien entré dans le if isset
n2 vaut
quand je tape le code du dessous.
le probléme c'est que cela ne m'ajoute pas le sujet dans la table sujets

if(isset($_POST['sujet2']))
{
echo "on est bien entré dans le if isset <BR/>";
//ajout à la bdd
$sujet2=$_POST['sujet2'];
$sql=mysql_query("SELECT COUNT(*) AS nombre2 FROM sujets WHERE sujet2 ='$sujet2'") or die(mysql_error());
$n2=$sql['nombre2'];

echo "n2 vaut $n2 <BR />";
// nombre correspond au nombre de fois où le sujet est déjà présent
//s'il vaut 0 on l'ajoute sinon on passe
mysql_query("INSERT INTO sujets VALUES('', '$sujet2') WHERE NOT EXISTS (SELECT * FROM base_physique WHERE sujet LIKE '".$sujet2."')");
}
?>
0
ladj59 Messages postés 322 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 29 décembre 2008 3
22 avril 2008 à 20:06
j'ai aussi erssayé IF NOT EXISTS au lieu de WHERE NOT EXISTS
0
ladj59 Messages postés 322 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 29 décembre 2008 3
22 avril 2008 à 20:44
tu n'as pas une autre idée qui me sauverait lol
0
sly-bzh Messages postés 415 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 5 décembre 2009 118
22 avril 2008 à 20:51
Je te propose d'arrêter de te faire ch... avec le count : tu n'as qu'à utiliser la fonction mysql_count_rows. Le fichier complet donnera :
if(isset($_POST['sujet2']))
{

//ajout à la bdd
$sujet2=$_POST['sujet2'];
$sql=mysql_query("SELECT * FROM sujets WHERE sujet2 ='$sujet2'");
$n2 = mysql_num_rows($sql);

echo "n2 vaut $n2";
// nombre correspond au nombre de fois où le sujet est déjà présent
//s'il vaut 0 on l'ajoute sinon on passe

if ($n2==0)
{
mysql_query("INSERT INTO sujets VALUES('', '$sujet2') WHERE NOT EXISTS (SELECT * FROM base_physique WHERE sujet LIKE '".$sujet2."')"); 
}
}
?>
0
ladj59 Messages postés 322 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 29 décembre 2008 3
22 avril 2008 à 21:07
ca affiche bien n2 vaut 0 quand le sujet n'est pas présent dans la tablr
par contr eje ne comprends pas car ca ne rajoute toujours pas le sujet dans sujets
je comprends pas pourquoi la requete ne march pas pour inseré
0
sly-bzh Messages postés 415 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 5 décembre 2009 118
22 avril 2008 à 21:22
Si t'es pressé d'avoir des résultats je te dirais bien de laisser tomber le WHERE NOT EXISTS et de faire ça :
if(isset($_POST['sujet2']))
{

//ajout à la bdd
$sujet2=$_POST['sujet2'];

$sql = mysql_query("SELECT * FROM sujets WHERE sujet2 ='$sujet2'");
$sql1 = mysql_query("SELECT * FROM base_physique WHERE sujet ='$sujet2'");
$n2 = mysql_num_rows($sql);
$n3 = mysql_num_rows($sql1);

echo "n2 vaut $n2 et n3 vaut $n3";
// nombre correspond au nombre de fois où le sujet est déjà présent
//s'il vaut 0 on l'ajoute sinon on passe

if ($n2==0 AND $n3==0)
{
mysql_query("INSERT INTO sujets VALUES('', '$sujet2') ") or die(mysql_error()); 
}
}
?>

Mais bon c'est fonctionnel mais c'est moins beau que le WHERE NOT EXISTS. Cependant comme je te l'ai déjà dit je n'ai plus utilisé cela depuis longtemps...
Sinon je te propose de recréer un topic où tu demanderais à d'autres gens que moi comment s'en servir... On ne sait jamais ça pourrait te resservir un jour !!!

Bon là ça marchera... A moins bien sûr que ta table sujets contient plus de 2 champs bien sûr
0
ladj59 Messages postés 322 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 29 décembre 2008 3
22 avril 2008 à 22:58
merci beaucoup cette solution conviendra parfaitement mais c'est quand même bizarre que cela ne marche pas avec le WHERE NOT EXISTS

bon ca c'est fait mais mon projet est loin detre terminé helas^^
je vais surement mettre de nouveaux post bientot, si tu les vois ce serait cool de m'aider car ca me permet d'avancer
donc encore une fois merci beaucoup
0
sly-bzh Messages postés 415 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 5 décembre 2009 118
23 avril 2008 à 00:04
Content que ça marche finalement mais cette solution je pense que tu aurais pu la trouver tout seul... Dommage de pas avoir réussi avec where not exists... (T'as essayé IF NOT EXISTS ? excuse-moi d'insister mais j'ai un sentiment d'inachevé)
Et si jamais tu as des nouveaux pb de php/sql t'auras qu'à m'envoyer un 'tit mp avec le lien vers le topic... ou pas vu comment je t'ai été d'une grande aide sur ce coup-ci :(

Bon courage pour la suite
0
ladj59 Messages postés 322 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 29 décembre 2008 3
23 avril 2008 à 08:27
oue j'avais essayé avec le IF NOT EXISTS et ca ne marche pas
En revanche, au niveau de l'affichage j'avais pas fais attention mais il y a un léger probléme, en effet, cela m'affiche tous les sujets de base_physique dans l'ordre alphabétique puis ensuite tous les sujets de sujets dans l'ordre alphabétique..
exemple : base physique a popo momo comme sujets
sujets a lens wowo

actuellement dans le formulaire cela me donne : momo popo lens wowo


alors que moi je voudrais : lens momo popo wowo


un ordre alphabétique unique regroupant tous les sujets des 2 tables....

C'est posssible?
0
sly-bzh Messages postés 415 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 5 décembre 2009 118
23 avril 2008 à 14:31
De quel affichage parles-tu ?
Je suppose que tu as essayé un ORDER BY ?
0
ladj59 Messages postés 322 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 29 décembre 2008 3
23 avril 2008 à 16:12
ben j'ai fait comme cela mais le probléme , c'est que ca mets les sujets de base_physique dans l'ordre alphabétique puis après ceux de sujets par ordre alphabétique

Mais moi je voudrais un ordre alphabétique global

le code :

$sujets=mysql_query("SELECT DISTINCT sujet FROM base_physique ORDER BY sujet");
$sujets2=mysql_query("SELECT DISTINCT sujet2 FROM sujets ORDER BY sujet2");

while ($sujet = mysql_fetch_array($sujets)) #propose tous les sujets présents dans la table
{
echo '<option value="'.$sujet['sujet'].'">'.$sujet['sujet'].'</option>';
}

while ($sujet2 = mysql_fetch_array($sujets2)) #propose tous les sujets présents dans la table
{

echo '<option value="'.$sujet2['sujet2'].'">'.$sujet2['sujet2'].'</option>';
}
?>
0
sly-bzh Messages postés 415 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 5 décembre 2009 118
23 avril 2008 à 21:20
Bonsoir,

Si tu n'as pas besoin de concerver la provenance des données (telle ou telle table) tu peux entrer toutes les valeurs dans un tableau que tu classeras ensuite
Un p'tit script vite fait :
$sujets=mysql_query("SELECT DISTINCT sujet FROM base_physique ORDER BY sujet");
$sujets2=mysql_query("SELECT DISTINCT sujet2 FROM sujets ORDER BY sujet2");
$n=0;
$tab = array();

while ($sujet = mysql_fetch_array($sujets)) #propose tous les sujets présents dans la table
{
	$data = $sujet['sujet'];
	$tab[$n] = $data;
	$n++;
}

while ($sujet2 = mysql_fetch_array($sujets2)) #propose tous les sujets présents dans la table
{
	$data = $sujet2['sujet2'];
	$tab[$n] = $data;
	$n++;
}
natcasesort($tab);
echo "<pre>";
print_r($tab);
echo "</pre>";
?>

Ensuite il te suffit de récupérer les valeurs dans le tableau $tab et de les entrer dans ton formulaire
0
ladj59 Messages postés 322 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 29 décembre 2008 3
25 avril 2008 à 13:29
ok je vais essayer
0
ladj59 Messages postés 322 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 29 décembre 2008 3
30 avril 2008 à 09:21
RE,

J'ai essayé avec le tableau mais je n'ai pas réussi à le faire.

d'ailleurs meme le printr_r &tab n'affiche rien

pourrais tu me donner la synrtaxe compléte stp pour que je puisse réessayer.

Merci
0