2014-09-10 1 views
1

Как сделать имя пользователя уникальным в валидации, а вывод - в «JSON». На самом деле я использую Codeigniter для создания приложения и MongoDB в качестве базы данных. Я не знаю, работает ли «is_unique» в mongodb или нет, но я пытался, но не работал.Как использовать «is_unique» в Codeigniter, а база данных - это mongodb

Контроллер:

общественная функция create_customer() {

$this->load->helper('form'); 
$this->load->library('form_validation'); 

if($this->input->post('username') != $original_value) { 
    $is_unique = '|is_unique[customer.username]' 
} else { 
    $is_unique = '' 
} 
// field name, error message, validation rules 
$this->form_validation->set_rules('first_name', 'Name', 'trim|required'); 
$this->form_validation->set_rules('last_name', 'Last Name', 'trim|required'); 
$this->form_validation->set_rules('email_address', 'Email Address', 'trim|required|valid_email'); 
$this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[4]|xss_clean'.$is_unique); 
$this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[4]|max_length[32]'); 
$this->form_validation->set_rules('phone_number', 'Phonenumber', 'trim|required|numeric|min_length[10]|max_length[10]'); 
$this->form_validation->set_rules('password2', 'Password Confirmation', 'trim|required|matches[password]'); 
    if($this->form_validation->run() == FALSE) 
{ 
    header('Content-Type: application/json'); 
    echo json_encode(array('success' => 'FALSE')); 
} 
else 
{ 
    $this->load->model('general/customer'); 
    $new_customer[CUSTOMER_FIRST_NAME]=$this->input->post('first_name'); 
    $new_customer[CUSTOMER_LAST_NAME]=$this->input->post('last_name'); 
    $new_customer[CUSTOMER_EMAIL]=$this->input->post('email_address'); 
    $new_customer[CUSTOMER_USERNAME]=$this->input->post('username'); 
    $new_customer[CUSTOMER_PHONE]=$this->input->post('phone_number'); 
    $new_customer[CUSTOMER_PASSWORD]=$this->input->post('password'); 
    $this->customer->is_unique(); 
    $query = $this->customer->add($new_customer); 
    header('Content-Type: application/json'); 
    echo json_encode(array('success' => 'TRUE')); 
} 
} 

Модель:

public function is_unique() 
{ 
    $query = $this->mongo_db->select('username'); 
    $result = mongo_db($query); 
    $count = mongo_db_num_rows($result); 
    if ($count>0) { 
    echo 'Sorry! This Username already exists!'; 
    } 
    else 
    { 

    $insert = $this->mongo_db->insert(CUSTOMER, $new_customer); 
    return $insert; 
    } 

}

Это мой код. Я хотел сохранить имя пользователя как уникальное в приложении. Пожалуйста, помогите мне заполнить заявку.

+0

Что не работает? Каковы ваши результаты? Вам не нужно писать функцию is_unique, она встроена в библиотеку Form_validation CodeIgniter. – twistedpixel

+0

На самом деле у одного клиента должно быть одно имя пользователя, и он не должен быть таким же для другого клиента. Если какой-либо клиент ввел какое-то имя пользователя в мое приложение, он должен выполнить ошибку или сообщение типа «Имя пользователя уже существует». Но теперь я сделал некоторые изменения в своем приложении, и теперь он работает нормально. Вот мой модифицированный код. –

ответ

0

Контроллер:

общественная функция create_customer()

{ 
    $this->load->library('form_validation'); 
    $this->form_validation->set_rules('first_name', 'Name', 'trim|required'); 
    $this->form_validation->set_rules('last_name', 'Last Name', 'trim|required'); 
    $this->form_validation->set_rules('email_address', 'Email Address', 'trim|required|valid_email'); 
    $this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[4]'); 
    $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[4]|max_length[32]'); 
    $this->form_validation->set_rules('phone_number', 'Phonenumber', 'trim|required|numeric|min_length[10]|max_length[10]'); 
    $this->form_validation->set_rules('password2', 'Password Confirmation', 'trim|required|matches[password]'); 
    if($this->form_validation->run() == FALSE) 
    { 
     header('Content-Type: application/json'); 
     echo json_encode(array('success' => 'FALSE')); 
    } 
    else 
    { 
     $this->load->model('general/customer'); 
     $new_customer[CUSTOMER_FIRST_NAME]=$this->input->post('first_name'); 
     $new_customer[CUSTOMER_LAST_NAME]=$this->input->post('last_name'); 
     $new_customer[CUSTOMER_EMAIL]=$this->input->post('email_address'); 
     $new_customer[CUSTOMER_USERNAME]=$this->input->post('username'); 
     $new_customer[CUSTOMER_PHONE]=$this->input->post('phone_number'); 
     $new_customer[CUSTOMER_PASSWORD]=$this->input->post('password'); 
     if($this->customer->is_unique($new_customer[CUSTOMER_USERNAME])) 
     { 
      $query = $this->customer->add($new_customer); 
      header('Content-Type: application/json'); 
      echo json_encode(array('success' => 'TRUE')); 
     } 
     else 
     { 
      header('Content-Type: application/json'); 
      echo json_encode(array('success' => 'FALSE')); 
     } 
    } 
} 

Модель:

function is_unique($username) 

{ 
    $this->mongo_db->where(CUSTOMER_USERNAME, $username); 
    $query = $this->mongo_db->get(CUSTOMER); 
    return (count($query) == 0 ? true : false); 
} 
0

Код модели выше, Ганеш UG точно не работает для меня.

Изменить оператор возврата к:

return (count((array)$query) == 0 ? true : false);