Comparaison de requete SQL

Résolu/Fermé
smoutsmout Messages postés 160 Date d'inscription lundi 26 mai 2008 Statut Membre Dernière intervention 9 janvier 2009 - 8 janv. 2009 à 14:24
smoutsmout Messages postés 160 Date d'inscription lundi 26 mai 2008 Statut Membre Dernière intervention 9 janvier 2009 - 8 janv. 2009 à 18:01
Bonjour bonjour,

Voila, 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.

32 réponses

HostOfSeraphim Messages postés 6750 Date d'inscription jeudi 2 février 2006 Statut Contributeur Dernière intervention 31 juillet 2016 1 608
8 janv. 2009 à 14:27
Tu fais un select basé sur ces 3 champs : si tu as 0 ligne en retour, c'est que l'enregistrement existe déjà. Sinon, tu peux lancer la requête d'insertion.

0
smoutsmout Messages postés 160 Date d'inscription lundi 26 mai 2008 Statut Membre Dernière intervention 9 janvier 2009
8 janv. 2009 à 14:33
D'accord.

Et comment je fais pour savoir si il y a un résultat ?
Ca peut paraitre débile comme question mais je suis pas trop douée,lol.
0
smoutsmout Messages postés 160 Date d'inscription lundi 26 mai 2008 Statut Membre Dernière intervention 9 janvier 2009
8 janv. 2009 à 14:51
Personne pour me dire comment je sais si ma requête a un résultat ?
0
Benno Messages postés 151 Date d'inscription jeudi 1 mars 2007 Statut Membre Dernière intervention 13 avril 2009 112
8 janv. 2009 à 14:55
Tu peux faire simplement le test après avoir affecté le résultat de ta requète dans
$resultat
:
if(mssql_num_rows($resultat) == 0)
{
//Enregistrement présent dans la base
}
0

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

Posez votre question
smoutsmout Messages postés 160 Date d'inscription lundi 26 mai 2008 Statut Membre Dernière intervention 9 janvier 2009
8 janv. 2009 à 15:04
ok merci, je vais tester ca.
0
smoutsmout Messages postés 160 Date d'inscription lundi 26 mai 2008 Statut Membre Dernière intervention 9 janvier 2009
8 janv. 2009 à 15:21
J'ai fait ca.
Dans le formulaire je saisi des champs qui n'exixtent pas dans la base donc il devrait ajouter l'enregistrement.
Je n'ais pas de message d'erreur mais il ne se passe rien dans ma base de données.



<?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"]))
$pays=$_POST["fnom"];
$prenom=""; if(!empty($_POST["fprenom"]))
$pays=$_POST["fprenom"];
$date=""; if(!empty($_POST["fdate"]))
$pays=$_POST["fdate"];
// Recherche le numero du pays
$query = "SELECT nom, prenom, date_naissance FROM $table WHERE nom='$nom, prenom=$prenom, date_naissance=$date'";
if(($nom!='')&&($prenom!='')&&($date!=''))
{
$result = mssql_query($query);
if (mssql_num_rows($result) == 0)
{
$query1 = "insert into $table (code, nom, prenom, date_naissance) values ('000002', $nom, $prenom, $date)";
}
else
{
echo "Enregistrement déjà présent dans la base de données.";
}
}

@mssql_close(); // Fermeture de la connexion
?>

Ou est le probleme ?
0
Benno Messages postés 151 Date d'inscription jeudi 1 mars 2007 Statut Membre Dernière intervention 13 avril 2009 112
8 janv. 2009 à 15:28
$table="pilotes";
$nom="";
if(!empty($_POST["fnom"]))
    $pays=$_POST["fnom"];
$prenom="";
if(!empty($_POST["fprenom"]))
    $pays=$_POST["fprenom"];
$date="";
if(!empty($_POST["fdate"]))
    $pays=$_POST["fdate"]; 


Ton code d'affectation des données du formulaire (ci-dessus) n'est pas clair du tout : pourquoi affectes-tu à la suite 3 valeurs différentes à la suite à $pays?? Et pourquoi cette variable s'appelle-t-elle pays? :-)

Je te suggère donc pour que cela fonctionne:
$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"]; 
0
smoutsmout Messages postés 160 Date d'inscription lundi 26 mai 2008 Statut Membre Dernière intervention 9 janvier 2009
8 janv. 2009 à 15:32
oups sorry.

le truc c'est pas ca, c'était pas la bonne sauvegarde.

c'est ca en fait :

$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"];

c'est sur que c'était pas logique lol.
0
Bonjour
Les apostrophes doivent être autour de chaque valeur de champ :
$query = "SELECT nom, prenom, date_naissance FROM $table WHERE nom='$nom', prenom='$prenom', date_naissance='$date'"; 

de plus, ce test if(($nom!='')&&($prenom!='')&&($date!='')) est absurde : c'est toi qui as mis de valeurs dans les variables $nom, $prenom, etc...
Ne crois pas qu'elles sont modifiées par la requête.
Ce qu'il faut c'est vérifier si la requête te renvoie au moins une ligne de résultat, ce qui doit pouvoir se faire par un SELECT COUNT(*) from $table etc...
0
D'ailleurs, il y a une erreur de syntaxe, les conditions doivent être reliées par des AND
$query = "SELECT nom, prenom, date_naissance FROM $table WHERE nom='$nom' AND prenom='$prenom' AND date_naissance='$date'"; 
0
smoutsmout Messages postés 160 Date d'inscription lundi 26 mai 2008 Statut Membre Dernière intervention 9 janvier 2009
8 janv. 2009 à 15:47
Je veux bien te croire si tu dis que c'est absurde, je sais pas a quoi ca sert ca.

J'ai repris le code d'une autre appli pour faire ca, comme y avait ca et je ne savais pas à quoi ca sert j'ai préféré pas y toucher.

Donc si je te suis bien, dans $query, je doit mettre la requete select count(*)

c'est ca ?
0
Pardon, je crois bien que j'avais lu ton script un peu trop vite. Il n'est pas absurde.
Oublie tout ce que j'ai dit, sauf la remarque sur les apostrophes message 9

Les apostrophes doivent être autour de chaque valeur de champ :
$query = "SELECT nom, prenom, date_naissance FROM $table WHERE nom='$nom', prenom='$prenom', date_naissance='$date'"; 


mais il faut aussi exécuter ta requête $query1 si tu veux qu'elle fasse quelque chose dans ta base !
i
f (mssql_num_rows($result) == 0)
{
$query1 = "insert into $table (code, nom, prenom, date_naissance) values ('000002', $nom, $prenom, $date)";
mssql_query($query1);
} 
0
niahoo Messages postés 247 Date d'inscription lundi 24 décembre 2007 Statut Membre Dernière intervention 23 mai 2010 19
8 janv. 2009 à 16:06
$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
0
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'";
0
smoutsmout Messages postés 160 Date d'inscription lundi 26 mai 2008 Statut Membre Dernière intervention 9 janvier 2009
8 janv. 2009 à 16:13
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
0
niahoo Messages postés 247 Date d'inscription lundi 24 décembre 2007 Statut Membre Dernière intervention 23 mai 2010 19
8 janv. 2009 à 16:17
t'as essayé ce que je t'ai donné ?
0
smoutsmout Messages postés 160 Date d'inscription lundi 26 mai 2008 Statut Membre Dernière intervention 9 janvier 2009
8 janv. 2009 à 16:24
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
0
smoutsmout Messages postés 160 Date d'inscription lundi 26 mai 2008 Statut Membre Dernière intervention 9 janvier 2009
8 janv. 2009 à 16:38
Je vois vraiment pas de quoi ca peut venir.
0
niahoo Messages postés 247 Date d'inscription lundi 24 décembre 2007 Statut Membre Dernière intervention 23 mai 2010 19
8 janv. 2009 à 16:40
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");      }
}
0
smoutsmout Messages postés 160 Date d'inscription lundi 26 mai 2008 Statut Membre Dernière intervention 9 janvier 2009
8 janv. 2009 à 16:49
je vais devenir folle avec ce truc !!!

il ne se passe strictement rien.

Je doit faire un truc de travers c'est pas possible.
0
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 ?
0