CodeIgniter - Проверка того, существует ли уже слаг в базе данных - PullRequest
3 голосов
/ 26 марта 2019

Я сделал функцию add_items.и я хочу, если слаг уже существует в database, тогда form_validation запускается и показывает error message.и это нормально работает, если slug exists.Но главное problem состоит в том, что если я хочу insert new Data в database, который, очевидно, имеет другой slug, тогда data не вставляется.

public function add_items()
    {
       if($this->input->post()){
           if($this->input->is_ajax_request()){
               $title = $this->input->post('title');
               $url_title = url_title($title);
                $this->form_validation->set_rules($url_title,'callback_slug_exists');
                    if($this->form_validation->run() == FALSE)
                    {
                      echo "FAIL::Slug Already Exist::error";
                      return;
                    }
                    $item_price = $this->input->post('item_price');
                    $item_description = $this->input->post('item_description');
                    $insertData = array('item_title' =>$title,'item_url'=>$url_title,'item_price' =>$item_price,'item_description'=>$item_description,
                       'big_pic' =>$image_path."/".$image);
                    $result = $this->common_model->insert_record('store_items',$insertData);
                       if($result){
                         echo "OK::Record Inserted Successfully::success";
                         return;
                       }
                       else {
                         echo "FAIL::Record Insertion Failled::success";
                         return;
                       }

                   }
               }

            $this->show('admin/add_items.php');
}

Вот function slug_exists()

 function slug_exists($slug)
       {
           $this->common_model->slug_exists($slug);
       }

Это в модели

 function slug_exists($slug)
 {
     $this->db->where('item_url',$slug);
     $query = $this->db->get('store_items');
     if ($query->num_rows() > 0){
         return true;
     }
     else{
         return false;
     }
 }

Это insert_record()

  function insert_record($tbl, $data)
    {
        $this->db->insert($tbl, $data);
        return $this->db->insert_id();
    }

А это БД

enter image description here

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

попробуйте это: вы можете публиковать данные прямо в массиве.нет необходимости определять его.

$insertArray=array(
item_title' =>$this->input->post('title'),
'item_url'=>$this->input->post('url_title'),
'item_price' =>$this->input->post('item_price'),
'item_description'=>$this->input->post('item_description'),
'big_pic' =>$image_path."/".$image);
$this->db->insert('store_items', $insertArray);
0 голосов
/ 26 марта 2019

Попробуйте вот так

function slug_exists($slug)
{
   $this->db->where('item_url',$slug);
   $query = $this->db->get('store_items');
   if ($query->num_rows() > 0){
       return false;
   }
   else{
       return true;
   }
}

Если slug уже существует, вам нужно завершить проверку, чтобы получить ошибку, поэтому верните false на существующем

Кроме того, вернуть ответ / результат в функцию обратного вызова

function slug_exists($slug)
{
   return $this->common_model->slug_exists($slug);
}

Обновление

Контроллер

 if($this->form_validation->run() == FALSE){
echo "FAIL::Slug Already Exist::error";
return;
 }else{

$item_price = $this->input->post('item_price');
$item_description = $this->input->post('item_description');
$insertData = array('item_title' =>$title,'item_url'=>$url_title,'item_price' =>$item_price,'item_description'=>$item_description,
    'big_pic' =>$image_path."/".$image);
$result = $this->common_model->insert_record('store_items',$insertData);
if($result){
    echo "OK::Record Inserted Successfully::success";
    return;
}
else {
    echo "FAIL::Record Insertion Failled::success";
    return;
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...