- ベストアンサー
ループしてしまいます
$colの結果は5件です。 次のfor文を流すと、cnt=1の場合の $SyaNo . $cnt = $col2['SyaName']; が print $SyaNo . $cnt によって表示されますが、 cnt=1のみの結果がループします。 cnt=2、cnt=3、cnt=4の結果はどうしたら表示されるでしょうか? どうしてループしてしまうのでしょうか? --------- while($col = mysql_fetch_array($result1)){ for($cnt=1; $cnt<=4; $cnt++){ print $cnt . " "; print $col[SyaNo.$cnt] . " "; if ($col[SyaNo.$cnt] != ""){ $sql = "select SyaName from Syain where SyaNo = " . $col[SyaNo.$cnt]; $result2 = mysql_query($sql,$link); $col2 = mysql_fetch_array($result2); $SyaNo . $cnt = $col2['SyaName']; print $SyaNo . $cnt; } } ------------- $body .= "<td>" . $SyaNo1 . "</td>\n"; $body .= "<td>" . $SyaNo2 . "</td>\n"; $body .= "<td>" . $SyaNo3 . "</td>\n"; $body .= "<td>" . $SyaNo4 . "</td>\n";
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
${'SyaNo'.$cnt} でしたね。すみません。 中かっこ内が文字列としたときに使いたい変数名になってる必要があると言うことです。
その他の回答 (3)
- a987654
- ベストアンサー率26% (112/415)
>どうしてループしてしまうのでしょうか? ループしているのではなく、5件実行したいwhileが 一回だけで抜け出してしまっているのではないでしょうか? (ループしていたらリセットする以外停止しないでしょうから) 本題に戻ります。 2,3,4,5が実行されないのは while($col = mysql_fetch_array($result1))文の mysql_fetch_array($result1)が以降の文の実行1回で変更 されている以外あり得ないと思います。 中身が判らないので直し方を書けないのですが、こういう時は print文等で怪しげなものを1つずつ確認してゆくのが デバッグの早道(大昔さんざんやりました)と思います。 又 while($col = mysql_fetch_array($result1)){ でも動くとは思いますが、本来はNO1のかたの言われている while($col == mysql_fetch_array($result1)){ が正解だと思います。
補足
コメントありがとうございます。 月曜日に見てみます。
- hogehoge78
- ベストアンサー率80% (433/539)
質問者さんがやりたいのは、可変変数を使ってその変数値に値を代入したいということではないですか? <?php $SyaNo . $cnt = $col2['SyaName']; print $SyaNo . $cnt; ?> ここの部分、 これを <?php ${$SyaNo.$cnt} = $col2['SyaName']; print ${$SyaNo.$cnt}; ?> としてみてください。
お礼
正しく出力されました! ありがとうございました。 ただし、${$SyaNo.$cnt} が $SyaNo1であり、 「浅野優斗」という文字の場合、 $body .= "<td>" . $SyaNo1 . "</td>\n"; $body .= "<td>" . $SyaNo2 . "</td>\n"; $body .= "<td>" . $SyaNo3 . "</td>\n"; $body .= "<td>" . $SyaNo4 . "</td>\n"; の、$SyaNo1では、「浅野優斗」と表示されるはずなのですが、 表示されません。 上でセットした値が正しく保持されていないのでしょうか。 それとも、「$SyaNo1」という表記が正しくないのでしょうか? もし、原因がお分かりでしたら、教えていただけませんでしょうか。 よろしくお願いします。
補足
コメントありがとうございます。 月曜日に、検証してみますね。
- めとろいと(@naktak)
- ベストアンサー率36% (785/2139)
while($col = mysql_fetch_array($result1)){ が while($col == mysql_fetch_array($result1)){ でないといけないのでは?
補足
コメントありがとうございます。 他のプログラムは、 while($col = mysql_fetch_array($result1)){ で通っているのです。。。
お礼
ありがとうございました。 解決しました。 こちらこそ、わけもわからず使い、質問してしまい、 すみませんでした。 またよろしくお願いします!