2014-02-08 39 views
0

我想弄清楚我将如何在我的while语句中做一个foreach语句。正如你可以通过这段代码所说的那样,即使它选择了所有的行,它也只会从表中提交1行。我将如何让它选择每一行?虽然声明(NumRows)内的Foreach

代码:

$q2 = mysql_fetch_array(mysql_query("SELECT * FROM `ticketreply` WHERE `ticketid`='$id'")); 
$num_rows = mysql_num_rows($q2); 
while(count($num_rows) > $i){ 
    echo "<div style='float:left;width:940px;margin-bottom:2%;margin-left:".($i + 1)."0px;margin-right:25%;'><div style='margin-left:".($i + 1)."0px;border:1px solid #cecece;padding:10px;'>Posted By: <a href='#'>".user2($q2[1])."</a><h2>".$q2[2]."</h2></div></div></div>"; 
    $i++; 
} 

新尝试:

$q2 = mysql_query("SELECT * FROM `ticketreply` WHERE `ticketid`='$id'"); 
$i = 0; 
foreach($q2 as $s){ 
    echo "<div style='float:left;width:100%;margin-bottom:2%;margin-left:".($i + 1)."0px;margin-right:25%;'><div style='margin-left:".($i + 1)."0px;border:1px solid #cecece;padding:10px;'>Posted By: <a href='#'>".user2($s[1])."</a><h2>".$s[2]."</h2></div></div></div>"; 
    $i++; 
} 

虽然现在这个不显示任何行。

+0

首先尽量避免使用'mysql_ *'函数。而不是使用php中的'mysqli_ *'函数> 5.3 – krishna

+0

你看到foreach吗?或者我错过了什么? –

+0

mysql_fetch_array不会返回数组中的所有结果。它返回一行,每次你再次运行它将返回下一行。 你检查了PHP手册吗?示例#2向您展示了如何使用这些功能。 http://php.net/manual/en/function.mysql-fetch-array.php –

回答

1
$q2 = mysql_query("SELECT * FROM `ticketreply` WHERE `ticketid`='$id'"); 

$i = 0; 
while ($s = mysql_fetch_array($q2, MYSQL_NUM)) { 
    echo "<div style='float:left;width:100%;margin-bottom:2%;margin-left:".($i + 1)."0px;margin-right:25%;'><div style='margin-left:".($i + 1)."0px;border:1px solid #cecece;padding:10px;'>Posted By: <a href='#'>".user2($s[1])."</a><h2>".$s[2]."</h2></div> </div></div>"; 
    $i++ 
} 
1

只是要清楚,你的查询,SELECT * FROM ticketreply WHERE ticketid ='$id'是最有可能只从表中选择一个行。我假设您的ticketreply表中的ticketid是唯一的。所以只有一行被选中。

如果我用这个假设去,然后......

mysql_fetch_array获取所有从查询返回一行。关于mysql_fetch_array的文档可以是found here

我会建议您在开始输出HTML和样式之前,首先打开一些$q2的打印语句,看看它是否包含您期望它包含的内容,并且具有您期望的结构有。

尝试:

$q2 = mysql_fetch_array(mysql_query("SELECT * FROM `ticketreply` WHERE `ticketid`='$id'")); 
print_r($q2); 

您应该看到$ Q2是一个数组,它是两个整数索引,并串索引(即,它也是一个散列结果,其中在表中的每个列名是关键)。让我们限制mysql_fetch_array,这样它只是给我们关联的数组(字符串索引部分)而不是整数。

foreach ($q2 as $column => $value) { 
    print "column name: $column\n"; 
    print "  value: $value\n"; 
    print "\n"; 
} 

刚刚相反,如果你不关心的列名,和你:

$q2 = mysql_fetch_array(mysql_query("SELECT * FROM `ticketreply` WHERE `ticketid`='$id'"), MYSQL_ASSOC); 

现在,您可以通过以下方式联系的$q2每个元素作为一个键 - 值对希望值的整数数组索引,那么你就可以做到以下几点:

$q2 = mysql_fetch_array(mysql_query("SELECT * FROM `ticketreply` WHERE `ticketid`='$id'"), MYSQL_NUM); 

然后,您可以使用常规for循环,通过你的结果迭代...

for ($i = 0; $i < sizeof($q2); $i++) { 
    print "Value $i: " . $q2[$i] . "\n"; 
} 

一旦你得到什么的$q2结构是一个很好的感觉,那么你可能会觉得很舒适,有信心从$q2嵌入在正确的位置值输出HTML中。

+0

这不是唯一的。它基本上只是取回你正在回复的票并将其ID放入数据库中。虽然我看到你的意思,但它的选择多于1,当我var_dump时选择它们全部。 – user3023566