2013-02-26 104 views
1

大家好我剛開始使用codeigniter和php。我正在製作一個簡單的調查類型網站白盒複選框,問題將成爲多項選擇,如果勾選複選框,結果將存儲在數據庫中。我的問題是我將如何去做這件事。這是我的形式,並感謝所有人提前幫助。codeigniter複選框值

視圖

<?php foreach($survay_data as $survay):?> 
    <ul> 
     <li><h1><?php echo $survay->Question;?></h1></li> 
     <li><?php echo $survay->qA; ?><input type="checkbox" name="q1[]" value="qA"></li> 
     <li><?php echo $survay->qB; ?><input type="checkbox" name="q2[]" value="qB"></li> 
     <li><?php echo $survay->qC; ?><input type="checkbox" name="q3[]" value="qC"></li> 
     <?php endforeach; ?> 
     <input type="textarea" value='a' name="comment"> 
     <br> 
     <input type="submit" value="Submit"> 
    </ul> 

控制器

<?php 
    class Survay extends CI_Model{ 

     function dosurvay($arrData){ 

      $this->db->select('QID, Question, qA, qB, qC'); 
      $this->db->from('tblquestions'); 
      $this->db->where('Question', $arrData['Question']); 
      $this->db->where('qA', $arrData['qA']); 
      $this->db->where('qB', $arrData['qB']); 
      $this->db->where('qC', $arrData['qC']); 
      $this -> db -> limit(1); 

      $query = $this -> db -> get(); 

      if($query -> num_rows() == 1) 
      { 
       return $query->result(); 
      } 
      else 
      { 
       return false; 
      } 
     } 
    } 
?> 

模型

<?php 
class Survaycontroller extends CI_Controller{ 
    // 'QID, Question, qA, qB, qC' 

    function index() 
    { 

      $arrData = array(); 
      $arrData["qA"] = $this->input->post("qA"); 
      $arrData["qB"] = $this->input->post("qB"); 
      $arrData["qC"] = $this->input->post("qC"); 
      $arrData["Question"] = $this->input->post("Question"); 

      $this->load->model('survay'); 

      $survay_data = $this->survay->dosurvay($arrData); 

      $viewData['survay_data'] = $survay_data; 

      $this->load->view('survay_view', $viewData); 
    } 

} 
?> 
+0

我們可以看到你在控制器或模型中試過的東西嗎?請閱讀這些手冊:http://ellislab.com/codeigniter/user-guide/helpers/form_helper.html和http://ellislab.com/codeigniter/user-guide/libraries/form_validation.html。他們應該讓你開始正確。 – 2013-02-26 07:57:48

+0

我編輯了我的帖子並添加了一個控制器和模型代碼。我確實看過codeigniter的用戶指南,它幫助我瞭解了這個項目的特性,但不知道如何返回複選框的值。 – 2013-02-26 08:08:48

+0

取決於問題出在哪裏。如果你想做一個選擇,我懷疑你將如何使用問題ID選擇問題的結果。如果您打算將答案插入到數據庫中,請創建一個插入語句。問題出在你的模型和那些奇怪的方括號中。你想插入或選擇問題嗎?我已經對如何在下面的答案中插入數組作出評論。看看是否有幫助 – 2013-02-26 09:15:22

回答

5

這應該做你想做的。根據我們在Stackover上的聊天,答案已經爲您提供。您的問題不像您在聊天中提出的要求那麼清晰。找到能夠解決您的問題

笨的基本使用下面的代碼:

我提供這個代碼只爲你減少我們去評論量。 你確定你對Codeigniter來說很新。我只能盡我所能幫忙。

步驟1:數據庫

創建數據庫表 「tblquestions」。字段應該是QID,qA,qB和qC。如果你有那麼多,那麼填充記錄最多爲43的字段。少有5條記錄應該這樣做。

步驟2:模型

<?php 

class Survay extends CI_Model { 

    function dosurvay($question_id = null) { 

     $this->db->select('QID, Question, qA, qB, qC'); 
     $this->db->from('tblquestions'); 
     if ($question_id) { 
      $this->db->where('QID', $question_id); 
     } 
     $this->db->limit(1); 
     $query = $this->db->get(); 

     if ($query->num_rows() == 1) { 
      return $query->result(); 
     } else { 
      return false; 
     } 
    } 

function addsurvay($arrData) { 

    $this->db->insert('tblanswers', $arrData); 

    if ($this->db->affected_rows() > 0) { 
     return $this->db->insert_id(); 
    } else { 
     return false; 
    } 
} 

} 
?> 

步驟3:控制器

<?php 

class Survaycontroller extends CI_Controller { 

    // 'QID, Question, qA, qB, qC' 
    function __construct() { 
     parent::__construct(); 
     $this->load->model('survay'); 
    } 

    function index() { 
     //This should select the survey question 
     $data = array(); 
     $question_id = $this->uri->segment(3); 
     $data[survay_data] = $this->survay->dosurvay($question_id); 
     $this->load->view('survay_view', $data); 
    } 

    function addanswer() { 
     //The answer is submitted to this... 
     $arrData = array(); 
     $userid = null; 
     if ($this->session->userdata("userid")) { 
      $userid = $this->session->userdata("userid"); 
     } 
     if ($this->input->post()) { 
      $arrData["answerid"] = $this->input->post("QID"); 
      $arrData["questionid"] = $this->input->post("qA"); 
      if ($this->input->post("qA")) { 
       $arrData["answerA"] = $this->input->post("qA"); 
      } 
      if ($this->input->post("qB")) { 
       $arrData["answerB"] = $this->input->post("qB"); 
      } 
      if ($this->input->post("qC")) { 
       $arrData["answerC"] = $this->input->post("qC"); 
      } 
      $arrData["userid"] = $userid; 
     } 
     $viewData[survay_data_id] = $this->survay->addsurvay($arrData); //Get the ID of the answer stored 
     $this->load->view('survay_view', $viewData); 
    } 

} 
?> 

步驟4:視圖

<?php if(isset($survay_data)) : ?> 
<form action="http://localhost/Surva/index.php/survaycontroller/addanswer/" name="myform" id="myform" method="post"> 
    <?php foreach ($survay_data as $survay): ?> 
     <ul> 
      <li><h1><?php echo $survay->Question; ?></h1></li> 
      <li><?php echo $survay->qA; ?><input type="checkbox" name="qA" value="<?php echo $survay->qA; ?>"></li> 
      <li><?php echo $survay->qB; ?><input type="checkbox" name="qB" value="<?php echo $survay->qA; ?>"></li> 
      <li><?php echo $survay->qC; ?><input type="checkbox" name="qC" value="<?php echo $survay->qA; ?>"></li> 
      <li><input type="hidden" name="QID" value="<?php echo $survay->QID; ?>"></li> 
      <li><input type="submit" name="btn" value="Answer"></li> 
     </ul> 
    <?php endforeach; ?> 
</form> 
<?php endif; ?> 

測試:

http://localhost/Surva/index.php/survaycontroller/index/2 

檢索題號2

現在,這是肯定的工作。替換你已有的一切。讓我知道這些新代碼是否更有效地取代了我以上的代碼。

+0

非常感謝您的幫助管家我試過你的代碼,我得到了幾個錯誤。 – 2013-02-26 10:25:56

+0

我可以得到你得到的錯誤嗎?也許我可以修復 – 2013-02-26 10:34:17

+0

這裏有錯誤 一個PHP錯誤遇到 嚴重性:警告 消息:缺少參數1 Survaycontroller ::指數() 文件名:控制器/ survaycontroller.php 行號: 7 甲PHP錯誤遇到 嚴重性:注意 消息:未定義變量:QID 文件名:控制器/ survaycontroller.php 行號:11 一個PHP錯誤遇到 嚴重性:警告 消息:的foreach() 文件名提供了無效的參數:觀點/ survay_view.php 行號:1 – 2013-02-26 10:39:24

0
<?php foreach($survay_data as $survay):?> 
<ul> 
<li><h1><?php echo $survay->Question;?></h1></li> 
<li><?php echo $survay->qA; ?><input type="checkbox" name="q1[]" value="<?php echo $survay->qA; ?>"></li> 
<li><?php echo $survay->qB; ?><input type="checkbox" name="q2[]" value="<?php echo $survay->qB; ?>"></li> 
<li><?php echo $survay->qC; ?><input type="checkbox" name="q3[]" value="<?php echo $survay->qC; ?>"></li> 
<?php endforeach; ?> 
<input type="textarea" value='a' name="comment"> 
<br> 
<input type="submit" value="Submit"> 
</ul> 

您需要將檢索到的數據作爲複選框的值。在您的控制器上,您可以使用var_dump($this->input->post())來查看已提交的數據,然後您可以隨意操作它。

膨化一點:

總之你正試圖從數據庫中值ATTR,當用戶檢查一個複選框,將被作爲值分配值。

無論您在接收數據的控制器中是使用form_open()還是標準<form>標籤類型。

function dosurvay($arrData){ 

    // you're get survay things here 


    if($this->input->post())// will execute only if a post happens 
    { 
     echo '<pre>'; 
     print_r($this->input->post()); // just print out everything 
     echo '</pre>'; 
    } 
} 
+0

tnx爲您的幫助tomexsans可以擴展更多這個我有點在這個問題上輸了 – 2013-02-26 08:09:57