2016-05-10 45 views
0

獲取值我有一個「選擇」從那裏用戶選擇不同的選項類別的選項,如果用戶選擇「其他」的輸入字段出現(讓用戶可以添加另一類)並在該類別下張貼文章。
我服用的選擇值和檢查,如果輸入不爲空,然後更新我在那裏的價值選擇相同的變量。
現在的問題是我似乎不能以「選擇選項,並輸入」之間切換字段,如果我從選擇選項只需選擇值去它工作正常,但是當用戶選擇「其他」,並給了一個新的類別輸入字段變量保持select的值。
當我們試圖通過輸入字段添加出現以下錯誤:Codeigniter3.0.1:從選擇和輸入

錯誤編號:1452
不能添加或更新子行:外鍵約束失敗(ciuser_articles,約束article_catagory_fk外鍵( cat_id_fk)參考文獻catagorycat_id)ON DELETE NO ACTION ON UPDATE CASCADE)
INSERT INTO user_articles(cat_id_fktitlearticle)VALUES( '他人', '新標題', '我的文章是一個棉花糖');

這裏是做了一段代碼。這是我的add_article()功能Model_article.php文件:

public function add_article() 
{ 
     $id = $this->input->post('hiddenValue'); 
     $title = $this->input->post('title'); 
     $catagory_id = $this->input->post('catagory_select'); 

     $cat = $this->input->post('cat'); 

     if (!isset($cat)) 
     { 

      $cat_input = $this->input->post('cat'); 

      $add_catagory = "INSERT INTO catagory (`user_id_fk`,`cat_name`) VALUES ('{$id}' ,'{$cat_input}') "; 
      $result_catagory = $this->db->query($add_catagory); 

      $retrive_catagory = "SELECT cat_id FROM catagory WHERE cat_name = '{$cat_input}' "; 

      $result = $this->db->query($retrive_catagory)->row(); 

      $catagory_id = $result->cat_id; 

     } 

     $articletext = $this->input->post('articletext',true); 

     // echo $catagory_id; 
     // die(); 
     $sql = " INSERT INTO user_articles (`cat_id_fk`, `title`, `article`) VALUES ('$catagory_id', '{$title}', '{$articletext}'); "; 

     $result = $this->db->query($sql); 
     $row = $this->db->affected_rows(); 

     if ($row) { 
      return true; 
     } 
     else 
     { 
      echo "Couldn't perform query"; 
      die(mysqli_error($sql)); 
      return false; 
     } 
} 

這是我view_addarticle.php文件:

<div class="container"> 
<div class="row"> 
    <div class="col-xs-6"> 
     <?php 
      // Display Result Using Ajax 
      echo "<div id='result' style='display: none'>"; 

      echo "<div class='alert alert-success' role='alert'>Well done! You successfully read this important alert message....</div>"; 
      echo "</div>"; 
      echo "</div>"; 
     ?> 
    </div> 
    <div class="col-xs-6"> 
     <?php  
      echo validation_errors(); 
      echo form_open('article/submit_article'); #'add_post/submit_post' 
     ?> 

     <div class="form-group"> 
     <input type="hidden" name="hiddenValue" id="hiddenValue" value="<?php echo $session_data['id']; ?>"> 
      <label for="sel1">Title:</label> 
       <input type="text" name="title" class="form-control" placeholder="Title of Article"> 
      <br> 
      <!-- <label for="sel1">Select Catagory:</label> --> 

      <script type="text/javascript"> 
       function admSelectCheck(nameSelect) 
      { 
       console.log(nameSelect); 
       if(nameSelect){ 
        admOptionValue = document.getElementById("admOption").value; 
        if(admOptionValue == nameSelect.value){ 
         document.getElementById("admDivCheck").style.display = "block"; 
        } 
        else{ 
         document.getElementById("admDivCheck").style.display = "none"; 
        } 
       } 
       else{ 
        document.getElementById("admDivCheck").style.display = "none"; 
       }} 
     </script> 


       <select name="catagory_select" class="selectpicker form-control" style=" width: 150px;" onchange='admSelectCheck(this);'> 
       <option>Select Catagory</option> 
       <?php 
        foreach ($query->result() as $key): 
       ?> 
       <option value="<?php echo $key->cat_id; ?>"><?php echo $key->cat_name; ?></option> 
       <?php endforeach; ?> 
       <option id="admOption">others</option> 
       </select> 

       <br> 
       <div id="admDivCheck" style="display: none;"> 
       <input type="text" placeholder="Enter Catagory Name" class="form-control" name="cat" id="color" style='width: 170px;'/> 
       </div> 
      <br> 
      <label for="sel1">Article:</label> 
      <textarea class="form-control" name="articletext" id="" cols="80" rows="10"></textarea> 
      <br> 
      <input class="btn btn-primary " value="Submit Article" id="submit" type="submit" style="float:right;" /> 
      </div> 
     </form> 
    </div> 
</div> 

這是我的控制器功能submit_article()Article.php文件:

public function submit_article() 
{ 
    $this->form_validation->set_rules('title', 'Title', 'required'); 
    $this->form_validation->set_rules('articletext', 'Article Text', 'required'); 


    if ($this->form_validation->run() === FALSE) 
    { 

     $this->load->view('layouts/header'); 
     $this->load->view('view_addarticle'); 
     $this->load->view('layouts/footer'); 
    } 
    else 
    { 
     $title = $this->input->post('title'); 

     $result = $this->model_article->add_article(); 

     if(!$result) 
     { 
      echo "Coulnd't register, contact site admin [email protected]"; 
     } 

     else 
     { 
      // echo json_encode($result); 
      redirect('account'); 
     } 
    } 

} 

回答

0

在我開始我通常做我的控制器中的所有驗證,它們捆綁到一個數組,並將它們發送到模型這樣...

你的錯誤熬煮成SQL錯誤...您在'ci.user_articles'表上有一個外鍵。外鍵是否存在於catagory(cat_id)表(col)中?您正在試圖插入「他人」的值必須是可作爲要使用的鑰匙嗎? (根據您顯示的錯誤)。通常ID是數字而不是單詞?

外鍵意味着它需要在你引用的表格/列中,或者它將無法插入,它的外鍵是什麼......(僅供參考,不假設你不知道這一點,好處。給別人谷歌搜索後,如果他們不這樣做)

關於檢查字段有值與否,我會建議使用支票,如:

if(isset($this->input->post('hiddenValue')){ 
    $id = $this->input->post('hiddenValue') 
    } 

這樣做就意味着數據不會被公佈,如果用戶從未真正輸入過任何東西。

如果您使用的是查詢幫助程序/查詢生成器,您將能夠使用CI構建大部分SQL,而不是手動構建查詢,您也可以將所有內容都包裝到控制器中的一個數組中(我所在的位置無論如何),只是將數組傳遞給模型。

使用DB建設者助手也意味着你的代碼是可移植的,只是對一個深思......

+0

感謝您的回答,我解決我的問題,通過改變邏輯完全按照您在開始說「在控制器中進行一系列驗證「,並且y表格都是以很少含糊的方式從表單中檢索數據。我做的是檢查表單,如果我在輸入字段中有價值,如果沒有我運行一個單獨的功能,其中輸入沒有任何作用。如果我抓到輸入,我會運行一個特定的輸入值的功能,我現在工作得很好。 –

+0

很高興得到了答案,如果將數據發送到數組中的模型並使用CI查詢生成器,查看它,一旦掌握了它,就可以節省大量時間,您不需要2個完全獨立的函數。 。 –