2017-06-19 6 views
-1

ログインシステムに結果があるかどうかをテストするにはどうすればよいですか?ユーザー名とパスワードがデータベースの場合と同じである場合ログインシステムPHP手続き型準備文

ここにコード全体があります。問題は、私が何かでログインすることができるということです(たとえそれがデータベースにあっても、そうでなくても)。私は

$result = mysqli_stmt_execute($stmt); 
if($result){ 
    $rows = mysqli_stmt_num_rows($stmt); 
    echo 'rows: '.$rows; 
    /* you should be able to use $rows for a logic test */ 
    if($rows == 1){/* one exact match */} 
    else{ /* Bad foo - more than one or none */ } 
} 

信じています。このような$ stmtはオブジェクト上で直接テストすることができ

<?php 
$error=''; 


ini_set('display_errors', 1); 
ini_set('display_startup_errors', 1); 
error_reporting(E_ALL); 


if (isset($_POST['submit'])) { 
if (empty($_POST['login_username']) || empty($_POST['login_password'])) { 
$error = "Username or Password is invalid"; 
} 
else 
{ 

$username=$_POST['login_username']; 
$username= strtoupper($username); 
$password=$_POST['login_password']; 

$connect = mysqli_connect("localhost", "stringdot", "Ninja123") or die(mysqli_error()) ; 
$db = mysqli_select_db($connect, "ddbase") or die(mysqli_error($connect)); 

$password = hash('sha256', $password); 

if($stmt = mysqli_prepare($connect,"SELECT * from users where password=? AND username=?")){ 
    mysqli_stmt_bind_param($stmt, "ss", $password, $username); 
    mysqli_stmt_execute($stmt); 


if (!mysqli_stmt_error($stmt)) { 
session_start(); 
$_SESSION['logged'] = true; 
$_SESSION['login_username'] = $username; // Initializing Session 
header("location: ../public.php"); // Redirecting To Profile page 
exit(); 
} else { 
$_SESSION['logged']=false; 
$error = "Username or Password is invalid </br>"; 
echo $error; 
echo "Click <a href='/index.php'>aici</a> pentru a incerca din nou"; 
} 
mysqli_close($connect); 

} 
} 
} 
?> 
+0

あなたはプレーンテキストでパスワードを保存しましたか、あなたはそれをハッシュたのですか? –

+0

はい...私はSHA256を使用しています – StringShot

+0

*** PHPの[組み込み関数](http://jayblanchard.net/proper_password_hashing_with_PHP.html)***を使用してパスワードセキュリティを処理してください。 5.5より小さいPHPバージョンを使用している場合、 'password_hash()' [互換パック](https://github.com/ircmaxell/password_compat)を使用することができます。 ***ハッシュする前に[パスワードをエスケープする](http://stackoverflow.com/q/36628418/1011527)***または他のクレンジングメカニズムを使用する必要はありません。パスワードを変更すると、パスワードが変更され、不要な追加のコーディングが発生します。 –

答えて

0

-

<?php 
    session_start(); 

    error_reporting(E_ALL); 
    ini_set('display_errors', 1); 
    ini_set('display_startup_errors', 1); 


    if($_SERVER['REQUEST_METHOD']=='POST'){ 

     $username = !empty($_POST['login_username']) ? strtoupper($_POST['login_username']) : false; 
     $password = !empty($_POST['login_password']) ? hash('sha256', $_POST['login_password']) : false; 

     if($username && $password){ 


      $dbhost = 'localhost'; 
      $dbuser = 'stringdot'; 
      $dbpwd = 'Ninja123'; 
      $dbname = 'ddbase'; 
      $db  = new mysqli($dbhost, $dbuser, $dbpwd, $dbname); 

      $sql='select * from `users` where `password`=? and `username`=?'; 
      $stmt=$db->prepare($sql); 
      if($stmt){ 

       $stmt->bind_param('ss',$password,$username); 
       $result = $stmt->execute(); 
       $rows = $result ? $stmt->num_rows : 0; 

       if($rows == 1){ 
        $_SESSION['logged'] = true; 
        $_SESSION['login_username'] = $username; 
        exit(header('Location: ../public.php')); 
       } else { 
        $_SESSION['logged'] = false; 
        echo "Username or Password is invalid <br />Click <a href='/index.php'>aici</a> pentru a incerca din nou"; 
       } 
       $stmt->close(); 
      } 
      $db->close(); 
     } else { 
      /* either one or both are invalid */ 
      echo "Error: Both username & password are required"; 
     } 
    } 
?> 
+0

動作しません。 – StringShot

+0

をしようかを理解するために全体のコードを入れて – StringShot

+0

ちょうど成功に再びそれを設定する前に、セッション変数をクリアしようと失敗したものは何でもやってみtried..now –