【问题标题】:What's wrong with my php loop?我的 php 循环有什么问题?
【发布时间】:2016-02-20 02:56:47
【问题描述】:

我有一个名为 pages 的表,在名为 Page 的列中有 2 个具有相同单词“about”的条目。我想根据具有相同页面名称的条目数创建divs。

这应该很容易,但它只是看不出哪里出了问题。

我有一个名为 page 的变量,我将它回显到索引页面上,它看起来像这样:

$page = pageDivs($dbc, $path['call_parts'][0])

在这种情况下,$path 变量将等于字符串 'about'。

函数pageDivs($dbc, about) 如下所示:

function pageDivs($dbc, $id){
$q="SELECT * FROM pages WHERE Page='$id'";
$r = mysqli_query($dbc, $q);
$data=mysqli_fetch_assoc($r);
for ($i=1; $i<count($data); $i++) {
    echo '<div id="Content'.$i.'">'.$data['Content'].'</div>';
    }
}

或者这个:

function pageDivs($dbc, $id){
$q="SELECT * FROM pages WHERE Page='$id'";
$r = mysqli_query($dbc, $q);
$data=mysqli_fetch_assoc($r);
$i=1;
foreach ($data AS $value){
    if ($i>count($data)){
    echo '<div id="Content'.$i.'">'.$value['Content'].'</div>';
    $i++;
        }
    }

或者这个:

function pageDivs($dbc, $id){
$q="SELECT * FROM pages WHERE Page='$id'";
$r = mysqli_query($dbc, $q);
$data=mysqli_fetch_assoc($r);
$i=1;
foreach ($data AS $key=>$value){
    if ($i>count($data)){
    echo '<div id="Content'.$i.'">'.$data[$i]['Content'].'</div>';
    $i++;
        }
    }
}

我已经尝试过fetch_assocfetch_array 以及所有组合,除了显然是$k =&gt; $v 的组合之外,我已经将$data 或$key 到处或$value 到处。快把我逼疯了。

我显然在这里遗漏了一些基本的东西,所以请有人能启发我。我真的不在乎我是使用for 循环还是foreach 循环。结果应该是一样的。有时我得到 7 次迭代的条目 1 其他人我什么都没有得到。有明确的 2 个具有相同名称的条目,因此在这种情况下最大 divs 应该是 2,但我希望它保持动态。

【问题讨论】:

  • 查看以下链接 php.net/manual/en/mysqli.error.phpphp.net/manual/en/function.error-reporting.php 并将其应用于您的代码和 var_dump 并查看 HTML 源代码。
  • (我无法确定,因为它不在 sn-ps 中)您是否打开了数据库连接(抱歉,如果这是侮辱)?此外,对 Sql 注入开放。
  • $dbc 是我的数据库连接,它已经被证明可以工作。问题出在循环上
  • 您是否期望 SQL SELECT 语句将返回多行?如果是这样,您必须在循环内调用mysqli_fetch_assoc() 以从中获取所有行。仅调用一次会在$data 中生成一维关联数组。查看文档php.net/manual/en/mysqli-result.fetch-assoc.php中的while循环示例

标签: php for-loop foreach


【解决方案1】:

虽然循环是一个:

function pageDivs($dbc, $id){
$q="SELECT * FROM pages WHERE Page='$id'";
$r = mysqli_query($dbc, $q);
$i=1;
while ($data=mysqli_fetch_assoc($r)){?> 
    <div id="Content<?php echo $i; ?>">
        <?php echo $data['Content']?>
    </div>
    <?php $i++;
    }
}

【讨论】:

    【解决方案2】:

    $data 变量中只有一个结果,最好使用mysqli_num_rows($r); 来计算您有多少结果。

    <?php 
    function pageDivs($dbc, $id){
    $q="SELECT * FROM pages WHERE Page='$id'";
    $r = mysqli_query($dbc, $q);
    //$data=mysqli_fetch_assoc($r);
    $numofrowresult=mysqli_num_rows($r); //Count how many result you have
    echo $numofrowresult;
    $i = 1; //initalize counter for  the unique id
    
    foreach($r as $values)
    {
          echo '<div id="Content'.$i.'">'.$values['Content'].'</div>';
          $i++;
    }
    }
    
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-23
      • 2016-04-26
      • 1970-01-01
      • 2017-10-02
      • 2011-03-10
      • 2016-05-05
      • 1970-01-01
      相关资源
      最近更新 更多