【问题标题】:Warning: Illegal string offset 'todo' | PHP警告:非法字符串偏移 'todo' | PHP
【发布时间】:2015-04-12 16:56:59
【问题描述】:

我正在尝试使用 PHP 做一个待办事项列表

但收到此错误警告:非法字符串偏移 'todo'

$userhastodo = "";

$toDo_Query = "SELECT * FROM `todo` WHERE `for`='".$_SESSION['id']."'";

$toDo_run_query =  mysqli_query($link , $toDo_Query);

$toDo_num_rows = mysqli_num_rows($toDo_run_query);


if($toDo_num_rows >= 1){
    $toDo_get_info = mysqli_fetch_array($toDo_run_query);

    $toDo_info = $toDo_get_info;

    foreach($toDo_info as $info){
        echo $info['todo'];

    }
}
else{
    $userhastodo = "You have no lists here :( !";
}

在我的 todo.php 页面的顶部

在html部分

        <?php if(empty($toDo_get_info)):?>
            <div class="empty">
                <i class="fa fa-meh-o fa-5x"></i>
                <h3>Strange, no lists found!</h3>
            </div>

            <?php else: ?>
                <ul class="list">
                <?php foreach($toDo_info as $info_in_toDo):?>
                    <li><span><?php echo $info_in_toDo['todo']?></span></li>
                <?php endforeach;?>
                </ul>
        <?php endif;?>

我该如何解决这个问题?它一直在警告我 => 警告:非法字符串偏移 'todo'

tod​​o 存在于我的 mysql 数据库中,保存着待办活动的数据

【问题讨论】:

  • 您的数据库表todo 是否有一个名为“todo”的字段?尝试 var_dump($info);获取有关您的数组 $info 的更多信息
  • todo 是你的表名还是你表内的列名?
  • 我在表格中的列名

标签: php mysql arrays


【解决方案1】:

如果您查看此部分:

$toDo_get_info = mysqli_fetch_array($toDo_run_query);

$toDo_info = $toDo_get_info;

foreach($toDo_info as $info){
    echo $info['todo'];
}

您看到您从结果集中获得了一行,因此$toDo_info 是一个包含完整行的一维数组。

您使用 foreach 遍历该行,因此您将从该行获取所有值,这些值是字符串,而不是数组。

你只需要:

echo $toDo_get_info['todo'];

编辑:要获取所有行并回显所有项目,您需要获取所有行:

while ($toDo_get_info = mysqli_fetch_array($toDo_run_query))
{
    // add your html to add list items here as well
    echo $toDo_get_info['todo'];
}

【讨论】:

  • 我想在循环时获取表中的所有待办事项列我不想获取一个元素我该怎么做?
  • 谢谢,但是有没有使用 foreach 的方法?我正在关注关于如何做待办事项列表的 phpacdemy 系列,但他将 PDO 与 foreach 一起使用
  • @SR11 不是直接的,但在 PDO 中,您可以使用 fetchAll() 将所有行一次性放入一个多维数组中。您可以使用foreach 循环遍历该数组,因此是间接的,是的。在 mysqli 中,您可以使用 mysqli_fetch_all() 执行相同的操作。关键是获取所有行。
【解决方案2】:

试着改成这个

foreach($toDo_info as $key => $info){
    echo $info;
}

最好还是看看@jeroen 的回答...

【讨论】:

  • 它有效,但我想循环遍历我表中的所有待办事项列并打印它们这个解决方案将循环打印第一行
猜你喜欢
  • 2013-04-11
  • 2012-04-09
  • 1970-01-01
  • 1970-01-01
  • 2016-05-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多