准备好的声明不返回

时间:2015-08-10 00:36:23

标签: php mysqli prepared-statement

我正在尝试确认用户是否提交了有效凭据。

HTML

<form action="assets/php/account/login_user.php" method="post" id="login" class="center">
    <div id="register_errorloc"></div>
    <div class="form-group">
        <input type="text" name="login_username" id="login_username" class="form-control" placeholder="Username" />
    </div>

    <div class="form-group">
        <input type="password" name="login_password" id="login_password" class="form-control" placeholder="Password" />
    </div>

    <div class="form-group">
        <input type="submit" value="login" id="submit_login" class="btn btn-success form-control"/>
     </div>
</form>

PHP

$username = trim($_POST['login_username']);
$password = hash('sha512',trim($_POST['login_password']));

//to check if values are correct by myself
echo '<br>' . $username . '<br>' . $password . '<br>';

include_once '../../../assets/php/DB/DBConnect.php';

//check if valid credentials are entered
$stmt = $conn->prepare("SELECT * FROM tbl_users WHERE username = ?");
echo $stmt->bind_param('s', $username);
echo $stmt->execute();
echo $stmt->store_result();

if($stmt->num_rows == 1){
    echo 'Good Creds';
}else{
    echo 'Bad Creds';
}

当我这样做时,它总是显示0结果。当我将查询字符串更改为

$stmt = $conn->prepare('SELECT * FROM tbl_users WHERE username = "abc"');

我得到了我正在寻找的结果。我很困惑,因为我在不同的页面上使用相同的方法,它的工作就像一个魅力。

截图

Login form

Submitted form

Row I'm looking for

编辑:添加了所有代码。

编辑2:添加了屏幕截图

编辑3:添加表单HTML

编辑4:

表单提交没有任何问题。当我像这样硬编码变量时:

$username ='abc';

它仍无效

2 个答案:

答案 0 :(得分:2)

<击> 对不起,但你发布的屏幕截图对我们没有帮助。

为了避免进一步评论,我提交以下内容。

您的表单及其相关元素可能失败,需要POST方法,并且每个表单都存在名称属性。

即:

<form method="post" action="???">
    <input type="text" name="login_username">
...

修改

尝试以下内容,评论过于广泛:

$check = $conn->prepare("SELECT * FROM tbl_users WHERE username=?");
    $check->bind_param("s", $username);
    $check->execute();
    $check->store_result(); 
    $row_chqry = $check->num_rows;

if($row_chqry  > 0 ) {

    echo "Exists";

$check->close(); 
$conn->close();

}

<击>

编辑#2:

OP发布了一个回答,声明他们使用相同的变量进行数据库连接。

我会立即发现并引发冲突的事情,已发布完整代码。我之前已经看过很多次,并且还记得为他们发布答案。至于它们到底在哪里,我需要一些时间来找到它们;但我确实记得发布相关问题的答案。

  • 哦,问题解决了。

解决方案:

  • 为您的用户名使用其他变量。
  • 使用唯一变量。

答案 1 :(得分:-1)

我终于找到了错误:

连接到我的数据库时,我使用:

row.insertCell(0)

在我的提交脚本中,我也使用$servername = ""; $username = ""; $password = ""; $db = ""; // Create connection $conn = mysqli_connect($servername, $username, $password, $db); // Check connection if (!$conn) { die("Connection failed: " . mysqli_connect_error()); } 。包括DBconnection文件导致我的本地变量(我从表单中获取的$username)被DBconnect中的用户名覆盖。