我有一个PHP循环,其中包含循环内的查询我设置两个变量以包含某些结果,然后我想使用循环外的变量。但是,当我这样做时,他们只是返回未定义。代码如下:
<?php
$standardresult = mssql_query("SELECT Price FROM Extras WHERE ExtraID = 5 ");
while ($standardrow = mssql_fetch_array($standardresult )) {
$toughresult = mssql_query("SELECT Price FROM Extras WHERE ExtraID = 6 ");
while ($toughrow = mssql_fetch_array($toughresult)) {
$toughprice = $toughrow['Price'];
$standardprice = $standardrow['Price'];
echo $standardrow['Price'];
echo $toughrow['Price'];
?>
<td align="center">
<input type="radio" name="triple" value="yes" onclick="showPrice('<?php echo $standardrow['Price']; ?>','<?php echo $toughrow['Price']; ?>')" /> yes
</td>
<td> </td>
<td align="center">
<input type="radio" name="triple" value="no" onclick="showPrice('0','0')" checked="checked" /> no
</td>
<?php
}
}
?>
</tr>
</table>
<input type="hidden" name="ToughPrice" value="<?php echo $toughprice; ?>" />
<input type="hidden" name="StanPrice" value="<?php echo $standardprice; ?>" />
有问题的变量是$ toughprice和$ standardprice。任何人都可以告诉我哪里出错了,或者是否有可能吗?感谢您的任何帮助。
答案 0 :(得分:3)
$standardresult = mssql_query("SELECT Price FROM Extras WHERE ExtraID = 5 ");
while ($standardrow = mssql_fetch_array($result)) {
$toughresult = mssql_query("SELECT Price FROM Extras WHERE ExtraID = 6 ");
while ($toughrow = mssql_fetch_array($result)) {
???我想它应该是
$standardresult = mssql_query("SELECT Price FROM Extras WHERE ExtraID = 5 ");
while ($standardrow = mssql_fetch_array($standardresult)) {
$toughresult = mssql_query("SELECT Price FROM Extras WHERE ExtraID = 6 ");
while ($toughrow = mssql_fetch_array($toughresult)) {
也许它会有所作为......
答案 1 :(得分:1)
除了未定义值的标签之外,您还有其他输出吗? 如果没有,你的一个查询没有返回结果,你从未在while语句之外定义变量。
在java中,你甚至会得到这种方法的语法错误,因为它不像你在这里做的那样健壮。 在最终的while语句执行后,您对变量的期望是什么?只有您通过查询收到的可能条目集中的最后一个条目? 如果您不希望有多行,则不需要WHILE并只获取第一个结果。我不知道“LIMIT 1”的MSSQL语句 - 但这也有帮助。
答案 2 :(得分:1)
你的代码看起来很不错,但你犯了逻辑错误 - 如果没有更多数据要分配给你的while
,你就会$toughresult
循环结束。因此,一旦循环结束,$toughresult
不包含任何可用数据:
成功时返回MS SQL结果资源,如果没有行则返回TRUE 返回,或错误时为FALSE。
所以只需var_dump($toughresult);
来验证这一点。如果要使用数据,请中断循环或将数据复制到另一个不会被覆盖的变量。
为避免将来出现此类问题,请务必确保检查手册中是否有可能的返回值,并确保代码正确处理,包括。边缘情况。
答案 3 :(得分:1)
undefined
表示未初始化使用的变量。如果代码永远不会通过您的第二个$toughprice
循环,那么$standardprice
和while
就是如此。这可以从页面上呈现的html中看出来,因为不应该创建动态创建的html
(在这种情况下为td
)。
从您的代码中可以看出:
然后调试这些查询以查看错误。
PS:我不确定你为什么要使用两个嵌套的while
循环,内部不需要来自外部的数据。您有两个静态查询,可以相互独立。如果由于某种原因,您需要第一个循环的每个项目迭代第二个循环的结果,在执行数据库查询后执行。现在你得到第二个查询的相同的结果N次(N是第一个查询的行)
最后如果出于某种原因没有任何结果是预期的情况,那么在 while
循环之前初始化变量以摆脱undefined
错误
例如:
<?php
$toughprice = 0; // default value
$standardprice = 0; //default value
...
while (...) {
while (...) {
$toughprice = ...
$standardprice = ...
}
}
...
<input type="hidden" name="ToughPrice" value="<?php echo $toughprice; ?>" />
<input type="hidden" name="StanPrice" value="<?php echo $standardprice; ?>" />