2014-10-10 172 views
3

我有一个很大的问题。我从数据库中获取数据。我想在选项卡中显示它们。我的方法是一个循环。我向你展示代码。我的问题是结果(第二个循环)输出所有数据。MySql,循环(while foreach)

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

(!) 第一个循环显示我正确为每个用户名与相同的id自己的选项卡。但秒循环会显示所有event_names,而不仅仅是用户的事件名称。 简历:我有3个用户。每个用户。用户1有他自己的选项卡。 (2个事件)用户2有他自己的选项卡。 (1个事件)用户3有他自己的选项卡。 (1事件)在第二个循环中,我问每个用户的事件。在用户1的标签中必须出现2个事件,在用户2的标签中必须出现1个事件,并且在用户3的标签中也必须出现1个事件。但是,在每个选项卡(用户1,2和3)中都会出现4个事件。所有用户的事件......是循环的问题,不是吗? (!)

有人可以帮我吗?

这里表中的一些图片和输出:

我的表的用户

enter image description here

代码:

<?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">'; 

我的表方:

enter image description here

代码:

$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>'; 

和我的输出: enter image description here

哪里错误?我不能相信它:-(请大家帮帮我!!!!

这里的全部代码:

<?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>'; 
    }  





?> 
+0

可能是最好的后整个代码。 – Phillip 2014-10-10 08:53:40

+0

你好,在你的$ sqli之前,做$ user = $ row2 ['username']; ,然后在你的$ sqli变量中用$ user替换$ row [username],看看是否改变了任何东西。为什么这个?那么$ row2 [用户名]将不起作用,因为它应该是$ row2 ['username'] ...并且为了避免整个报价问题,只需创建一个额外的变量。 – rottenoats 2014-10-10 09:00:34

+0

不,它不会改变。我有3个用户。每个用户。 用户1有他自己的选项卡。 (2个事件) 用户2拥有自己的选项卡。 (1个事件) 用户3拥有自己的选项卡。 (1个事件) 在第二个循环中,我问每个用户的事件。 在用户1的标签中必须出现2个事件 在用户2的标签中必须出现1个事件并且用户3的标签中的 也必须出现1个事件。 BUT, 在每个标签(用户1,2和3)中出现4个事件。所有用户的事件... 它是循环的问题,不是吗? – user3690260 2014-10-10 13:25:32

回答

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/fr/pdostatement.bindvalue.php

+0

不,不是这个问题。问题是,第一个循环显示所有用户名,并在第二个循环中显示所有用户名... – user3690260 2014-10-10 13:20:44

+0

不,它不会改变。我有3个用户。每个用户。 用户1有他自己的选项卡。 (2个事件) 用户2拥有自己的选项卡。 (1个事件) 用户3拥有自己的选项卡。 (1个事件) 在第二个循环中,我问每个用户的事件。 在用户1的标签中必须出现2个事件 在用户2的标签中必须出现1个事件并且用户3的标签中的 也必须出现1个事件。 BUT, 在每个标签(用户1,2和3)中出现4个事件。所有用户的事件... 它是循环的问题,不是吗? – user3690260 2014-10-10 13:26:29

1

您第二个查询应该是这个

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

你缺少用户名单一quete意味着它应该是$行[“用户名”];

总是打开错误或使用mysqli_error()函数,他们会告诉什么错误。

请检查此链接到你的尖锐knowlede http://dev.mysql.com/doc/refman/5.0/en/identifier-qualifiers.html

+0

不,它不会改变。我有3个用户。每个用户。 用户1有他自己的选项卡。 (2个事件) 用户2拥有自己的选项卡。 (1个事件) 用户3拥有自己的选项卡。 (1个事件) 在第二个循环中,我问每个用户的事件。 在用户1的标签中必须出现2个事件 在用户2的标签中必须出现1个事件并且用户3的标签中的 也必须出现1个事件。 BUT, 在每个标签(用户1,2和3)中出现4个事件。所有用户的事件... 它是循环的问题,不是吗? – user3690260 2014-10-10 13:28:09

+0

现在我已经更新了我的问题:-)我希望现在清楚。对不起我的英语不好:-S – user3690260 2014-10-12 17:53:10

+0

谢谢你!我给你发一封电子邮件!非常感谢! – user3690260 2014-10-14 05:49:23