Comparaison de requete SQL

Résolu
smoutsmout Messages postés 160 Date d'inscription   Statut Membre Dernière intervention   -  
smoutsmout Messages postés 160 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Contributeur Dernière intervention   1 608
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
Personne pour me dire comment je sais si ma requête a un résultat ?
0
Benno Messages postés 151 Date d'inscription   Statut Membre Dernière intervention   112
 
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   Statut Membre Dernière intervention  
 
ok merci, je vais tester ca.
0
smoutsmout Messages postés 160 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   112
 
$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   Statut Membre Dernière intervention  
 
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
toto
 
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
toto
 
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   Statut Membre Dernière intervention  
 
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
toto
 
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   Statut Membre Dernière intervention   19
 
$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
toto
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   19
 
t'as essayé ce que je t'ai donné ?
0
smoutsmout Messages postés 160 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
Je vois vraiment pas de quoi ca peut venir.
0
niahoo Messages postés 247 Date d'inscription   Statut Membre Dernière intervention   19
 
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   Statut Membre Dernière intervention  
 
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
toto
 
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