Verifier avant d'ajouter un sujet
ladj59 Messages postés 322 Statut Membre -
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???
Configuration: Windows XP Internet Explorer 7.0
- Verifier avant d'ajouter un sujet
- Verifier compatibilite windows 11 - Guide
- Ajouter un chromecast - Guide
- Site pour verifier un lien - Guide
- Ajouter un profil netflix - Guide
- Ajouter un commentaire sur word - Guide
38 réponses
- 1
- 2
Problème : à chaque ajout d'un sujet dans la table sujets, vérifier qu'il n'existe pas déjà dans base_physique afin de l'insérer uniquement s'il est bien absent.
Plusieurs approches ont été proposées, notamment compter les occurrences dans sujets et insérer si le compte vaut zéro, ou utiliser une clause NOT EXISTS dans l'insertion pour éviter les doublons.
Des réponses signalent des erreurs de syntaxe, notamment l'utilisation incorrecte de COUNT(*) et la tentative d'INSERT ... WHERE NOT EXISTS, et conseillent de corriger la requête ou de scinder en deux scripts.
Pour une solution pratique, une insertion avec SELECT ... WHERE NOT EXISTS (SELECT 1 FROM base_physique WHERE sujet = '$sujet2') permet d'éviter les doublons sans étape préalable.
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
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."'");
}
}
?>
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionon 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
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
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...
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."')");
}
?>
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."')");
}
}
?>
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
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
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
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?
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>';
}
?>
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
- 1
- 2
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."'");
}
}
?>