MySql,循环(while foreach)

3
我有一个大问题。我从数据库中获取数据。我想在选项卡中显示它们。我的方法是在循环中嵌套循环。以下是代码展示。问题在于结果(第二个循环)输出了所有数据。
第一个循环在每个用户名下显示相同id的内容,具有自己的选项卡。这个可以正常工作。第二个循环按照同样的原则进行操作。但是第二个循环没有过滤。
(!) 第一个循环为每个用户名按照相同id显示自己的选项卡。但是第二个循环显示了所有事件名称,而不仅仅是用户的事件名称。 总结:我有3个用户。每个用户都有自己的标签页。用户1有2个事件,用户2有1个事件,用户3也有1个事件。在第二个循环中,我要求每个用户的事件。在用户1的选项卡中必须出现2个事件,在用户2的选项卡中必须出现1个事件,在用户3的选项卡中也必须出现1个事件。但是,在每个选项卡(用户1、2和3)中都出现了4个事件。所有用户的事件...这是循环的问题,不是吗? (!)
有人能帮我吗?
以下是一些表格和输出的图片:
我的用户表
代码:
<?php    
$db = mysqli_connect(DB_HOST, DB_BENUTZER, DB_password, DB_NAME);
mysqli_set_charset($db, "utf8");
$sqli2 = "SELECT username, premium FROM users WHERE id =  $id   ";  
$result2 = mysqli_query($db, $sqli2);   
foreach ($result2 as $row2)     
        {   
           echo '<div class="tabs">';

我的桌面派对:

图片描述

代码:

$db = mysqli_connect(DB_HOST, DB_BENUTZER, DB_password, DB_NAME);
mysqli_set_charset($db, "utf8");
$sqli = "SELECT party_id, event_name, beginn, ende, unternehmen FROM party WHERE unternehmen =  '".$row2['username']."'   ";  
$result = mysqli_query($db, $sqli);    
while ($row = mysqli_fetch_assoc($result)) 
{
    echo '<h3> '. $row['unternehmen'] .' '. $row['event_name'] .' </h3>'; 

我的输出结果是:在这里输入图片描述

错误在哪里?我不敢相信 :-( 求帮助!!!

这里是完整的代码:

<?php


$db = mysqli_connect(DB_HOST, DB_BENUTZER, DB_password, DB_NAME);
mysqli_set_charset($db, "utf8");
$sqli2 = "SELECT username, premium FROM users WHERE id =  $id   ";  
$result2 = mysqli_query($db, $sqli2);


 foreach ($result2 as $row2) {


           echo '<div class="tabs">';
  echo '<ul>';
  echo '<li><a href="#tabs-1"> '. $row2['username'] .' </a></li>';
  echo '<li><a href="#tabs-2">Proin dolor</a></li>';
  echo '<li><a href="#tabs-3">Aenean lacinia</a></li>';
  echo '</ul>';
  echo '<div id="tabs-1">';
  echo '<p>Proin elit ac sollicitudin mi sit amet mauris. Nam elementum quam us.</p>';






  echo '</div>';
  echo '<div id="tabs-2">';




   echo '<p><div class="accordion">';


$db = mysqli_connect(DB_HOST, DB_BENUTZER, DB_password, DB_NAME);
mysqli_set_charset($db, "utf8");
$sqli = "SELECT party_id, event_name, beginn, ende, unternehmen FROM party WHERE unternehmen =  '".$row2['username']."'   ";
$result = mysqli_query($db, $sqli);


    while ($row = mysqli_fetch_assoc($result)) 
        {        


    echo '<h3> '. $row['unternehmen'] .' '. $row['event_name'] .' </h3>'; 
    echo '<div> ';
    echo '<form enctype="multipart/form-data" method="post" >';
    echo '<legend>Event Daten</legend>';
    echo '<label for="event_name">Name:</label>';
    echo '<input type="text" id="event_name" name="event_name" value="'. $row['event_name'] .'" /><br />';
    echo '<label for="beginn">Beginn:</label>';
    echo '<input type="text" id="beginn" name="beginn" value=" '. $row['beginn'] .'" /><br />';
      echo '<label for="party_id" value=" '. $row['party_id'].'"> Party ID:'. $row['party_id'].' </label>';
      echo '<input type="radio" id="party_id" name="party_id" value=" '. $row['party_id'] .'" /><br />';

  echo '</fieldset>';
  echo '<input type="submit" value="Änderungen speichern" name="partyspeicher" />';
  echo '</form>';
        echo '</div>';

         }

    echo '</div>';
    echo '</p>';


    echo '</div>';
    echo '<div id="tabs-3">';
    echo '<p> Pellentesque nec elit. Fusce in lacus. Vivamus a libero vitae lectus hendrerit hendrerit.</p>';
  echo '</div>';
  echo '</div>';
   }      





?>

最好发布整个代码。 - Phillip
你好,在进行 $sqli 操作之前,先执行 $user = $row2['username']; ,然后在 $sqli 变量中用 $user 替换 $row[username],看看是否有所改变。为什么这样做呢?因为 $row2[username] 是无效的,正确的写法应该是 $row2['username'] ... 为了避免引号问题,我们可以创建一个额外的变量。 - kemicofa ghost
不,它没有改变。我有3个用户。 用户1有自己的选项卡。(2个事件) 用户2有自己的选项卡。(1个事件) 用户3有自己的选项卡。(1个事件) 在第二个循环中,我询问每个用户的事件。 在用户1的选项卡中必须出现2个事件, 在用户2的选项卡中必须出现1个事件, 在用户3的选项卡中也必须出现1个事件。 但是, 在每个选项卡(用户1、2和3)中都会出现4个事件。所有用户的事件... 这是循环的问题,不是吗? - user3690260
@Philip,整个代码现在已经发布了。谢谢!!! - user3690260
2个回答

2

我会将这篇评论转化为一篇回答。

看起来你的问题直接与你的SQL语句有关:

$sqli = "SELECT party_id, event_name, beginn, ende, unternehmen FROM party WHERE unternehmen =  '$row2[username]'   ";

请注意你的$row2[username],它应该是$row2['username'],但这可能会导致你的sql语句出现问题。创建另一个名为$username的变量。

$username = $row2['username'];
$sqli = "SELECT party_id, event_name, beginn, ende, unternehmen FROM party WHERE unternehmen =  '$username'   ";

请查看是否有任何变化。

供日后参考:

我建议使用PDO(更安全)而不是mysqli。相对容易使用,具有许多有用的功能,例如bindValue()函数,它将替换$username = $row2['username'];为类似于

 $sqli = $db->prepare("SELECT party_id, event_name, beginn, ende, unternehmen FROM party WHERE unternehmen =  ':user'   ");
$sqli->blindValue(':user', $row2['username'], PDO::PARAM_STR);

(如果 $db 是一个 PDO 对象) http://php.net/manual/zh/pdostatement.bindvalue.php

不,这不是问题所在。问题在于第一个循环显示了所有的用户名,在第二个循环中也做了同样的事情... - user3690260
不,它没有改变。我有3个用户。 用户1有自己的选项卡。(2个事件) 用户2有自己的选项卡。(1个事件) 用户3有自己的选项卡。(1个事件) 在第二个循环中,我询问每个用户的事件。 在用户1的选项卡中必须出现2个事件, 在用户2的选项卡中必须出现1个事件, 在用户3的选项卡中也必须出现1个事件。 但是, 在每个选项卡(用户1、2和3)中都会出现4个事件。所有用户的事件... 这是循环的问题,不是吗? - user3690260

1
你的第二个查询应该是这个。
    $sqli = "SELECT party_id, event_name, beginn, ende, unternehmen 
FROM party WHERE unternehmen =  '".$row2['username']."'   "

你的用户名里缺少单引号,正确写法应该是$row['username'];
开启错误提示或使用mysqli_error()函数来寻找错误原因。
请查看这个链接来加深对MySQL标识符限定符的了解:http://dev.mysql.com/doc/refman/5.0/en/identifier-qualifiers.html

不,它没有改变。我有3个用户。 用户1有自己的选项卡。(2个事件) 用户2有自己的选项卡。(1个事件) 用户3有自己的选项卡。(1个事件) 在第二个循环中,我询问每个用户的事件。 在用户1的选项卡中必须出现2个事件, 在用户2的选项卡中必须出现1个事件, 在用户3的选项卡中也必须出现1个事件。 但是, 在每个选项卡(用户1、2和3)中都会出现4个事件。所有用户的事件... 这是循环的问题,不是吗? - user3690260
现在我已经更新了我的问题 :-) 希望现在更清楚了。抱歉我的英语不好 :-S - user3690260

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接