Verification pour ne pas avoir un usager 2 fois

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Verification pour ne pas avoir un usager 2 fois

par leakcim51 » 04 août 2006, 09:43

désolé ce n'était pas le sens de ma remarque :?
Je voulais juste lui faire comprendre que si il ne comprenait pas avec cette fonction il pouvait passer par une structure en if qu'il maîtrise peut être mieux.

@+

par Hubert Roksor » 03 août 2006, 21:50

moi je te conseille de ne pas utiliser mysql_fetch_assoc si tu n'y arrive pas. [...]
Ben c'est vrai, pourquoi perdre du temps à essayer de comprendre alors qu'on peut taper des trucs au hasard jusqu'à ce que ça ait l'air de marcher ? :?

Pour info, je pense que c'est ce que tu cherches, HDoux:
<?php

$usager = mysql_real_escape_string($_POST['usager']);

$sql = "SELECT usager
        FROM formulaire_inscription
        WHERE usager = '" . $usager . "'";

$result = mysql_query($sql);

if ($result->fetch_assoc())
{
	// Si fetch_assoc() renvoit autre chose que FALSE alors il y a déjà
	// un utilisateur portant ce nom
	die('Doublon');
}
?>
Et n'oublie pas, si tu n'utilises pas mysql_real_escape_string() sur ce qu'a pu entrer l'utilisateur alors tu lui laisse la possibilité d'effacer toute ta base de données en un clic. Les injections SQL ne sont pas un secret partagé par quelques hackers du FBI, tout le monde connait donc n'importe quel gus qui passe sur ton site peut s'apercevoir qu'il a carte blanche pour faire ce qu'il veut avec ta base. En conclusion: mysql_real_escape_string() ;)

par leakcim51 » 03 août 2006, 10:30

Salut,

moi je te conseille de ne pas utiliser mysql_fetch_assoc si tu n'y arrive pas. Tu peux passer par un if.
$usager=$_POST['usager']; 
$password=$_POST['password']; 
$prenom=$_POST['prenom'];  
$email=$_POST['email']; 
$age=$_POST['age']; 
$fete=$_POST['fete']; 
$relation=$_POST['relation'];  
$categorie=$_POST['categorie'];  
mysql_connect("*******", "*******", "*******") or die(mysql_error());  
mysql_select_db("i4102095") or die(mysql_error());  
  
$sql2 = mysql_query("SELECT COUNT(id) as nbUsager FROM formulaire_inscription WHERE usager='$usager'");  

$data = mysql_fetch_array($sql2); 
  
 if($data['nbUsager'] > 0) { 
 echo'Attention <a href="javascript:history.back()">Choisissez un autre usager svp</a>'; 
 } 
 else {

$sql = mysql_query("INSERT INTO `formulaire_inscription` VALUES ('Id', '$usager', '$password', '$prenom', '$email', '$age', '$fete', '$relation', '$categorie')");
 
   echo "Vos informations ont été transmises à notre base de données.";</br></br> 
   echo 'Dernière étape avant de venir nous rejoindre et vous amuser !<a href="http://rencontre18.ifrance.com/formdescrip.htm">CONTINUER</a>' 
   exit; 
 }  
@+

Bon me voilà encore plus melé que je l'étais

par HDoux37 » 31 juil. 2006, 22:49

Bon je vous remercie beaucoup pour vos réponses, mais bon je suis encore plus mêlés que je l'étais.

Cyrano je comprends très bien la logique et ce que je veux faire, le probleme ce n'est pas la logique mais plutot comment programmer tout ça.

Mon code fonctionnait très bien, le seul problème c'est que les usagers pouvait avoir le meme usager et je ne voulais pas. Je ne suis qu'un débutant au niveau du PHP et MySQL et déjà que je suis content de ce que j'ai réussi à faire sur ce code à date alors ne m'en demandez pas tant :D

Bien à vous et merci d'avance à celui ou celle qui voudras bien m'aider de façon concrête.

Bonne journée !

par Hubert Roksor » 31 juil. 2006, 16:43

Alerte à l'injection SQL ! On n'utilise jamais jamais jamais dans une requête ce qu'a entré l'utilisateur sans l'échapper avec mysql_real_string_escape()

Sinon, pour vérifier si un nom est déjà pris, pas la peine de compter quoi que ce soit si le champs est UNIQUE, un simple

Code : Tout sélectionner

SELECT usager FROM formulaire_inscription WHERE usager = '...'
...suffit. Si mysql_fetch_assoc() ne retourne rien alors le nom est libre.

Attention également à déclarer le champs usager dans une collation insensible à la casse comme latin1_general_ci ou utf8_general_ci

par marghost » 31 juil. 2006, 06:52

ho ne faites pas attention a moi je ne fais que passer :)

Sa = YARK

Code : Tout sélectionner

$usager=$_POST['usager']; $password=$_POST['password']; $prenom=$_POST['prenom']; $email=$_POST['email']; $age=$_POST['age']; $fete=$_POST['fete']; $relation=$_POST['relation']; $categorie=$_POST['categorie'];

Code : Tout sélectionner

extract($_POST);
:wink:

par Cyrano » 31 juil. 2006, 06:43

As-tu songé à regarder dans la doc comment utiliser mysql_fetch_assoc() ? Cette fonction attend un seul paramètre, or tu en envoies deux. Donc forcément, l'interpréteur PHP te jette. Ensuite, le bout de code qui suit ne correspond pas aux requêtes : le première est une insertion, la seconde un simple comptage, or tu vérifies une valeur d'un champ qui n'st récupéré par aucune requête. Rien de tout ça ne peut fonctionner ensemble.

Reprends le raisonnement :
-1- un formulaire d'inscription où l'internaute choisit un nom d'usager et un mot de passe;
-2- tu récupères ces valeurs et les valides (non vides);
-3- Tu comptes dans la base le nombre d'usagers ayant déjà ce pseudonyme;
-4.1- Si le nombre retourné est différent de 0, tu affiches à nouveau le formulaire en invitant l'internaute à choisir un autre pseudonyme, celui-ci n'étant pas disponible;
-4.2- Sinon, tu construis la requête d'insertion et tu l'exécutes.

Reprends ton code sur cette base.

test sans succes

par HDoux37 » 31 juil. 2006, 04:57

Bonjour j'ai testé avec le code :

Code : Tout sélectionner

$sql = "SELECT COUNT(id) FROM ta_table WHERE usager='$usager'";
voici mon code:
<? 
$usager=$_POST['usager'];
$password=$_POST['password'];
$prenom=$_POST['prenom']; 
$email=$_POST['email'];
$age=$_POST['age'];
$fete=$_POST['fete'];
$relation=$_POST['relation']; 
$categorie=$_POST['categorie']; 
mysql_connect("*******", "*******", "*******") or die(mysql_error()); 
mysql_select_db("i4102095") or die(mysql_error()); 
$sql = mysql_query("INSERT INTO `formulaire_inscription` VALUES ('Id', '$usager', '$password', '$prenom', '$email', '$age', '$fete', '$relation', '$categorie')"); 
$sql2 = "SELECT COUNT(id) FROM formulaire_inscription WHERE usager='$usager'"; 

$data = mysql_fetch_assoc($sql, $sql2);
 
 if($data['usager'] != $usager) {
 echo'Attention <a href="javascript:history.back()">Choisissez un autre usager svp</a>';
 }
 else {
   echo "Vos informations ont été transmises à notre base de données.";</br></br>
   echo 'Dernière étape avant de venir nous rejoindre et vous amuser !<a href="http://rencontre18.ifrance.com/formdescrip.htm">CONTINUER</a>'
   exit;
 } 
?> 

ça me donne ce code d'erreur :

Code : Tout sélectionner

Warning: Wrong parameter count for mysql_fetch_assoc() in /www/sites/1/ifrance.com/r/e/rencontre18/site/inscription.php on line 23

Bon ok je comprends avec ce code que les deux ne vont pas ensemble. Ceci dit j'ai passer la journée complète à essayer des choses et a faire des test mais ça ne fonctionne pas.

Pourtant c'est simple l'usager entre ses infos dans le formulaire et quand il clique sur envoyer le script devrait védifier dans la base de donnée si usager existe déjà : s'il existe déjà un message s'affiche et lui demande de choisir un autre usager, et si il n'est pas déjà dans la base il enregistre le tout et continue.

Je suis vraiment dans le néant.

Merci à l'avance pour l'aide :)

je vais essayer de tester

par HDoux37 » 30 juil. 2006, 13:42

Bonjour,

merci pour les réponses, je vais essayer de tester à vrai dire je ne sais trop comment inserer ce code dans le mien mais bon y'a surement une question de if ladedans.

Parce que si un usager entre un "usager" qui n'est pas déjà dans la table alors il va recevoir le message :Vos informations ont été transmises à notre base de données.

Et si "usager" existe déja dans la table ben faudrait qu'il recoive un message du style : Le nom d'usager que vous avez inscrit est déjà utilisé, veuillez retourné en arriere et changer l'usager.

La logique est là, c'est de le faire qui est une autre paire de manche.

Je vais surement le faire avec ce code :

Code : Tout sélectionner

$sql = "SELECT COUNT(id) FROM ta_table WHERE usager='$usager'";

Si quelqu'un peut m'aider j'apprécierait beaucoup :D

par momox » 29 juil. 2006, 09:48

$sql = "SELECT COUNT(id) FROM ta_table WHERE usager='$usager'";
Ce serait mieux comme ca, ca éviterait d'avoir a faire un mysql_num_rows() après.

par Dom! » 29 juil. 2006, 08:31

Dans ton code tu peux ajouter un truc du genre :
 $sql = "SELECT id FROM ta_table WHERE usager='$usager'"; 
    $req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 
ta_table à remplacer par le nom de ta table évidemment :D

Verification pour ne pas avoir un usager 2 fois

par HDoux37 » 29 juil. 2006, 02:30

bonjour à tous,

j'ai ceci comme code et ça fonctionne très bien :
<? 
$usager=$_POST['usager'];
$password=$_POST['password'];
$prenom=$_POST['prenom']; 
$email=$_POST['email'];
$age=$_POST['age'];
$fete=$_POST['fete'];
$relation=$_POST['relation']; 
$categorie=$_POST['categorie']; 
mysql_connect("******", "********", "********") or die(mysql_error()); 
mysql_select_db("*****") or die(mysql_error()); 
mysql_query("INSERT INTO `formulaire_inscription` VALUES ('Id', '$usager', '$password', '$prenom', '$email', '$age', '$fete', '$relation', '$categorie')"); 
Print "Vos informations ont été transmises à notre base de données."; 
?> 
Je dois spécifier que dans ma base de données j'ai mis "unique" pour usager.

Ce que j'aimerais savoir c'est comment vérifier si le nom usager est déjà dans la base et si oui envoyer un message a la personnne pour qu'elle change son nom usager. Je suis vraiment coincé, j'ai fait des recherches mais sans résultat.

Merci d'avance !