2017-09-28 6 views
0

je faisais ce tutoriel How to create a login system in PHPdéclaration préparée exécute, mais je ne peux pas chercher les résultats

J'essaie d'utiliser une instruction IF pour vérifier si pour définir l'identifiant de session. Le courant permet à un utilisateur de se connecter et d'envoyer un écho à l'identifiant de session en cours. Lorsque j'entre un mot de passe erroné, le code devrait faire écho à un message, mais il ne fait rien. En outre, je suis incapable d'utiliser le bouton de déconnexion pour arrêter la session.

Voici ma page de connexion

<?php 
session_start(); 
//include 'dbh.php'; 
    //probably do not need this can write connection in this file too 
    $conn = new PDO('mysql:host=localhost;dbname=testtable', 'root', ''); 
    $conn->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ); 
     if(!$conn){ 
      die("Connection is fubar yo!!! "); 
     } 

    $uid = $_REQUEST['uid']; 
    $pwd = $_REQUEST['pwd']; 

    $sql = "SELECT * from user WHERE uid='$uid' AND pwd='$pwd'"; 

    $result = $conn->prepare($sql); 
    $result->execute(); 

    if(!$row = $result->fetch(PDO::FETCH_ASSOC)){ 
     echo("Your username or Password is wrong"); 
    } else { 
     echo("hey man..it works"); 
     $_SESSION['id'] = $row['id']; 
    } 

    header("Location: fakelogin.php"); 

?> 

Voici ma page de fermeture de session.

<?php 
session_start(); 
session_destroy(); 


header("Location: fakelogin.php"); 

?> 

Voici la page principale qui contient les boutons de connexion, d'inscription et de déconnexion.

<?php 
    session_start(); 
?> 

<!DOCTYPE HTML> 
<html> 
<head> 
    <meta charset="UTF-8"> 
    <title>Look ma, no hands!</title> 
</head> 
<body> 
    <form action="login.php" method="POST"> 
     <input type="text" name="uid" placeholder="Enter username"><br> 
     <input type="password" name="pwd" placeholder="Enter password"><br> 
     <button type="submit" id="login">LOGIN</button> 
    </form> 

    <?php 
     echo("testing"); 
     if(isset($_SESSION['id'])){ 
      echo($_SESSION['id']); 
     } else { 
      echo("You are not logged in"); 
     } 
    ?> 
    <br><br><br> 
    <form action="signup.php" method="POST"> 
     <input type="text" name="first" placeholder="Enter first name"><br> 
     <input type="text" name="last" placeholder="Enter last name"><br> 
     <input type="text" name="uid" placeholder="Enter username"><br> 
     <input type="password" name="pwd" placeholder="Enter password"><br> 
     <button type="submit" id="sbt">SIGN UP HERE YO!</button> 
    </form> 

    <br><br><br> 

    <form> 
     <button action="logout.php">LOG OUT</button> 
    </form> 
</body> 

</html> 
+1

Vous devriez probablement commenter la redirection d'en-tête lors du test. – josephting

+0

Je l'ai pris sur les deux. Je n'ai pas vu de changement. Juste pour le compte rendu, pourquoi est-ce une bonne idée de l'enlever lors des tests? – VK1

+0

Vous ne serez pas en mesure de voir le résultat, car vous verrez juste 'fakelogin.php' ou n'importe quelle page que vous avez redirigé après le processus est fait si vous laissez la redirection po Après avoir chargé votre page de connexion, vous êtes redirigé à fakelogin.php? Ou restez-vous sur la page de connexion? – josephting

Répondre

0

En fonction du code que vous avez fourni, vous revenez toujours à la page de connexion.

Lorsque vous êtes connecté, la chaîne sous le bouton de connexion indiquera test suivi de votre ID de compte.

Sinon, il affichera testingVous n'êtes pas connecté.

Vous ne pouvez pas ajouter de message sur login.php et vous vous attendez à ce qu'il apparaisse automatiquement sur fakelogin.php.

Il existe de nombreuses façons de partager des informations entre les pages et la variable de session en fait partie. En utilisant la méthode ci-dessous, vous pouvez définir la variable de session id comme "Votre nom d'utilisateur ou mot de passe est erroné" et puisque fakelogin.php l'affichera s'il y a une valeur, cela devrait afficher le message d'erreur.

login.php

<?php 
session_start(); 
//include 'dbh.php'; 
    //probably do not need this can write connection in this file too 
    $conn = new PDO('mysql:host=localhost;dbname=testtable', 'root', ''); 
    $conn->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ); 
     if(!$conn){ 
      die("Connection is fubar yo!!! "); 
     } 

    $uid = $_REQUEST['uid']; 
    $pwd = $_REQUEST['pwd']; 

    $sql = "SELECT * from user WHERE uid='$uid' AND pwd='$pwd'"; 

    $result = $conn->prepare($sql); 
    $result->execute(); 

    if(!$row = $result->fetch(PDO::FETCH_ASSOC)){ 
     echo("Your username or Password is wrong"); 
     $_SESSION['id'] = "Your username or Password is wrong"; 
    } else { 
     echo("hey man..it works"); 
     $_SESSION['id'] = $row['id']; 
    } 

    header("Location: fakelogin.php"); 

?> 

Ainsi, lorsque vous essayez de vous connecter avec des détails erronés, vous verrez nom d'utilisateur ou mot de passe testingYour est erroné.

En cas de problème avec votre bouton de déconnexion, il y a un problème avec votre code HTML. L'attribut action doit figurer dans la balise form et non dans la balise button comme ceci.

<form action="logout.php"> 
    <button>LOG OUT</button> 
</form> 
+0

Réponse impressionnante! Je vous remercie! – VK1