Comparaison de requete SQL
RésoluVoila, je fais une petite application php, je doit récupérer des données dans un formulaire et les entrer dans une base de données SQLServer. Jusque là rien de compliqué.
Mais avant d'enregistrer les données je voudrais vérifier si l'enregistrement n'existe pas déjà.
Pour cela je me base sur 3 champs (nom, prénom et date de naissance).
Je ne sais pas comment m'y prendre pour ce contrôle.
Si quelqu'un a une idée....
Merci d'avance pour votre aide.
Configuration: Windows XP Firefox 3.0.5
32 réponses
Une application PHP doit récupérer des données d'un formulaire et les insérer dans une base SQL Server, tout en évitant les doublons sur nom, prénom et date de naissance. Plusieurs réponses suggèrent de vérifier l'existence avec une requête SELECT utilisant les trois champs, puis d'insérer seulement si aucun enregistrement n'est trouvé. Des échanges portent aussi sur la syntaxe, notamment l'emploi correct de AND, et sur le choix entre SELECT COUNT(*) et la vérification directe via mssql_num_rows. Des extraits de code montrent des erreurs courantes liées à la gestion des POST, à la construction des requêtes et à la gestion des dates lors d'une insertion conditionnelle.
-
ah ok, je vois.
Merci bcp en tout cas. -
Il faut laisser faire l'auto-incrément de la table lors de l'insertion (donc mettre NULL en premier paramètre et non 0002).
@+ n'oublie pas de marquer comme résolu. -
Woah trop de la boulette ca marche, le nouvel enregistrement s'insere dans la table.
Un immense merci à toi !!!!!!
C'etait quoi qui allait pas ??? -
Attention la requete INSERT INTO a la fin a été modifiée, recopie bien tout:
<?php //script de connexion à la base sous SQLServer include("connexion.inc"); //connexion à la base de données $con = mssql_connect($host,$user,$pass)or die ("Probleme de connexion au serveur"); mssql_select_db($BDD,$con)or die ("Problème d'accès à la base de données bdd_test_pilotes"); //récupération des données formulaire $table="pilotes"; $nom=""; if(!empty($_POST["fnom"])) { $nom=$_POST["fnom"]; } $prenom=""; if(!empty($_POST["fprenom"])) { $prenom=$_POST["fprenom"]; } $date=""; if(!empty($_POST["fdate"])) { $date=$_POST["fdate"]; } //Test des valeurs reçues echo("Nom : " . $nom . "<br />Prenom : " . $prenom . "<br />Date naiss. :" . $date); //Requete SQL pour test $query = "SELECT * FROM " . $table . " WHERE nom='" . $nom . "' AND prenom='" . $prenom . "' AND date_naissance='" . $date . "'"; if(strlen($nom)!=0)&&(strlen($prenom)!=0)&&(strlen($date)!=0)) { $result = mssql_query($query, $con); echo("Nb enregistrement trouvé(s): ". mssql_num_rows($result)); if (mssql_num_rows($result) != 0) { echo "Enregistrement déjà présent dans la base de données."; } else { if(!mssql_query("INSERT INTO " . $table . "(code, nom, prenom, date_naissance) VALUES (NULL, '" . $nom . "', '" . $prenom . "', '" . $date . "')", $con)) { echo("erreur"); } else { echo("c'est bon"); } } } mssql_close(); // Fermeture de la connexion ?> -
ah ! changement ...
en plus des champs j'ai : NB enregistrements trouvés = 0 erreur -
Une dernière tentative...:
<?php //script de connexion à la base sous SQLServer include("connexion.inc"); //connexion à la base de données $con = mssql_connect($host,$user,$pass)or die ("Probleme de connexion au serveur"); mssql_select_db($BDD,$con)or die ("Problème d'accès à la base de données bdd_test_pilotes"); //récupération des données formulaire $table="pilotes"; $nom=""; if(!empty($_POST["fnom"])) { $nom=$_POST["fnom"]; } $prenom=""; if(!empty($_POST["fprenom"])) { $prenom=$_POST["fprenom"]; } $date=""; if(!empty($_POST["fdate"])) { $date=$_POST["fdate"]; } //Test des valeurs reçues echo("Nom : " . $nom . "<br />Prenom : " . $prenom . "<br />Date naiss. :" . $date); //Requete SQL pour test $query = "SELECT * FROM " . $table . " WHERE nom='" . $nom . "' AND prenom='" . $prenom . "' AND date_naissance='" . $date . "'"; if(strlen($nom)!=0)&&(strlen($prenom)!=0)&&(strlen($date)!=0)) { $result = mssql_query($query, $con); echo("Nb enregistrement trouvé(s): ". mssql_num_rows($result)); if (mssql_num_rows($result) != 0) { echo "Enregistrement déjà présent dans la base de données."; } else { if(!mssql_query("INSERT INTO " . $table . "(code, nom, prenom, date_naissance) VALUES ('000002', '" . $nom . "', '" . $prenom . "', '" . $date . "')", $con)) { echo("erreur"); } else { echo("c'est bon"); } } } mssql_close(); // Fermeture de la connexion ?> -
euh pareil, les champs du formulaires
-
Attention à la faute de frappe dans le code de Benno
if(($nom!='')&&($prenom!='')&&($date!=''))
-
Et ce code affiche quoi:
<?php //script de connexion à la base sous SQLServer include("connexion.inc"); //connexion à la base de données $con = mssql_connect($host,$user,$pass)or die ("Probleme de connexion au serveur"); mssql_select_db($BDD,$con)or die ("Problème d'accès à la base de données bdd_test_pilotes"); //récupération des données formulaire $table="pilotes"; $nom=""; if(!empty($_POST["fnom"])) { $nom=$_POST["fnom"]; } $prenom=""; if(!empty($_POST["fprenom"])) { $prenom=$_POST["fprenom"]; } $date=""; if(!empty($_POST["fdate"])) { $date=$_POST["fdate"]; } //Test des valeurs reçues echo("Nom : " . $nom . "<br />Prenom : " . $prenom . "<br />Date naiss. :" . $date); //Requete SQL pour test $query = "SELECT * FROM " . $table . " WHERE nom='" . $nom . "' AND prenom='" . $prenom . "' AND date_naissance='" . $date . "'"; if(($nom!="")&&($prenom!="")&&($date!="")) { $result = mssql_query($query, $con); echo("Nb enregistrement(s) trouvé(s): ". mssql_num_rows($result)); if (mssql_num_rows($result) != 0) { echo "Enregistrement déjà présent dans la base de données."; } else { if(!mssql_query("INSERT INTO " . $table . "(code, nom, prenom, date_naissance) VALUES (NULL, '" . $nom . "', '" . $prenom . "', '" . $date . "')", $con)) { echo("erreur"); } else { echo("c'est bon"); } } } mssql_close(); // Fermeture de la connexion ?> -
ya du mieu
Ca m'affiche les champs saisis dans le formulaire. -
Essaye ceci... (code reformaté avec quelques modifs)... Et dis moi ce qui s'affiche.
<?php //script de connexion à la base sous SQLServer include("connexion.inc"); //connexion à la base de données $con = mssql_connect($host,$user,$pass)or die ("Probleme de connexion au serveur"); mssql_select_db($BDD,$con)or die ("Problème d'accès à la base de données bdd_test_pilotes"); //récupération des données formulaire $table="pilotes"; $nom=""; if(!empty($_POST["fnom"])) { $nom=$_POST["fnom"]; } $prenom=""; if(!empty($_POST["fprenom"])) { $prenom=$_POST["fprenom"]; } $date=""; if(!empty($_POST["fdate"])) { $date=$_POST["fdate"]; } //Test des valeurs reçues echo("Nom : " . $nom . "<br />Prenom : " . $prenom . "<br />Date naiss. :" . $date); //Requete SQL pour test $query = "SELECT * FROM " . $table . " WHERE nom='" . $nom . "' AND prenom='" . $prenom . "' AND date_naissance='" . $date . "'"; if(($nom!='')&&($prenom!='')&&($date='')) { $result = mssql_query($query, $con); if (mssql_num_rows($result) != 0) { echo "Enregistrement déjà présent dans la base de données."; } else { if(!mssql_query("INSERT INTO " . $table . "(code, nom, prenom, date_naissance) VALUES ('000002', '" . $nom . "', '" . $prenom . "', '" . $date . "')", $con)) { echo("erreur"); } else { echo("c'est bon"); } } } mssql_close(); // Fermeture de la connexion ?> -
Avant j'y rentrais de sur, maintenant on dirais que non.
voici le code :
<?php
//script de connexion à la base sous SQLServer
include("connexion.inc");
//connexion à la base de données
$con=mssql_connect($host,$user,$pass)or die ("Probleme de connexion au serveur");
mssql_select_db($BDD,$con)or die ("Problème d'accès à la base de données bdd_test_pilotes");
//récupération des données formulaire
$table="pilotes";
$nom=""; if(!empty($_POST["fnom"]))
$nom=$_POST["fnom"];
$prenom=""; if(!empty($_POST["fprenom"]))
$prenom=$_POST["fprenom"];
$date=""; if(!empty($_POST["fdate"]))
$date=$_POST["fdate"];
//controle
$query = "SELECT nom, prenom, date_naissance FROM".$table."WHERE nom='".$nom."' AND prenom='".$prenom."' AND date_naissance='".$date."'";
if(($nom!='')&&($prenom!='')&&($date=''))
{
$result = mssql_query($query, $con);
if (mssql_num_rows($result) != 0)
{
echo "Enregistrement déjà présent dans la base de données.";
}
else
{
if(!mssql_query("insert into ".$table."(code, nom, prenom, date_naissance) values ('000002', '".$nom."', '".$prenom."', '".$date."')", $con))
{
echo("erreur");
}
else
{
echo("c'est bon");
}
}
}
@mssql_close(); // Fermeture de la connexion
?> -
Es-tu sûre de rentrer dans le if(($nom!='')&&($prenom!='')&&($date!='')) ? As-tu fait un echo pour t'en assurer ?
Peux-tu nous re-montrer le code tel qu'il est actuellement ? -
je vais devenir folle avec ce truc !!!
il ne se passe strictement rien.
Je doit faire un truc de travers c'est pas possible. -
essaie de lui rajouter des signalemens, comme ça:
$query = "SELECT nom, prenom, date_naissance FROM ".$table." WHERE nom='".$nom."' AND prenom='".$prenom".' AND date_naissance='".$date."'"; $rs=mssql_query($query, $con); if(mssql_num_rows($rs)!=0) { echo("Utilisateur déja enregistré"); } else { if(!mssql_query("INSERT INTO ".$table." (nom, prenom, date_naissance) VALUES ('".$nom."', '".$prenom."', '".$date."')", $con)) { echo("samarshpa"); } else { echo("c bon"); } } -
Je vois vraiment pas de quoi ca peut venir.
-
toto : J'ai bien rajouté les and aussi tkt, lol. ca fait rien.
niahoo : dsl ta solution ne marche pas non plus
C'est le néant aucune action, la requete insert ne s'effectue pas
mystère....lol -
j'ai bien mis les apostrophes.
et j'ai rajouté la ligne que tu m'a dit.
Mais il ne se passe rien dans la base.
et j'ai pas de message d'erreur c'est déjà bien. hi -
décidément, je n'y arriverai pas... Il faut bien les AND aussi
$query = "SELECT nom, prenom, date_naissance FROM $table WHERE nom='$nom' AND prenom='$prenom' AND date_naissance='$date'"; -
$query = "SELECT nom, prenom, date_naissance FROM ".$table." WHERE nom='".$nom."' AND prenom='".$prenom".' AND date_naissance='".$date."'"; $rs=mssql_query($query, $con); if(mssql_num_rows($rs)!=0) { echo("Utilisateur déja enregistré"); } else { mssql_query("INSERT INTO ".$table." (nom, prenom, date_naissance) VALUES ('".$nom."', '".$prenom."', '".$date."')", $con); }
si ton champ code est en auto increment ou serial, tu ne dois pas le mettre dan ta requête
- 1
- 2