【问题标题】:Fetching the data from the database in PHP using loop使用循环从PHP中的数据库中获取数据
【发布时间】:2018-08-06 05:19:49
【问题描述】:

我想在数据库的视图中显示问题及其各自的答案:

我得到了名为Feedback的数据库表,格式如下:

这是我的表格名称:反馈

id | employee_id | question_id |   answer            |
______________________________________________________

1  |   100       |   1         | That was awesome. 
2  |   100       |   2         | That was excellent.  
3  |   100       |   3         | That was good.  
4  |   101       |   1         | That was better.  
5  |   101       |   2         | That was interesting.  
6  |   101       |   3         | That was fine.

还有另一个以问题命名的表格:

id |      Question        |
_______________________________________________

1  | How was your day? 
2  | How was the task?
3  | How was the Project?

这是我的模型代码:

function get_answers_supervisee () {
    $userid = $this->session->userdata('userid');
    $result = array ();
    $sql = "select answer from Feedback where employee_id = '$userid'";
    $query = $this->db->query ( $sql );
    foreach ( $query->result_array () as $row ) {
        array_push ( $result, $row );
    }
    return $result; 
}

下面是我的表单(客户端视图):

<table class="table">       
     <?php foreach($form_data_supervisee as $question) {?>
     <tr>      
         <td>
         <?php echo $question['ID'].". ".$question['DESCRIPTION']?>
         </td>
    </tr>   
         <?php foreach($form_answers_supervisee as $answer) {?>                 
    <tr>   
          <td>
          <textarea rows="5" name="<?php echo $answer['ANSWER']?></textarea>
          </td> 
    </tr>   
    <?php } ?>  
    <?php }?> 
  </table>

这是我的控制器的一部分:

 $data['form_answers_supervisee'] = $this->appraisal_model->get_answers_supervisee();
     $data['form_answers_supervisor'] = $this->appraisal_model->get_answers_supervisor();

     $this->load->view('main_form',$data);

现在,对于具有 employee_id: 100

的员工,我得到以下输出
1. How was your day?
   That was awesome. 
   That was excellent.
   That was good.

2. How was the task?
   That was awesome. 
   That was excellent.
   That was good.

3. How was the Project?
   That was awesome. 
   That was excellent.
   That was good.

所需的输出应该是:

1. How was your day?
   That was awesome. 

2. How was the task?
   That was excellent.

3. How was the Project?
   That was good.

我需要在这里进行什么更正?我做错了什么?

非常感谢您的建议。

【问题讨论】:

  • 我刚刚将问题和从评估商店命名的表格更新为反馈。我想以简单的形式提问,所以不得不更改有问题的数据库内容和表名,而忘记更改问题中的表名。

标签: php codeigniter codeigniter-3 codeigniter-query-builder


【解决方案1】:

试试下面的

你的模型

function get_answers_supervisee () 
{
    $userid = $this->session->userdata('userid');

    $query = $this->db
        ->select('f.*, q.id AS question_id, q.Question')
        ->from('Feedback f')
        ->join('Questions q', 'f.question_id = q.id', 'left')
        ->where('employee_id', $userid)
        ->get();

    return $query->result();
}

控制器应该保持不变。

你的看法

<table class="table">       
     <?php 
     foreach($form_data_supervisee as $question) {
     ?>
     <tr>      
         <td>
         <p><?php echo $question->question_id.". ".$question->Question; ?></p>
         <p>Answer: <?php echo $question->answer; ?></p>
         </td>
    </tr>   
    <?php 
    }
    ?> 
</table>

补充说明:

您的查询对 sql 注入完全开放 - 您 真的应该为这些目的使用内置的 QueryBuilder 你自己好。

看这里 https://www.codeigniter.com/userguide3/database/configuration.html#query-builder 并激活查询生成器(如果您还没有)。

【讨论】:

    【解决方案2】:

    希望对您有所帮助:

    你必须添加一个基于questions 表的join 查询和feedback 表,如下所示:

    function get_answers_supervisee () 
    {
        $employee_id = $this->session->userdata('userid');
        $this->db->select('q.id , q.question,f.answer ,f.employee_id');
        $this->db->from('questions q');
        $this->db->join('feedback f','f.question_id = q.id');
        $this->db->where('f.employee_id', $employee_id);
        $result = $this->db->get()->result();
        return $result;
        //print_r($result);
    }
    

    输出看起来像:

    id  question                 answer           employee_id
    1   How was your day?     That was awesome.     100
    2   How was the task?     That was excellent.   100
    3   How was the Project?  That was good.        100
    

    您的view 访问表列如下:

    <table class="table">       
         <?php foreach($form_data_supervisee as $item) {?>
         <tr>      
             <td>
             <?php echo $item->id;?>
             </td>
             <td>
             <?php echo $item->quesion;?>
             </td>
             <td>
             <?php echo $item->answer;?>
             </td>
          </tr>  
    
        <?php }?> 
    </table>   
    

    【讨论】:

    • 当我运行 SQL Developer 中生成的查询时,我收到此错误:ORA-00904: "q"."ID": invalid identifier 00904. 00000 - "%s: invalid identifier"
    • 确保问题表中的 id 列是 id 而不是 ID,我不会在代码中的任何地方使用 ID 字段
    • 我认为由于 Code Igniter 的版本存在 Oracle Active Record 支持问题。我正在使用 CodeIgniter 版本 3.1.4
    • 非常感谢 pradeep 先生的宝贵反馈。我得到了我的解决方案。你真是个了不起的人。
    • 快乐是我快乐的编码
    【解决方案3】:

    只需在视图中添加 if 语句即可根据问题输出答案。

     <table class="table">       
         <?php foreach($form_data_supervisee as $question) {?>
         <tr>      
             <td>
             <?php echo $question['ID'].". ".$question['DESCRIPTION']?>
             </td>
        </tr>   
             <?php foreach($form_answers_supervisee as $answer) {?>                 
        <tr>   
              <!-- check "id" in  "questions" table matches the "question_id" in "feedback" table --> 
              <?php if($question['ID'] == $answer['question_id']){ ?>
                  <td>
                        <textarea rows="5" name="<?php echo $answer['ANSWER']?></textarea>
                  </td>
              <?php } ?> 
        </tr>   
        <?php } ?>  
        <?php }?> 
      </table>
    

    【讨论】:

      【解决方案4】:

      您好,您的查询必须基于 question_id

          <?php 
      
          function get_answers_supervisee ($question_id) {
              $userid = $this->session->userdata('userid');
              $result = array ();
              $sql = "select answer from Feedback where employee_id = '$userid' AND question_id = '$question_id' LIMIT 1";
              $query = $this->db->query ( $sql );
              foreach ( $query->result_array () as $row ) {
                  array_push ( $result, $row );
              }
              return $result; 
          }
      
          ?> 
      

      【讨论】:

      • 我刚刚使用了这种方法,在线得到错误: $query = $this->db->query ( $sql );
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-13
      • 2016-01-18
      • 2019-02-18
      • 2020-01-22
      • 1970-01-01
      相关资源
      最近更新 更多