Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 消息:从Codeigniter2x版本到Codeigniter 3x版本的非法字符串偏移量升级_Php_Codeigniter_Wampserver - Fatal编程技术网

Php 消息:从Codeigniter2x版本到Codeigniter 3x版本的非法字符串偏移量升级

Php 消息:从Codeigniter2x版本到Codeigniter 3x版本的非法字符串偏移量升级,php,codeigniter,wampserver,Php,Codeigniter,Wampserver,我最近将我的项目包从Codeigniter 2X版本切换到Codeigniter 3X版本 以前我所有的代码都工作得很好,但现在有了新的包,它显示了一些微小的错误,我无法运行我的代码 错误如下: 消息:非法字符串偏移量: 我的控制器: public function proflist(){ $data = ""; $this->load->model('feedbackmodel'); $data['teachers'] =

我最近将我的项目包从Codeigniter 2X版本切换到Codeigniter 3X版本

以前我所有的代码都工作得很好,但现在有了新的包,它显示了一些微小的错误,我无法运行我的代码

错误如下: 消息:非法字符串偏移量:

我的控制器:

public function proflist(){
          $data = "";
          $this->load->model('feedbackmodel');
          $data['teachers'] =  $this->feedbackmodel->getFaculty();
          $this->load->view('feedback/proflist',$data);
 }

我的模型:

public function getFaculty(){
        $query = $this->db->query('SELECT * FROM teacher');
        return $query->result_array();
}
我的看法是:

<?php 

                  if(!empty($teachers)) {
                  foreach($teachers as $y){


                    ?>

                  <tr>
                    <td><?php echo $y->fid; ?></td>
                    <td><?php echo $y->fname." ". $y->lname; ?></td>
                    <td><?php echo $y->email; ?> </td>
                    <td>
...

...

有什么错误吗?我该怎么换呢。请让我知道:)谢谢。

原因很可能是您正在使用的PHP版本。在PHP7.1之前,它只是因为使用非法偏移量而引发的通知。7.1+现在将抛出警告。您可以通过在控制器中围绕有问题的数组包装一个“(如果不是,则为isset”)来避免它。一定要同时施放阵列


为了确定正在运行的PHP版本,可以使用
phpinfo()

您需要更加了解变量类型

在控制器中

public function proflist(){
    $data = "";
    $this->load->model('feedbackmodel');
    $data['teachers'] =  $this->feedbackmodel->getFaculty();
    $this->load->view('feedback/proflist',$data);
}
您通过
$data=“”)将$data声明为字符串,

然后你决定它将是一个数组

$data['teachers'] =  $this->feedbackmodel->getFaculty();
要正确,$数据应声明为空数组,而不是emtpy字符串

public function proflist(){
    $data = array(); // Using the older style of declaring an array.
    $this->load->model('feedbackmodel');
    $data['teachers'] =  $this->feedbackmodel->getFaculty();
    $this->load->view('feedback/proflist',$data);
}
现在,在您的模型中,返回的数据是通过

return $query->result_array();
如果您查阅codeigniter文档,它会告诉您结果数据是一个关联数组,即$data['teachers']的形式
$data['teachers']['fid']

视图要求它是一个对象。 所以你可以改变你的观点,要求$teachers是一个对象,从

<?php 
  // $teachers should be returned from result() which is an object.
  if(!empty($teachers)) {
    foreach($teachers as $y){
  ?>
  <tr>
  <td><?php echo $y->fid; ?></td>
  <td><?php echo $y->fname." ". $y->lname; ?></td>
  <td><?php echo $y->email; ?> </td>
  <td>
...

因此,简短的版本是:

  • 检查返回的数组结构。您应该为此使用var_dump()

  • 更改您的代码以适应

  • 将模型的返回值从result_array()更改为result(),或者

  • 将视图从寻址对象更改为关联阵列


  • 在这一阶段,我迫切需要更多的时间来讨论细节,但这应该可以帮助您了解正在发生的事情。

    您使用的是PHP7.1吗?
    <?php 
      // $teachers should be returned from result() which is an object.
      if(!empty($teachers)) {
        foreach($teachers as $y){
      ?>
      <tr>
      <td><?php echo $y->fid; ?></td>
      <td><?php echo $y->fname." ". $y->lname; ?></td>
      <td><?php echo $y->email; ?> </td>
      <td>
    ...
    
    <?php 
      // $teachers is returned from result_array() which is an associative array.
      if(!empty($teachers)) {
        foreach($teachers as $y){
      ?>
      <tr>
      <td><?php echo $y['fid']; ?></td>
      <td><?php echo $y['fname']." ". $y['name']; ?></td>
      <td><?php echo $y['email']; ?> </td>
      <td>
      ...
    
    public function getFaculty(){
      $query = $this->db->query('SELECT * FROM teacher');
      return $query->result_array(); // Return an associative array
    }
    
    public function getFaculty(){
      $query = $this->db->query('SELECT * FROM teacher');
      return $query->result; // Return an object
    }