Gecko64 Posté 22 Septembre 2008 Posté 22 Septembre 2008 Bonjour voilà j'ai une chose sur laquelle j'aimerais avoir une précision en PHP car ca n'est toujours pas clair dans mon esprit. En fait je cherche a générer un code de vérification avec la fonction rand(). Le souci que j'ai est que je génère un code que je stock dans une variable nommée $vrai_code et que a côté, je récupère le code tapé par l'utilisateur a partir d'un formulaire dans une variable $code. Ensuite, j'utilise une condition avec if ($code == $vrai_code) et hop il exécute une insertion dans un DB. Mon souci ben c'est que avec rand(); ca ne marche pas alors que si je définis dans le code un nombre statique, la ca va... Je me suis dis, ok je vais debug et faire un echo $vrai_code; pour voir si j'avais un nombre bien généré ce qui est le cas... Ma question: Pq par exemple 100 ( généré avec rand(); ) n'est pas le même que 100 ( récupéré avec un formulaire ) ? Je pense qu'il doit alors y avoir des types de variables comme en langage C ou je comparerais un String avec un int ? Quelqu'un pour m'aider? Merci
captain_torche Posté 22 Septembre 2008 Posté 22 Septembre 2008 Normalement, rand génère un nombre entre 0 et 1, c'est déjà bizarre que tu obtiennes 100. Pour ma part, pour générer un code de vérification, j'effectue un md5 sur une chaîne de caractères (rand, time, etc), et j'en récupère les 5 premiers caractères.
KnockedMaster Posté 22 Septembre 2008 Posté 22 Septembre 2008 Salut Gecko64, Je ne pense pas que cela vienne du typage des variables, c'est justement un des points faibles/forts de php. Cependant je n'en suis pas certain. Qu'est-ce que ça donne si tu utilises des guillemets (ce qui revient à dire qu'il s'agit d'une chaîne) ? Par contre en lisant ton post, je me demande s'il ne s'agit pas d'un problème de procédure ... Tu cherches à faire une sorte de code de vérification ? Si c'est le cas, le code est sans doute généré deux fois : une pour la première à la lecture, une seconde fois après envoi des données et rechargement de la page. Si c'est ça, il faut bien vérifier la façon dont tu stockes ta variable car il y a très peu de chance de tomber deux fois de suite sur le même nombre aléatoire ... Bon, c'est tordu comme hypothèse, mais ce n'est pas impossible Faudrait que tu en dises plus sur ta façon de procéder ... knockedmaster Normalement, rand génère un nombre entre 0 et 1, c'est déjà bizarre que tu obtiennes 100. Rand ne génére pas un nombre entre 0 et 1 ... rand La vérité est ailleurs
Gecko64 Posté 22 Septembre 2008 Auteur Posté 22 Septembre 2008 Normalement, rand génère un nombre entre 0 et 1, c'est déjà bizarre que tu obtiennes 100. Pour ma part, pour générer un code de vérification, j'effectue un md5 sur une chaîne de caractères (rand, time, etc), et j'en récupère les 5 premiers caractères. Ceci pourtant m'a bien donné un nombre entre 100 et 999 : rand(100, 999); Je l'a vérifié avec un echo Pour l'idée du md5, je note, ca peut toujours être utile aussi si je ne comprend pas au final ce qui cloche avec rand( ); Salut Gecko64, Je ne pense pas que cela vienne du typage des variables, c'est justement un des points faibles/forts de php. Cependant je n'en suis pas certain. Qu'est-ce que ça donne si tu utilises des guillemets (ce qui revient à dire qu'il s'agit d'une chaîne) ? Par contre en lisant ton post, je me demande s'il ne s'agit pas d'un problème de procédure ... Tu cherches à faire une sorte de code de vérification ? Si c'est le cas, le code est sans doute généré deux fois : une pour la première à la lecture, une seconde fois après envoi des données et rechargement de la page. Si c'est ça, il faut bien vérifier la façon dont tu stockes ta variable car il y a très peu de chance de tomber deux fois de suite sur le même nombre aléatoire ... Bon, c'est tordu comme hypothèse, mais ce n'est pas impossible Faudrait que tu en dises plus sur ta façon de procéder ... knockedmaster Je crois que tu as raison, je ne pensais plus que ma page était entièrement rechargée et donc mon ancien code effacé par le nouveau en début de cette même page :-/ J'aurais du y penser plus tôt... Je vais voir pour modifier ca Merci !
KnockedMaster Posté 22 Septembre 2008 Posté 22 Septembre 2008 De rien, vaut parfois mieux ce genre d'erreur facile à réparer ! @+
Gecko64 Posté 22 Septembre 2008 Auteur Posté 22 Septembre 2008 Oui enfin facile, j'ai changé mon endroit ou je génère mon code pour que il soit testé avant d'être a nouveau regénéré pour la tentative ou insertion suivante d'un message et malgrè ca, ca me fait toujours le même genre de souci... <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"><head> <title> Electricite Alain - Avis des clients </title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> <?php include("detect_browser_css.php");?> <Link rel="SHORTCUT ICON" href="images/favicon_2.ico"/> <style type="text/css"> table { border-collapse : collapse; border : 2px solid white; margin : auto; } th,td { border : 1px solid white; } </style></head><body><!-- Banniere Superieure--><?php include ("entete.php"); ?><!-- Menu lateral--><?php include ("menugauche.php"); ?><!-- Corps Central--><div id="corps"><h1>Laisser un commentaire :</h1><?phpinclude("connexion_BD.php");//Si le formulaire est complete.if(isset($_POST["bouton_OK"]) && $_POST["identite"]!=='' && $_POST["commentaire"]!=='' && $_POST["code"] == $vraicode){ //On recup les donnees. $identite = $_POST['identite']; $commentaire = $_POST['commentaire']; $date = date('Y,m,d'); $h = date('H'); $m = date('i'); $heure = $h.':'.$m; //On insere les données dans la base de donnée et on repropose le formulaire. mysql_query("INSERT INTO messages Values ('','$identite','$commentaire','$date','$heure')"); //On vide le contenu es variables. unset($_POST['identite']); unset($_POST['commentaire']); unset($_POST['code']);}//On genere un code.$vraicode = rand(100,999);?> <center> <form name="avisclient" method="post"> Identite : <input type="text" name="identite" value="<?php if(isset($_POST['identite'])){echo $_POST['identite'];}?>"></input> <?php if($_POST["identite"]==='') { ?> <font color="red">*</font> <?php } ?> <br/> Commentaire : <textarea type="textarea" name="commentaire" rows="3" cols="40"><?php if(isset($_POST['commentaire'])){echo $_POST['commentaire'];}?></textarea> <?php if($_POST["commentaire"]==='') { ?> <font color="red">*</font> <?php } ?> <br/> Code : <input type="text" name="code" value=""></input> <?php if($_POST["code"]==='') { ?> <font color="red">*</font> <?php } elseif(isset($_POST["code"])) { ?> <font color="red">Mauvais code</font> <?php } echo $vraicode; ?> <br/> <input type="submit" name="bouton_OK" value="Soumettre"> </form> </center>
KnockedMaster Posté 22 Septembre 2008 Posté 22 Septembre 2008 (modifié) Vi vi vi, ça ne peut pas aller comme ça if(isset($_POST["bouton_OK"]) && $_POST["identite"]!=='' && $_POST["commentaire"]!=='' && $_POST["code"] == $vraicode){blabla}//On genere un code.$vraicode = rand(100,999); Tu vérifies une variable qui n'existe pas puisque tu la déclares après ... Tu peux (dois) utiliser une variable de session pour mémoriser le nombre aléatoire généré : if(isset($_POST["bouton_OK"]) && $_POST["identite"]!=='' && $_POST["commentaire"]!=='' && $_POST["code"] == $_SESSION['vraicode']){blabla}else{//On genere un code.$vraicode = rand(100,999);// On l'enregistre dans une variable de session $_SESSION['vraicode'] = $vraicode;} N'oublie pas de placer un session_start(); tout au début de ton code, avant qu'il n'y ait le moindre affichage, sinon c'est le bug ! EDIT : tu peux aussi ajouter un else pour ne générer le code que s'il n'existe pas ou s'il est mauvais ... Je viens de tester ça fonctionne Tiens-nous au courant @+ Modifié 22 Septembre 2008 par KnockedMaster
Gecko64 Posté 22 Septembre 2008 Auteur Posté 22 Septembre 2008 Ha ben merci à toi KnockedMaster Je viens de faire les modifs et ca fonctionne sans souci maintenant Je commence a mieux comprendre
KnockedMaster Posté 22 Septembre 2008 Posté 22 Septembre 2008 A la bonne heure ! Content d'avoir pu t'aider et bonne continuation ... Knockedmaster
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant