【问题标题】:MySql, loop (while foreach)MySql,循环(同时 foreach)
【发布时间】:2014-12-05 09:07:59
【问题描述】:

我有一个大问题。我从数据库中获取数据。我想在标签中显示它们。我的方法是循环中的循环。我给你看代码。我的问题是结果(第二个循环)所有数据都输出了。

第一个循环在自己的选项卡中显示具有相同 ID 的每个用户名。这样可行。第二个循环的运行原理相同。但第二个循环没有过滤。

(!) 第一个循环正确显示每个用户名与自己的标签相同的 id。但是 sec on loop 向我显示所有 event_names,而不仅仅是用户的事件名称。 简历:我有 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>';
   }      





?>

【问题讨论】:

  • 最好把整个代码贴出来。
  • 你好,在你的 $sqli 之前,做 $user = $row2['username']; ,并在您的 $sqli 变量中将 $row[username] 替换为 $user ,看看是否有任何改变。为什么这个?那么 $row2[username] 将不起作用,因为它应该是 $row2['username'] ...并且为了避免整个引用问题,只需创建一个额外的变量。
  • 不,它不会改变。我有 3 个用户。每个用户。用户 1 有自己的选项卡。 (2 个事件)用户 2 有自己的选项卡。 (1 个事件)用户 3 有自己的选项卡。 (1 个事件)在第二个循环中,我询问每个用户的事件。在用户 1 的选项卡中必须出现 2 个事件 在用户 2 的选项卡中必须出现 1 个事件,在用户 3 的选项卡中也必须出现 1 个事件。但是,在每个选项卡(用户 1,2 和 3)中出现 4 个事件。所有用户的事件......这是循环的问题,不是吗?
  • @Philip 现在发布整个代码。谢谢!!!!

标签: php mysql foreach while-loop


【解决方案1】:

我只是将其发布为答案而不是评论。

看来您的问题与您的 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/fr/pdostatement.bindvalue.php

【讨论】:

  • 不,这不是问题所在。问题是,第一个循环显示所有用户名,在第二个循环中它也显示...
  • 不,它不会改变。我有 3 个用户。每个用户。用户 1 有自己的选项卡。 (2 个事件)用户 2 有自己的选项卡。 (1 个事件)用户 3 有自己的选项卡。 (1 个事件)在第二个循环中,我询问每个用户的事件。在用户 1 的选项卡中必须出现 2 个事件 在用户 2 的选项卡中必须出现 1 个事件,在用户 3 的选项卡中也必须出现 1 个事件。但是,在每个选项卡(用户 1,2 和 3)中出现 4 个事件。所有用户的事件......这是循环的问题,不是吗?
【解决方案2】:

你的第二个查询应该是这个

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

您在用户名中缺少单个 quete 意味着它应该是 $row['username'];

总是打开错误或使用mysqli_error() 函数,他们会告诉你哪里出错了。

请查看此链接以提高您的知识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 个事件。所有用户的事件......这是循环的问题,不是吗?
  • 现在我已经更新了我的问题 :-) 我希望现在它清楚了。对不起我的英语不好:-S
猜你喜欢
  • 2018-08-20
  • 2016-10-25
  • 2015-10-29
  • 1970-01-01
  • 2016-09-02
  • 1970-01-01
  • 2016-12-28
  • 2017-10-27
  • 1970-01-01
相关资源
最近更新 更多