准备好的语句不返回任何内容
Prepared statement returning nothing
我正在尝试确认用户是否提交了有效凭据。
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"');
我得到了我想要的结果。我很困惑,因为我在不同的页面上使用了相同的方法,而且效果很好。
截图
编辑:添加了所有代码。
Edit2:添加了屏幕截图
Edit3:添加表格 HTML
编辑4:
表单提交没有问题。当我像这样对变量进行硬编码时:
$username ='abc';
还是不行
很抱歉,您发布的屏幕截图对我们没有帮助。
为了避免进一步评论,我提交以下内容。
您的表单及其相关元素可能会失败,需要一个 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 发布了一个回答,指出他们正在为他们的数据库连接使用相同的变量。
如果发布了完整的代码,我会立即发现并导致冲突的东西。我以前见过这种情况发生过好几次,记得也为他们发布了答案。至于具体在什么地方,我要花些时间才能找到;但我确实记得发布了相关问题的答案。
- 哦,好的,问题解决了。
解决方案:
- 为您的用户名使用不同的变量。
- 使用唯一变量。
我终于找到错误了:
当连接到我的数据库时,我使用:
$servername = "";
$username = "";
$password = "";
$db = "";
// Create connection
$conn = mysqli_connect($servername, $username, $password, $db);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
在我的提交脚本中我也使用了$username
。包含 DBconnection 文件导致我的本地变量($username
,我从表单中获得)被 DBconnect 中找到的用户名覆盖。
我正在尝试确认用户是否提交了有效凭据。
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"');
我得到了我想要的结果。我很困惑,因为我在不同的页面上使用了相同的方法,而且效果很好。
截图
编辑:添加了所有代码。
Edit2:添加了屏幕截图
Edit3:添加表格 HTML
编辑4:
表单提交没有问题。当我像这样对变量进行硬编码时:
$username ='abc';
还是不行
很抱歉,您发布的屏幕截图对我们没有帮助。
为了避免进一步评论,我提交以下内容。
您的表单及其相关元素可能会失败,需要一个 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 发布了一个回答,指出他们正在为他们的数据库连接使用相同的变量。
如果发布了完整的代码,我会立即发现并导致冲突的东西。我以前见过这种情况发生过好几次,记得也为他们发布了答案。至于具体在什么地方,我要花些时间才能找到;但我确实记得发布了相关问题的答案。
- 哦,好的,问题解决了。
解决方案:
- 为您的用户名使用不同的变量。
- 使用唯一变量。
我终于找到错误了:
当连接到我的数据库时,我使用:
$servername = "";
$username = "";
$password = "";
$db = "";
// Create connection
$conn = mysqli_connect($servername, $username, $password, $db);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
在我的提交脚本中我也使用了$username
。包含 DBconnection 文件导致我的本地变量($username
,我从表单中获得)被 DBconnect 中找到的用户名覆盖。