1

ループ内にクエリを含む PHP ループがあり、特定の結果を含むように 2 つの変数を設定し、ループの外で変数を使用したいと考えています。しかし、私がそうすると、それらは未定義として返されます。コードは次のとおりです。

<?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>&nbsp;</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 です。どこが間違っているのか、または可能であれば教えてもらえますか? 助けてくれてありがとう。

4

4 に答える 4

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)) {

多分それは違いを生むでしょう...

于 2012-10-16T14:37:07.423 に答える
1

undefined使用される変数が初期化されていないことを意味します。これは、コードが 2 番目のループを通過しなかった場合$toughpriceに当てはまり ます。オンザフライで作成された(この場合は ) は作成されるべきではないため、これはページにレンダリングされた html から明らかです。$standardpricewhilehtmltd

コードから、これは次の場合に当てはまります。

  1. 最初のクエリが結果を返さないか、
  2. 最初のクエリは何らかの結果を返しましたが、2 番目のクエリは結果を返しませんでした。

そのため、これらのクエリをデバッグして、何が問題なのかを確認してください。

PS:while内部が外部からのデータを必要としない 2 つのネストされたループを使用している理由がわかりません。互いに独立している可能性のある 2 つの静的クエリがあります。何らかの理由で、最初のループの各項目が 2 番目のループの結果を反復処理する必要がある場合は、データベース クエリを実行した後に実行します。これで、2 番目のクエリで同じ結果が N 回得られます (N は最初のクエリの行です)。

最後に、何らかの理由で結果が得られないことが予想される場合は、エラーを取り除くためにループのに変数を初期化しますwhileundefined

例えば:

<?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; ?>" /> 
于 2012-10-16T14:49:13.880 に答える
1

値が定義されていないタグ以外の出力はありましたか? そうでない場合、クエリの 1 つが結果を返さず、while ステートメントの外部で変数を定義していません。

Java では、ここで行っていることは堅牢ではないため、このアプローチでは構文エラーが発生することさえあります。最後の while ステートメントが実行された後、変数には何が期待されますか? クエリを介して受け取った可能性のあるエントリ セットの最後のエントリのみですか? 複数の行が予期されない場合は、WHILE は必要なく、最初の結果をフェッチするだけです。「LIMIT 1」のMSSQLステートメントはわかりませんが、これも役立ちます。

于 2012-10-16T14:35:53.267 に答える
1

あなたのコードはまったく問題ないように見えますが、論理的な間違いを犯しました..に割り当てるデータがなくなるとwhileループが終了$toughresultします. したがって、ループが終了すると、$toughresult使用可能なデータは含まれません。

成功した場合は MS SQL 結果リソースを返し、行が返されなかった場合は TRUE、エラーが発生した場合は FALSE を返します。

したがって、これvar_dump($toughresult);を確認するだけです。データを使用する場合は、ループを中断するか、上書きされない別の変数にデータをコピーしてください。

今後このような問題を回避するには、可能な戻り値についてマニュアルを常に確認し、コードがそれを正しく処理することを確認してください。エッジケース。

于 2012-10-16T14:36:07.737 に答える