我的代码:
<?php
require_once('auth.php');
require_once('connection.php');
$value1 = $_POST['value1'];
$qry=mysql_query("SELECT * FROM table WHERE (`value1` LIKE '%".$value1."%')") or die(mysql_error());
if(mysql_num_rows($qry) > 0){
while ($result = mysql_fetch_array($qry)){
$value1 = $result['value1'];
$value2 = $result['value2'];
}}else{die ("can't find ".$value1."");}
?>
<br />
<table width="700" border="0">
<tr>
<td colspan="2" align="center"><strong>Info for <?php echo $value1; ?></strong></td>
</tr>
<tr>
<td width="100">Some text:</td>
<td width="590"><?php echo $value2;?></td>
</tr>
当只有一行具有相同的value1值时,代码工作正常。如果有2,3或更多行具有相同的value1值,则脚本仅显示查找值中找到的表中最后一行的值。我希望它显示包含所有查询行的条目的单独表。 我在网上寻求帮助,但我能找到的是如何从我的数据库中检索值,对我没有任何帮助
答案 0 :(得分:1)
您将返回行中的值分配给$ value1和$ value2。因此,循环的每次迭代都会替换这些变量中的最后存储值。
这实际上只会给你找到的最后一行值(分配给变量的最后一个值。)
您需要将这些值推送到集合/数组中并重新循环它们以构建表,或者将表代码放在初始循环中。
答案 1 :(得分:1)
你应该将你的html块移到while循环中。试试这个
<br />
<table width="700" border="0">
<?php
if(mysql_num_rows($qry) > 0){
while ($result = mysql_fetch_array($qry)){
$value1 = $result['value1'];
$value2 = $result['value2'];
?>
<tr>
<td colspan="2" align="center"><strong>Info for <?php echo $value1; ?></strong></td>
</tr>
<tr>
<td width="100">Some text:</td>
<td width="590"><?php echo $value2;?></td>
</tr>
<?php
}}else{die ("can't find ".$value1."");}
?>
</table>
我将<table>
代码移到while循环之前,将表行移动到循环内部,并在循环之后移动表close标记。通过这种方式,您可以获得所有行。
如果您不想在没有行的情况下显示该表,则可以将<table ..>
和</table>
标记移动到if
语句块内。
编辑:
if(mysql_num_rows($qry) > 0){
?>
<br />
<table width="700" border="0">
<?php
while ($result = mysql_fetch_array($qry)){
$value1 = $result['value1'];
$value2 = $result['value2'];
?>
<tr>
<td colspan="2" align="center"><strong>Info for <?php echo $value1; ?></strong></td>
</tr>
<tr>
<td width="100">Some text:</td>
<td width="590"><?php echo $value2;?></td>
</tr>
<?php
}
echo '</table>';
}else{die ("can't find ".$value1."");}
?>