$con = mysqli_connect('localhost', 'login', '*mypass*', 'login');
$check = "SELECT * FROM users";
$rs = mysqli_query($con, $check);
if(isset($_POST['submit'])) {
$username = strtolower($_POST['username']);
$password = hash('sha512', $_POST['password']);
if($username && $password){
while($data = mysqli_fetch_array($rs)){
if($username == $data[1]){
if($password == $data[2]){
session_start();
$_SESSION['loggedin'] = true;
$_SESSION['username'] = $username;
$exp = time() + (60*60*24*365);
setcookie('user', $username, $exp);
echo "test";
header("location: dash.php");
exit();
} else {
error("Incorrect Password");
}
}
}
} else {
error("Please insert your username and password");
}
}
在此代码中,if语句(if($ password == $ data [2]))的内容无法正确运行:仅echo函数起作用,其他所有函数均不起作用!
这个问题有解决方案吗?
我使用PHP 7.0
POST:
echo "test";
仅用于测试目的,无论有没有代码都无法使用。答案 0 :(得分:-1)
看这部分:
if($username && $password){
while($data = mysqli_fetch_array($rs)){
if($username == $data[1]){
if($password == $data[2]){
阅读$data
时应小心。简而言之,$data
数组是从0开始按行进行索引的,所以$data[1]
和$data[2]
引用了整个第二和第三结果集行,但实际上并没有读取任何结果字段。
正确,更清洁的方法是:
if($username && $password){
$data = mysqli_fetch_array($rs);
foreach ($data as $row)
{
$username = $row['field_name_with_username];
$password = $row['field_name_with_password];
... then whatever you need to do afterwards with those variables
}
如果您想远离foreach循环,则可以使用while或for,但是您需要定义一个交互计数器(即,进入循环之前先定义$i = 0;
,然后在结束之前先定义$i++;
每次迭代)并在每次通过时访问$data[$i]['field_name_with_username']
和$data[$i]['field_name_with_password']
答案 1 :(得分:-1)
这不是答案,而是一些尝试检查会话的方法。
将以下代码放在自己的文件中:
<?php
session_start();
if(isset($_SESSION['test_counter'])) {
$_SESSION['test_counter']++;
} else {
$_SESSION['test_counter'] = 1;
}
echo $_SESSION['test_counter'];
它应该首先显示1,然后在刷新时增加整数。