CodeIgniter-当查询没有返回结果时执行操作

时间:2017-05-21 20:47:54

标签: sql codeigniter

我有一个模型,它接受用户名和密码,并返回其他用户相关的详细信息,如数组中的名称和总点数。 如果查询返回空白(如果未找到记录),则应重定向回登录页面。 在这里,我还将空数组添加为“$ results = array()”。 请指导我的代码中的bug在哪里。在所有情况下,它都返回true。

我的模特:

function validate()
{
    $this->db->where('username', $this->input->post('username'));
    $this->db->where('password', $this->input->post('password'));
    $query=$this->db->get('users');
    $results=array();
        foreach($query->result() as $rows)
            {
                $results[]= array(
               'first_name'   => $rows->first_name,
               'phone'        => $rows->phone,
               'total_points' => $rows->total_points,
                                );
            }

    return $results;
    }

这是我的控制器:

public function validate_credentials()
{
    $this->load->model('Membership_model');
    $query['result']=$this->Membership_model->validate();
    if(empty($query))  //if $query is blank it should redirect to home page
    {
        redirect('http://localhost/luckyDraw/en');
    }
    else echo "details received";
    // else
    // {

    //  $data=array(
    //      'username' => $this->input->post('username'),
    //      'is_logged_in' => true,
    //          );
    //  $this->session->set_userdata($data);
    //  $this->load->view('members_area',$query);
    // }
}

2 个答案:

答案 0 :(得分:0)

试试这个:

if ($this->db->get_where('users', array('username' => $this->input->post('username', true), 'password' => $this->input->post('password', true))->num_rows() > 0)
{
 // write your foreach statement here (I think you shouldn't write foreach statement to fetch user data, you can use `row_array`)
}
else
{
 // if there is no result
}

提示:在您的数据库中保密密码。您可以使用password_hashpassword_verify。这是非常重要的。请参阅here

答案 1 :(得分:0)

获取对象,然后将相同的数据转换为数组。 我没有得到你在模型中做到这一点以及为什么这样做的原因以及为什么你在控制器上有echo received消息将它发送到视图并显示。

你应该做什么?

我看到你从数据库中获取单个用户数据。然后使用$query->row_arary();

您的查询&型号代码应该是:

$this->db->select('first_name,phone,total_points');
$this->db->where('username,$this->input->post('username')');
$this->db->where('password', $this->input->post('password'));
$query=$this->db->get('users');

// Now To get the User data Array in result:
$user_data = $query->row_array();
return $user_data; // return the data to the controller:

您的控制器代码:

public function validate_credentials()
{
    $this->load->model('membership_model');
    $user_data = $this->membership_model->validate();

    if(isset($user_data) && !empty($user_data)){

         $this->load->view('your_view'.['msg'=>'details received']);

    } else {        
        //if $query is blank it should redirect to home page        
    }
}

如果您想在视图侧回显用户数据,请执行以下操作:

<?php 
echo $user_data['first_name']; // Same with other data.
?>