Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 验证未停止数据,函数继续插入_Php_Mysql_Codeigniter_If Statement - Fatal编程技术网

Php 验证未停止数据,函数继续插入

Php 验证未停止数据,函数继续插入,php,mysql,codeigniter,if-statement,Php,Mysql,Codeigniter,If Statement,我有一个简单的问题: 在下面的函数中,我希望如果使用用户名,则返回错误返回false,但如果不存在,则返回true并继续我认为我的t/F顺序不正确 public function username_check($username) { if($username == TRUE) { $this->form_validation->set_message('username_check','Sorry the userna

我有一个简单的问题:

在下面的函数中,我希望
如果使用用户名,则返回错误返回false,但如果不存在,则返回true并继续
我认为我的t/F顺序不正确

public function username_check($username)
    {
        if($username == TRUE)
        {
            $this->form_validation->set_message('username_check','Sorry the username %s is already taken!');
            return true;
        }else{
            return FALSE;
        }
    }
更新:

<h1><?php echo $companyName; echo nbs(1);?> - <?php echo $pageTitle; ?></h1>



<?php
if($success == TRUE) {
echo '<section id = "validation">Page Updated</section>';   
}
?>
    <p>Error: <?php echo validation_errors();?></p>
    <div class="formContent">
        <form action="createUser" method="post">
            <fieldset class="control-group">
                <label for="userName">User Name:</label><input type="text" id="userName" name="userName"  value="<?php echo set_value('userName'); ?>" placeholder="User Name">
                <label for="userPassword">User Password:</label><input type="password" id="userPassword" name="userPassword" placeholder="User Password">
                <label for="userFirstName">First Name:</label><input type="text" id="userFirstName" name="userFirstName" value="<?php echo set_value('userFirstName'); ?>" placeholder="First Name">
                <label for="userLastName">Last Name:</label><input type="text" id="userLastName" name="userLastName" value="<?php echo set_value('userLastName'); ?>" placeholder="Last Name">
                <label for="userEmail">E-Mail:</label> <input type="text" id="userEmail" name="userEmail"  value="<?php echo set_value('userEmail'); ?>" placeholder="Admin E-mail">
                <label for="userGroup"> User Group:</label>
                    <select name="userGroup" id="userGroup">
                        <option value="select"<?=(set_value('userGroup')=='select')?' selected="selected" ':''?>>Please Select</option>
                        <option value="admin" <?=(set_value('userGroup')=='admin')?' selected="selected" ':''?>>Admin</option>
                        <option value="user" <?=(set_value('userGroup')=='user')?' selected="selected" ':''?>>User</option>
                    </select>
                <label for="userActive"> User Active:</label>
                        <select name="userActive" id="userActive">
                            <option value="select" <?=(set_value('userActive')=='select')?' selected="selected" ':''?>>Please Select</option>
                            <option value="yes" <?=(set_value('userActive')=='yes')?' selected="selected" ':''?>>Yes</option>
                            <option value="no" <?=(set_value('userActive')=='no')?' selected="selected" ':''?>>No</option>
                        </select>
                <div>
                    <button type="submit" class="btn-primary">Create</button>
                </div>
                </fieldset>
        </form>
    </div>
public function index()
    {
        //Form Validation prep making sure its all clean

        $this->form_validation->set_rules('userName', 'User Name', 'trim|required|callback_username_check|xss_clean');
        $this->form_validation->set_rules('userPassword', 'User Password', 'trim|required|xss_clean|sha1');
        $this->form_validation->set_rules('userFirstName', 'First Name', 'trim|required|xss_clean');
        $this->form_validation->set_rules('userLastName', 'Last Name', 'trim|required|xss_clean');
        $this->form_validation->set_rules('userEmail', 'E-Mail', 'trim|required|xss_clean');
        $this->form_validation->set_rules('userGroup', 'User Group', 'trim|required|xss_clean');
        $this->form_validation->set_rules('userActive', 'User Active', 'trim|required|xss_clean');

        //If form validation fails load previous page with errors else do the job and insert data into db

        if($this->form_validation->run() == FALSE)
        {
            $data['success'] = "";
        }else{
            $username = $this->input->post('userName');
            $password = $this->input->post('userPassword');
            $firstname = $this->input->post('userFirstName');
            $lastname = $this->input->post('userLastName');
            $email = $this->input->post('userEmail');
            $group = $this->input->post('userGroup');
            $active = $this->input->post('userActive');

            $passwordHash = $this->encrypt->sha1($password); // Lets encrypt the password why sha1?  MD5 is for tossers

            // If the data is correct follow through with db insert

            if($this->users_model->createUser($username,$passwordHash,$firstname,$lastname,$email,$group,$active))
            {
                $data['success'] = TRUE;

            }

        }
        $data['companyName'] = $this->core_model->companyName();
        $data['pageTitle'] = "Create User";
        $this->load->view('admin/assets/header', $data);
        $this->load->view('admin/createUser', $data);
        $this->load->view('admin/assets/footer');
    }

    public function username_check($username)
    {
        if($this->users_model->username_taken($username))
        {
            $this->form_validation->set_message('username_check', 'Sorry the username %s is taken!');
            return TRUE;
        }else{
            return FALSE;
        }
    }
我已经让toms代码正常工作,但我现在有一个问题,似乎回调不工作,它只是继续添加用户到数据库,即使它已经存在

查看:

<h1><?php echo $companyName; echo nbs(1);?> - <?php echo $pageTitle; ?></h1>



<?php
if($success == TRUE) {
echo '<section id = "validation">Page Updated</section>';   
}
?>
    <p>Error: <?php echo validation_errors();?></p>
    <div class="formContent">
        <form action="createUser" method="post">
            <fieldset class="control-group">
                <label for="userName">User Name:</label><input type="text" id="userName" name="userName"  value="<?php echo set_value('userName'); ?>" placeholder="User Name">
                <label for="userPassword">User Password:</label><input type="password" id="userPassword" name="userPassword" placeholder="User Password">
                <label for="userFirstName">First Name:</label><input type="text" id="userFirstName" name="userFirstName" value="<?php echo set_value('userFirstName'); ?>" placeholder="First Name">
                <label for="userLastName">Last Name:</label><input type="text" id="userLastName" name="userLastName" value="<?php echo set_value('userLastName'); ?>" placeholder="Last Name">
                <label for="userEmail">E-Mail:</label> <input type="text" id="userEmail" name="userEmail"  value="<?php echo set_value('userEmail'); ?>" placeholder="Admin E-mail">
                <label for="userGroup"> User Group:</label>
                    <select name="userGroup" id="userGroup">
                        <option value="select"<?=(set_value('userGroup')=='select')?' selected="selected" ':''?>>Please Select</option>
                        <option value="admin" <?=(set_value('userGroup')=='admin')?' selected="selected" ':''?>>Admin</option>
                        <option value="user" <?=(set_value('userGroup')=='user')?' selected="selected" ':''?>>User</option>
                    </select>
                <label for="userActive"> User Active:</label>
                        <select name="userActive" id="userActive">
                            <option value="select" <?=(set_value('userActive')=='select')?' selected="selected" ':''?>>Please Select</option>
                            <option value="yes" <?=(set_value('userActive')=='yes')?' selected="selected" ':''?>>Yes</option>
                            <option value="no" <?=(set_value('userActive')=='no')?' selected="selected" ':''?>>No</option>
                        </select>
                <div>
                    <button type="submit" class="btn-primary">Create</button>
                </div>
                </fieldset>
        </form>
    </div>
public function index()
    {
        //Form Validation prep making sure its all clean

        $this->form_validation->set_rules('userName', 'User Name', 'trim|required|callback_username_check|xss_clean');
        $this->form_validation->set_rules('userPassword', 'User Password', 'trim|required|xss_clean|sha1');
        $this->form_validation->set_rules('userFirstName', 'First Name', 'trim|required|xss_clean');
        $this->form_validation->set_rules('userLastName', 'Last Name', 'trim|required|xss_clean');
        $this->form_validation->set_rules('userEmail', 'E-Mail', 'trim|required|xss_clean');
        $this->form_validation->set_rules('userGroup', 'User Group', 'trim|required|xss_clean');
        $this->form_validation->set_rules('userActive', 'User Active', 'trim|required|xss_clean');

        //If form validation fails load previous page with errors else do the job and insert data into db

        if($this->form_validation->run() == FALSE)
        {
            $data['success'] = "";
        }else{
            $username = $this->input->post('userName');
            $password = $this->input->post('userPassword');
            $firstname = $this->input->post('userFirstName');
            $lastname = $this->input->post('userLastName');
            $email = $this->input->post('userEmail');
            $group = $this->input->post('userGroup');
            $active = $this->input->post('userActive');

            $passwordHash = $this->encrypt->sha1($password); // Lets encrypt the password why sha1?  MD5 is for tossers

            // If the data is correct follow through with db insert

            if($this->users_model->createUser($username,$passwordHash,$firstname,$lastname,$email,$group,$active))
            {
                $data['success'] = TRUE;

            }

        }
        $data['companyName'] = $this->core_model->companyName();
        $data['pageTitle'] = "Create User";
        $this->load->view('admin/assets/header', $data);
        $this->load->view('admin/createUser', $data);
        $this->load->view('admin/assets/footer');
    }

    public function username_check($username)
    {
        if($this->users_model->username_taken($username))
        {
            $this->form_validation->set_message('username_check', 'Sorry the username %s is taken!');
            return TRUE;
        }else{
            return FALSE;
        }
    }
型号:

function createUser($username = NULL ,$passwordHash = NULL ,$firstname = NULL ,$lastname = NULL ,$email = NULL,$group = NULL ,$active = NULL)
{
    $data = array('userName' => $username, 'userFirstName' => $firstname, 'userLastName' => $lastname, 'userEmail' => $email, 'userPassword' => sha1($passwordHash), 'userGroup' => $group, 'userActive' => $active);

$this->db->insert('users',$data);

return TRUE;
}

function username_taken($username)
{
    $this->db->select('userName');
    $this->db->from('users');
    $this->db->where('userName', $username);
    $query = $this->db->get();

    if($query->num_rows() > 0)
    {
        return TRUE;
    }else{
        return FALSE;
    }

您现在遇到的问题是,您同时使用了
get('users')
from('users')
。您应该使用以下任一选项:

 $this->db->select('userName');
 $this->db->from('users');
 $this->db->where('userName', $username);
 $query = $this->db->get();
或:

更新:要使其正常工作,您的代码应如下所示:

控制器:

public function index()
{
  $this->form_validation->set_rules('userName', 'User Name', 'trim|required|callback_username_check|xss_clean');

  // Etc
}

public function username_check($username)
{
  if($this->users_model->username_taken($username))
  {
    $this->form_validation->set_message('username_check', 'Sorry the username %s is taken!');
    return FALSE;
  }
  else
  {
    return TRUE;
  }
}
型号:

function username_taken($username)
{
  $this->db->where('userName', $username);
  return $this->db->count_all_results('users') > 0;
}

中,如果
,是否要检查变量
$username
是否已传递给函数?或者
$username
是否等于
TRUE
?因为您实际检查的是后者。
返回true并继续
?你真的不能这么做,是吗?我的意思是从函数返回,然后在该函数中继续…现在您正在检查
$username
是否设置为
true
。我猜你要做的是询问你的数据库用户名是否存在。而且,这看起来像是CodeIgniter的回调。如果是这种情况,你应该将你的函数命名为
\u username\u check
,以通过GET请求使其不可访问。很确定你可以不说If($username)如果一个变量被设置为true,则其计算结果为true。无需进行比较。您可能需要查看,因为它使比较更加明确。现在我真的很困惑,请参见Hm,因此
是否唯一
不起作用?另一个问题中的代码看起来不错,所以我不知道那里发生了什么。在这种情况下,坚持Tom的答案,并用我上面的建议更新模型中的
username\u take
函数。嘿,我刚刚尝试了你的第一个查询,得到了mysql\u num\u rows()预期参数1是资源,对象给定。后一个查询给出了上述错误。您不应该使用
mysql\u num\u rows
,而应该使用CodeIgniter的内置函数:
if($query->num\u rows()>0)
。如果您正在使用CodeIgniter的活动记录,则不应使用任何
mysql.*
函数。总是寻找一个内置的功能。嘿,谢谢你,但我仍然没有得到任何错误,它只是继续添加一个管理员用户到数据库