Woody18 Posté 3 Mars 2010 Posté 3 Mars 2010 (modifié) Bonjour, Alors voilà j' ai essayer de refaire un script de membres par rapport à un script que j' ai trouver et donc j' ai tout modifier. Mon but est de pouvoir accéder à une page administrateur avec un login et mot de passe rentré manuellement dans la BDD afin de rajouter/supprimer des news par exemple ou autre ... Le problème c' est que j' envoi mes informations avec ce code : <div id="account"><div class="form"><form method="post"action="traitement.php"><label for="compte">Compte :</label><input type="text" name="login"/><br/><br/><label for="pass">Password :</label><input type="password" name="pass"/><br/><br/> ;<input type="submit" name="send" value="Envoyer"/></form></div> Et une fois les informations envoyés ma page de traitement reste blanche. Je ne sais pas d' ou cela peut venir je suis presque sur que ce n' est pas grand chose mais ça fait deux jours que je cherche en vain une réponse. Je désespère ! <?php //Transformation donnée POST en variable$login = htmlspecialchars($_POST['login']);$pass = htmlspecialchars($_POST['pass']);//Vérification postage login et passif (isset($_POST['login']) AND isset($_POST['pass'])){//Connexion à base de donnée sqlinclude('sql.php');//Tester si le couple login pass existe$sql = 'SELECT count(*) FROM admin WHERE login="'.mysql_escape_string('$login').'" AND pass="'.mysql_escape_string('$pass').'"';$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());$data = mysql_fetch_array($req);mysql_free_result($req);mysql_close();//Vérification utilisateur membreif ($data[0] == 1) {session_start();$_SESSION['login'] = ('$login');header('Location: membre.php');exit();}elseif ($data[0] == 0) {$erreur = 'Compte non reconnu.';}}else {echo 'Un des champs de connexion est vide.';}?> Je vous remercie d' avance pour votre aide. Cordialement Fred. Modifié 3 Mars 2010 par Woody18
Luan Posté 3 Mars 2010 Posté 3 Mars 2010 (modifié) Salut, Ton script a quelques problèmes... Je m'explique: $sql = 'SELECT count(*) FROM admin WHERE login="'.mysql_escape_string('$login').'" AND pass="'.mysql_escape_string($pass).'"'; Ici, tu ne fais que compter le nombre d'entrées répondant aux critères du login et du mdp. Ensuite, pourquoi utilises-tu mysql_free_result() pour une si petite requête ? Tu utilises $data[0], pour avoir une telle variable, tu aurais dû utiliser mysql_fetch_row() qui t'aurait permis de récupérer les valeurs de la base de donnée en tableau. Etant donné que cette variable n'est pas valide, la condition que tu écris plus bas ne sert à rien. Peut-être que c'est une méthode que je ne connais pas, si c'est le cas, désolé. Bref, voici ton code corrigé avec des explications afin que tu comprennes. Je te conseille de le refaire afin d'apprendre. Ton idée de base était bonne (vérifier si le nombre de donnée était plus grand que 1 avec double critère dans la requête, cependant, la méthode que je te propose d'utiliser est bien plus répandue et pratique dans le cas où il y aurait un souci de connexion. En bidouillant le code, on peut voir si c'est le mot de passe ou le nom d'utilisateur qui est mauvais. Après, c'est une question de goût. <?php //Transformation donnée POST en variable ; Ajout de addslashes dans le cas où il y aurait des apostrophes$login = htmlspecialchars(addslashes($_POST['login']));$pass = htmlspecialchars(addslashes($_POST['pass']));//Vérification postage login et passif (isset($login) AND isset($pass)){ //Connexion à base de donnée sql include('sql.php'); //Tester si le couple login pass existe // Cherchons dans la bdd le compte admin via le login $requete = mysql_query("SELECT login, pass FROM admin WHERE login='".mysql_escape_string('$login')."'"); if(mysql_num_rows($requete) < 1) { // Si le nombre d'entrée est inférieur à 1 echo 'Compte non reconnu.'; } else { // Sinon, cela signifie que le compte est reconnu, nous pouvons continuer $admin = mysql_fetch_array($requete); if ($admin['pass'] == $pass) { // Si le mot de passe de la bdd = à celui entré session_start(); $_SESSION['login'] = $login; header('Location: membre.php'); exit(); } else { // Sinon, compte non reconnu. echo 'Compte non reconnu.'; } }}else { echo 'Un des champs de connexion est vide.';}mysql_close();?> J'ai préféré refaire le code que d'expliquer car c'est relativement dur d'expliquer ce que l'on a en tête. Je me répète mais refais toi-même le script afin d'apprendre. Ce code est là afin de te permettre de comprendre comment t'y prendre. J'espère avoir pu t'aider en tout cas. Luan. PS: pense à indenter ton code, quand tu auras énormément de conditions, si tu n'indentes pas, tu auras du mal... PS2: quand tu utilises une fonction (genre addslashes() ou mysql_real_escape_string(), inutile de mettre les guillemets quand il y a une variable entre. Modifié 3 Mars 2010 par Luan
Woody18 Posté 4 Mars 2010 Auteur Posté 4 Mars 2010 hummm en fait j' ai essayer de comprendre ton code ... de l' utiliser donc aussi ... Et toujours le même problème page traitement blanche... Je sais pas trop comment faire du coup. Je pense que le problème doit venir d' ailleurs. Il doit manquer une information peut être ? PArce que en fait même en n' entrant rien le else devrait afficher quelque chose en l' occurence : <<Un des champs et vide>> Et la même pas... Merci pour ta réponse en tout cas
Luan Posté 5 Mars 2010 Posté 5 Mars 2010 Salut, Essaie d'enlever le exit(); Sinon, cela vent peut-être de l'hébergeur. Le fichier sql.php contient la connexion à la bdd je suppose ? Rien d'autre dedans qui pourrait embêter le script ? Luan.
Woody18 Posté 7 Mars 2010 Auteur Posté 7 Mars 2010 Bonsoir, Oui le fichier sql.php contient bien la connexion à la BDD. Je sais pas du tout comment faire je trouve pas de solution. Cela vient peut être de mon wamp. Est ce que par hasard t' accepterai que je t' envoi mes fichier en archive pour essayer chez toi ? Merci par avance
Luan Posté 8 Mars 2010 Posté 8 Mars 2010 Ca ne me dérange pas mais je doute que le problème vienne de MAMP. As-tu essayé d'enlever le exit(); ? Au cas où, remplace cette ligne: if (isset($login) AND isset($pass)) par celle-ci: if (isset($login) AND isset($pass) AND isset($_POST['send'])) Si tu veux m'envoyer, les fichiers, ça ne me pose pas de problème. Luan.
Woody18 Posté 8 Mars 2010 Auteur Posté 8 Mars 2010 Bah en fait oui j' ai enlevé le exit et tout ... rien n' y fait... Part contre pour t' envoyer les fichiers me faudrais ton adresse mail ...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant