我的PHP代码似乎不正确

时间:2017-07-15 09:31:13

标签: php mysql mysqli

我很困惑, 不久前我被告知我需要哈希我的密码,我认为我已经完成了,我在这里找到了一个单独的溢出问题How to use password_hash

但遗憾的是我尝试将其添加到我的代码中似乎没有任何效果。我被告知的另一件事是添加http://php.net/manual/en/mysqli.construct.php这使我更加困惑。我觉得我的代码都没有正确完成,我觉得自己是一个完全白痴因为不知道这些,我真的很抱歉。我问过4年前做过PHP的老师,但遗憾的是她也不知道。我真的想在编码方面做得更好,但我觉得我不知道这些。我真的尽力做到这一点,而不是要求溢出,因为我觉得我做错了:/。

我已经尝试在php网站上做了很多研究,我到处寻找可能的答案我将如何添加mysqli_construct。显然我有机会注入我的代码。我知道这可能很容易解决,但我完全被所有事情搞糊涂了,

再次感谢你能帮助我。

大卫,

-Code -

的index.php

<?php
   include("database.php");
   session_start();

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

      // Create querystring

      $sql = "SELECT id, password FROM admin WHERE username = ?";

      // Prepare, bind, execute

      $stmt = mysqli_prepare($db,$sql);
      mysqli_stmt_bind_param($stmt, 's', $_POST['username']);
      mysqli_stmt_execute($stmt);
      mysqli_stmt_bind_result($stmt, $user_id, $user_password);
      if (mysqli_stmt_fetch($stmt)) {

         // Validate password

         if (password_verify($_POST['password'], $user_password)) {
             session_register("username");
             $_SESSION['login_user'] = $username;

             header("location: myaccount.php");
            exit;
         } else {
             $error = "Your Login Name or Password is invalid";
         }
      mysqli_stmt_close($stmt);
      } else {
         $error = "Your Login Name or Password is invalid";
      }
   }
?>

database.php中

<?php

$host = 'localhost';
$user = '-';
$pass = '-';
$db = 'database';
$mysqli = new mysqli($host,$user,$pass,$db) or die($mysqli->error);

?>

我的错误日志

[15-Jul-2017 05:29:20 America/New_York] PHP Warning:  mysqli_prepare() expects parameter 1 to be mysqli, string given in /home/beaskxxb/public_html/index.php on line 10
[15-Jul-2017 05:29:20 America/New_York] PHP Warning:  mysqli_stmt_bind_param() expects parameter 1 to be mysqli_stmt, null given in /home/beaskxxb/public_html/index.php on line 11
[15-Jul-2017 05:29:20 America/New_York] PHP Warning:  mysqli_stmt_execute() expects parameter 1 to be mysqli_stmt, null given in /home/beaskxxb/public_html/index.php on line 12
[15-Jul-2017 05:29:20 America/New_York] PHP Warning:  mysqli_stmt_bind_result() expects parameter 1 to be mysqli_stmt, null given in /home/beaskxxb/public_html/index.php on line 13
[15-Jul-2017 05:29:20 America/New_York] PHP Warning:  mysqli_stmt_fetch() expects parameter 1 to be mysqli_stmt, null given in /home/beaskxxb/public_html/index.php on line 14

有人说我需要制作一个function.php?我深入研究了这一点,因为显然我没有定义所有内容, 我真的希望这个工作。因为它似乎要倒退, 对不起,我知道这不是很好。但我只想让它发挥作用,

编辑: admin的表结构:

1   username    longtext    latin1_swedish_ci   Yes NULL    Change Change   Drop Drop 
2   password    longtext    latin1_swedish_ci   No  None    Change Change Drop Drop

你的大卫。

1 个答案:

答案 0 :(得分:1)

首先 - 改变

$stmt = mysqli_prepare($db,$sql);

$stmt = mysqli_prepare($mysqli,$sql);

您传递的是数据库名称,而不是与数据库的连接。

如果表中没有名为id的列,则只需使用

即可
$sql = "SELECT password FROM admin WHERE username = ?";

正如您刚刚查看密码一样,这就是您所需要的一切。

要检查您的准备是否正常,请更改以下行...

if (!$stmt = mysqli_prepare($mysqli,$sql)) {
    echo "Failed to prepare:".mysqli_error($mysqli);
    return;
}

编辑: 从select中删除id后,您需要将绑定更改为...

mysqli_stmt_bind_result($stmt, $user_password);