在此if语句(PHP)中,仅echo在此代码中起作用

时间:2018-09-08 20:45:21

标签: php if-statement

$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";仅用于测试目的,无论有没有代码都无法使用。

2 个答案:

答案 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,然后在刷新时增加整数。