【问题标题】:Nested PHP If-else doesn't working properly嵌套的 PHP If-else 无法正常工作
【发布时间】:2022-11-03 13:28:18
【问题描述】:

我有带有codeigniter的注册和登录系统,所有基本功能都可以正常工作。

关于验证的工作原理,它将检查帐户的状态,帐户是否存在、令牌是否已过期、帐户是否已激活或帐户无效。这是代码:

public function v_akun($email,$token)
{
    $cek_email    = $this->db->get_where('users',array('email' => $email))->num_rows();

    if ($cek_email == 1) {
        $cek_token    = $this->db->get_where('users',array('token_email' => $token_email))->num_rows();

        if ($cek_token == 1) {
            $user_token = $this->db->get_where('users', ['email' => $email])->row_array();
            if ($stdate - $user_token['created_token'] < (60 * 60 * 2)) {
                $data = array(
                'token_email'   => '',
                'validasi_email'   => '1',
                );
                
                $where = array(
                'email'         => $email,
                'token_email'   => $token,
                );
                
                // Update to table
                $this->m_data->update_data($where, $data,'users');
                redirect('/home');
            } else {
                $where = array(
                'email'         => $email,
                );
                
                // Delete from table
                $this->m_data->hapus_data($where, 'users');
                echo "token expired";
            }
        } else {
            echo "account already activated";
        }
    } else {
        echo "invalid account";
    }
}

当帐户无效时,它会显示该帐户不存在的正确消息,但除此之外,程序总是抛出一个“已经”状态,表示该帐户已被激活。到这里:

else {
      echo "account already activated";
     }

我的条件句法有问题吗?非常感谢你的帮助。

【问题讨论】:

  • 你的调试告诉你什么?你对$cek_token 有什么价值?不管是什么,都不是1
  • 第 6 行中的变量 $token_email 是从哪里获得的?我猜它是空的,你永远不会在数据库中找到匹配的条目,因此永远不会为$cek_token 获得 1。数据库字段真的命名为token_email 吗?

标签: php codeigniter if-statement


【解决方案1】:

我认为您的语法有一些错误

$cek_token = $this->db->get_where('users',array('token_email' => $token_email))->num_rows();
  
    if ($cek_token == 1) { 
       echo "account not activated";
    } else { 
       echo "account already activated"; 
    }

我认为问题出在$token_email,这个变量没有退出,来自参数的实际变量是$token

这就是为什么它总是检查空变量并返回零 (0) 行的原因。

【讨论】:

  • 感谢您的回答和另一个答案......在我重新检查了很多事情(包括数据库检查)和变量检查之后,似乎我错过了我的代码中的一些语法来调用该变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
相关资源
最近更新 更多