[resolu] verification des doublons avant insertion en db

Mammouth du PHP | 843 Messages

14 sept. 2006, 04:21

Salut à tous :wink:

dans un formulaire d'inscription en php, je souhaite verifier si le login et le nom+prenom existe deja avant d'enregistrer ces info en db :-k

il faut donc que je recherche dans la db si les variables login et nom+prenom existe déja...

j'ai fait un tour dans la doc sql mais c'est encore un peu complexe pour moi :?

vue que j'ai cru comprendre que le type de taille avait sont importance voici ma requete de création de la table:

Code : Tout sélectionner

CREATE TABLE table_membre( id int(11) AUTO_INCREMENT , pseudo VARCHAR(20) NOT NULL, mpass VARCHAR(20) NOT NULL, prenom VARCHAR(40) NOT NULL, nom VARCHAR(40) NOT NULL, phone CHAR(10) NOT NULL, email VARCHAR(40) NOT NULL, adresse VARCHAR(40) NOT NULL, postal CHAR(5) NOT NULL, ville VARCHAR(40) NOT NULL, datenaiss date NOT NULL, news char(2), PRIMARY KEY (id) ) DEFAULT CHARACTER SET latin2 COLLATE latin2_general_ci;
1°) pouvez vous me dire si ma table supporte les recherches?
2°) puis je tout rechercher d'un coup (soit login existant soit nom+prenom existant), ou doit-je faire deux requetes separer?
3°) doit je utiliser match ou existe il d'autre fonction de recherche plus adapter pour ma requete?
4°) comment se construit ma requete sql?
5°) comment récuperer les resultats de la requete afin de comparer avec mes variables php?

désoler pour la tartine de question et merci d'avance pour votre aide :wink:
Modifié en dernier par BeRoots le 15 sept. 2006, 06:31, modifié 1 fois.
:: contactez moi par MP ::
:non: NON au language SMS sur les forums :non:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

14 sept. 2006, 13:00

Je te conseille dans un premier temps de regarder la doc SQL pour comprendre comment fonctionne une requête SELECT ... FROM ... WHERE (voir peut être : http://www.tutosite.com/php/tuto3bdd.php)

En suite, regarder (même dans les faq de ce forum) comment PHP exécute des requêtes (voir les fonctions : mysql_connect(), mysql_select_db(), mysql_query(), mysql_fetch_array() ... )

Peut être après avoir compris et fais des exercices tu trouveras tout seul les réponses à toutes tes questions.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Invité
Invité n'ayant pas de compte PHPfrance

14 sept. 2006, 14:18

oui mais dans mon cas, je pense qu'un retour d'une valeur boléene serai le plus simple et le plus leger niveau code... :wink:

soit le login (ou le nom+prenom) existe et on retourne true, sinon false...

car sinon j'en arrive à faire ceci avec SELECT:
 $sql = "SELECT * FROM `matable` WHERE `login` = '$login' or `nom` = '$nom' and `prenom` = `$prenom`";
 $req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
// mise en tableau des resultats
while($data = mysql_fetch_array($req))
{
$login_result=$data[`login`];
$nomprenom_result=$data[`nom`],$data[`prenom`];
}
if($login_result != '')
{
//retour au formulaire + message d'erreur "existe deja"
}
elseif($nomprenom_result != '')
{
//retour au formulaire + message d'erreur "existe deja"
}
else
{
//insertion des champs du formulaire en db
}
qu'en penser vous?

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

14 sept. 2006, 15:08

On peut simplifier l'algorithme qui décide s'il faut retourner un message d'erreur ou faire l'insertion:

Table de vérité :
Si la requête retourne 1 enregistrement ALORS retour au formulaire + message d'erreur "existe deja"
SINON insertion des champs du formulaire en db

Ce qui veut dire que la requête peut retourner simplement le nombre de lignes trouvées (0 au min et 1 au max)
C'est faisable par SELECT COUNT(*) as NB

L'algo lui peut lire ce champ est se baser la table de décision
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Mammouth du PHP | 843 Messages

14 sept. 2006, 15:46

ça me donne maintenant quelque chose comme cela:
$sql = "SELECT COUNT(*) as NB FROM `matable` WHERE `login` = '$login' or (`nom` = '$nom' and `prenom` = '$prenom')";
 $req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
j'ai tester sous phpmyadmyn la requete et elle fonctionne très bien :wink:

par contre comment puis je recuperer la valeur retournée par cette requete?

je croit que c'est mysql_result qu'il faut utiliser mais je suis pas très sûr :-k
:: contactez moi par MP ::
:non: NON au language SMS sur les forums :non:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

14 sept. 2006, 16:18

Comme tout résultat d'un SELECT php utilise mysql_fetch_... pour d'abord lire une ligne du curseur résultat et l'affecter dans une variable qu'en suite on peut exploiter.

Exemple:
$resultat = mysql_query("SELECT a FROM table");
if ($resultat){
   //le lire
   while ( $ligne = mysql_fetch_assoc($resultat) ){
        $a = $ligne["a"]; //accès au champ a retourné par la requête SELECT
   }
}
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Mammouth du PHP | 843 Messages

14 sept. 2006, 16:39

haaaaaaaa, c'est pour ça que je trouvait rien sur NB dans la doc, c'est le nom du champs pour le tableau de résultat :oops:

je vait faire des test et je reviendrais mettre résolu si tout est ok...
encore merci pour ton aide sadeq :wink:
:: contactez moi par MP ::
:non: NON au language SMS sur les forums :non:

Mammouth du PHP | 843 Messages

15 sept. 2006, 06:30

Ok, tout fonctionne à merveille pour moi 8)

Un super merci à toi sadeq :wink:
:: contactez moi par MP ::
:non: NON au language SMS sur les forums :non: