Question Créer un nom d'utilisateur / mot de passe très simple en php


Je veux créer une connexion unique pour un seul utilisateur sans stocker dans une base de données, mais je n'arrive pas à le faire fonctionner.

Mon code: login.php

<html>
<head>
  <title>Login</title>
</head>
<h3>Add entry</h3>
<p> Add another Article</p>
<form action="trylog.php" method = "post">
  <label for="username">Username</label> <input type="username" id="usename" name="username"><br /><br />
  <label for="password">Password:</label> <input type="text" id="password" name="password"><br /><br />
  <button type = "submit">Login</button>
</form>
</html>

trylog.php

<html>
<title>Login</title>
<body>
  <?php
  $usr = "admin";
  $psw = "password";
  $username = '$_POST[username]';
  $password = '$_POST[password]';
  //$usr == $username && $psw == $password
  session_start();
  if ($_SESSION['login']==true || ($_POST['username']=="admin" && $_POST['password']=="password")) {
    echo "password accepted";
    $_SESSION['login']=true;
    else {
      echo "incorrect login";
    }
    ?>

  <form name="input" action="adminportal.php" method="get">
    <input type="submit" value="Home">
  </form>
</body>
</html>

10
2017-10-23 01:09


origine


Réponses:


Votre code pourrait ressembler davantage à:

<?php
session_start();
$errorMsg = "";
$validUser = $_SESSION["login"] === true;
if(isset($_POST["sub"])) {
  $validUser = $_POST["username"] == "admin" && $_POST["password"] == "password";
  if(!$validUser) $errorMsg = "Invalid username or password.";
  else $_SESSION["login"] = true;
}
if($validUser) {
   header("Location: /login-success.php"); die();
}
?>
<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="content-type" content="text/html;charset=utf-8" />
  <title>Login</title>
</head>
<body>
  <form name="input" action="" method="post">
    <label for="username">Username:</label><input type="text" value="<?= $_POST["username"] ?>" id="username" name="username" />
    <label for="password">Password:</label><input type="password" value="" id="password" name="password" />
    <div class="error"><?= $errorMsg ?></div>
    <input type="submit" value="Home" name="sub" />
  </form>
</body>
</html>

Maintenant, lorsque la page est redirigée en fonction du header('LOCATION:wherever.php), mettre session_start() en haut de la page et test pour vous assurer $_SESSION['login'] === true. Rappelez-vous que == serait vrai si $_SESSION['login'] == 1 ainsi que. Bien sûr, c'est une mauvaise idée pour des raisons de sécurité, mais mon exemple peut vous apprendre une autre façon d'utiliser PHP.


21
2017-10-23 01:34



Voici un script php simple pour la connexion et une page accessible uniquement aux utilisateurs connectés.

login.php

<?php
    session_start();
    echo isset($_SESSION['login']);
    if(isset($_SESSION['login'])) {
      header('LOCATION:index.php'); die();
    }
?>
<!DOCTYPE html>
<html>
   <head>
     <meta http-equiv='content-type' content='text/html;charset=utf-8' />
     <title>Login</title>
     <meta charset="utf-8">
     <meta name="viewport" content="width=device-width, initial-scale=1">
     <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
   </head>
<body>
  <div class="container">
    <h3 class="text-center">Login</h3>
    <?php
      if(isset($_POST['submit'])){
        $username = $_POST['username']; $password = $_POST['password'];
        if($username === 'admin' && $password === 'password'){
          $_SESSION['login'] = true; header('LOCATION:admin.php'); die();
        } {
          echo "<div class='alert alert-danger'>Username and Password do not match.</div>";
        }

      }
    ?>
    <form action="" method="post">
      <div class="form-group">
        <label for="username">Username:</label>
        <input type="text" class="form-control" id="username" name="username" required>
      </div>
      <div class="form-group">
        <label for="pwd">Password:</label>
        <input type="password" class="form-control" id="pwd" name="password" required>
      </div>
      <button type="submit" name="submit" class="btn btn-default">Login</button>
    </form>
  </div>
</body>
</html>

admin.php (seuls les utilisateurs connectés peuvent y accéder)

<?php
    session_start();
    if(!isset($_SESSION['login'])) {
        header('LOCATION:login.php'); die();
    }
?>
<html>
    <head>
        <title>Admin Page</title>
    </head>
    <body>
        This is admin page view able only by logged in users.
    </body> 
</html>

4
2018-04-13 16:20



Tout d'abord, vous devez mettre session_start(); avant toute sortie vers le navigateur, normalement en haut de la page. Regardez le manuel.

Deuxièmement, cela n'affectera pas vos résultats, mais ces lignes ne sont utilisées nulle part et doivent être supprimées:

$usr = "admin";
$psw = "password";
$username = '$_POST[username]';
$password = '$_POST[password]';

... et les deux dernières lignes ne fonctionneraient pas, vous devez mettre les guillemets entre crochets:

$username = $_POST['username'];

Si vous mettez session_start() en haut de votre page (c.-à-d. avant la <html> tag etc), cela devrait fonctionner correctement.


1
2017-10-23 01:17



<?php
session_start();
  mysql_connect('localhost','root','');
    mysql_select_db('database name goes here');
    $error_msg=NULL;
    //log out code
    if(isset($_REQUEST['logout'])){
                unset($_SESSION['user']);
                unset($_SESSION['username']);
                unset($_SESSION['id']);
                unset($_SESSION['role']);
        session_destroy();
    }
    //

    if(!empty($_POST['submit'])){
        if(empty($_POST['username']))
            $error_msg='please enter username';
        if(empty($_POST['password']))
            $error_msg='please enter password';
        if(empty($error_msg)){
            $sql="SELECT*FROM users WHERE username='%s' AND password='%s'";
            $sql=sprintf($sql,$_POST['username'],md5($_POST['password']));
            $records=mysql_query($sql) or die(mysql_error());

            if($record_new=mysql_fetch_array($records)){

                $_SESSION['user']=$record_new;
                $_SESSION['id']=$record_new['id'];
                $_SESSION['username']=$record_new['username'];
                $_SESSION['role']=$record_new['role'];
                header('location:index.php');
                $error_msg='welcome';
                exit();
            }else{
                $error_msg='invalid details';
            }
        }       
    }

?>

// replace the location with whatever page u want the user to visit when he/she log in

1
2017-09-04 11:34



Votre code pourrait ressembler davantage à:

<?php
session_start(); $username = $password = $userError = $passError = '';
if(isset($_POST['sub'])){
  $username = $_POST['username']; $password = $_POST['password'];
  if($username === 'admin' && $password === 'password'){
    $_SESSION['login'] = true; header('LOCATION:wherever.php'); die();
  }
  if($username !== 'admin')$userError = 'Invalid Username';
  if($password !== 'password')$passError = 'Invalid Password';
}
?>
<!DOCTYPE html>
<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'>
   <head>
     <meta http-equiv='content-type' content='text/html;charset=utf-8' />
     <title>Login</title>
     <style type='text.css'>
       @import common.css;
     </style>
   </head>
<body>
  <form name='input' action='<?php echo $_SERVER['PHP_SELF'];?>' method='post'>
    <label for='username'></label><input type='text' value='<?php echo $username;?>' id='username' name='username' />
    <div class='error'><?php echo $userError;?></div>
    <label for='password'></label><input type='password' value='<?php echo $password;?>' id='password' name='password' />
    <div class='error'><?php echo $passError;?></div>
    <input type='submit' value='Home' name='sub' />
  </form>
  <script type='text/javascript' src='common.js'></script>
</body>
</html>

0
2018-01-06 14:44