• ベストアンサー

ループしてしまいます

$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";

  • PHP
  • 回答数4
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

${'SyaNo'.$cnt} でしたね。すみません。 中かっこ内が文字列としたときに使いたい変数名になってる必要があると言うことです。

mkhkck
質問者

お礼

ありがとうございました。 解決しました。 こちらこそ、わけもわからず使い、質問してしまい、 すみませんでした。 またよろしくお願いします!

その他の回答 (3)

  • a987654
  • ベストアンサー率26% (112/415)
回答No.3

>どうしてループしてしまうのでしょうか? ループしているのではなく、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)){ が正解だと思います。

mkhkck
質問者

補足

コメントありがとうございます。 月曜日に見てみます。

回答No.2

質問者さんがやりたいのは、可変変数を使ってその変数値に値を代入したいということではないですか? <?php $SyaNo . $cnt = $col2['SyaName']; print $SyaNo . $cnt; ?> ここの部分、 これを <?php ${$SyaNo.$cnt} = $col2['SyaName']; print ${$SyaNo.$cnt}; ?> としてみてください。

mkhkck
質問者

お礼

正しく出力されました! ありがとうございました。 ただし、${$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」という表記が正しくないのでしょうか? もし、原因がお分かりでしたら、教えていただけませんでしょうか。 よろしくお願いします。

mkhkck
質問者

補足

コメントありがとうございます。 月曜日に、検証してみますね。

回答No.1

while($col = mysql_fetch_array($result1)){ が while($col == mysql_fetch_array($result1)){ でないといけないのでは?

mkhkck
質問者

補足

コメントありがとうございます。 他のプログラムは、 while($col = mysql_fetch_array($result1)){ で通っているのです。。。

関連するQ&A

  • PHPのfor文

    送り側で次の情報を送ると、 select SyaName from Syain where SyaNo = 2select SyaName from Syain where SyaNo = Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /result.php on line 33 という文がループします。 SyaNo=1 から SyaNo=10 の計算をさせたいのですが、 なぜこれではだめなのでしょうか。。。 どう表記したらよろしいのでしょうか? 送り側>----------------------------<input type="text" name="WorDateYear" size="8" maxlength="4">年 <input type="text" name="WorDateMonth" size="5" maxlength="2">月<br> <input type="submit" name="create" value="作成"> >------------------------------- 受け側>---------------------------- $sql = "select WorDate,ComName,GenName,StrTime,EndTime,SyaNo1,SyaNo2,SyaNo3,SyaNo4,SyaNo5,SyaNo6,SyaNo7,SyaNo8,SyaNo9,SyaNo10 from Denpyo where WorDate like '%" . $_GET['WorDateYear'] . "-%" . $_GET['WorDateMonth'] . "%'"; $result1 = mysql_query($sql,$link); <? $body .= "<table> while($col = mysql_fetch_array($result1)){ for($cnt=1; $cnt<=10; $cnt++){ $sql = "select SyaName from Syain where SyaNo = " . $col[SyaNo.$cnt]; print $sql; $result2 = mysql_query($sql,$link); $col2 = mysql_fetch_array($result2); $SyaNo . $cnt = $col2['SyaName']; } $body .= "<tr>\n"; $body .= "<td rowspan='2'>" . date("j",$col['WorDate']) . "日</td>\n"; $body .= "<td rowspan='2'>" . date("w",$col['WorDate']) . "曜日</td>\n"; $body .= "<td rowspan='2'>" . $col['ComName'] . "</td>\n"; $body .= "<td rowspan='2'>" . $col['GenName'] . "</td>\n"; $body .= "<td>" . $col['StrTime'] . "</td>\n"; $body .= "<td>" . $col['EndTime'] . "</td>\n"; $body .= "<td>" . $SyaNo1 . "</td>\n"; $body .= "<td>" . $SyaNo2 . "</td>\n"; $body .= "<td>" . $SyaNo3 . "</td>\n"; $body .= "<td>" . $SyaNo4 . "</td>\n"; $body .= "</tr>\n"; $body .= "<tr>\n"; if ($col['StrTime'] < 074500){ $Str = 074500 - $col['StrTime']; } $body .= "<td>" . $Str . "</td>\n"; if ($col['EndTime'] > 170000){ $EndT = $col['EndTime'] - 170000; } $body .= "<td>" . $EndT . "</td>\n"; $body .= "<td>" . $SyaNo5 . "</td>\n"; $body .= "<td>" . $SyaNo6 . "</td>\n"; $body .= "<td>" . $SyaNo7 . "</td>\n"; $body .= "<td>" . $SyaNo8 . "</td>\n"; $body .= "</tr>\n"; } $body .= "</table>\n"; print $body; ?> >-------------------------------

    • ベストアンサー
    • PHP
  • PHP内でのループ計算についてです

    大変初歩的なことなので、お恥ずかしいのですが、 ぜひとも皆さんのお力をお借りしたくて投稿いたします。 MySQLにあるテーブルAとテーブルBの同じ値の時、 テーブルBの値を返してほしいのですが、 PHPを利用して作成したプログラムですと 1回目のループ以降、 テーブルBが値を返さなくなります。 どこが間違っているのか・・・ぜひ教えてください! for($recnuma = 0; $recnuma < $recmaxa; $recnuma++){ $cola = mysql_fetch_array($rsta); $body .="<tr>\n"; $body .="<td>" .$cola["aaa"]. "</td>\n"; for($recnumb = 0; $recnumb < $recmaxb; $recnumb++){ $colb = mysql_fetch_array($rstb); if($colb["aaa"]==$cola["aaa"]){ $body .="<td>" .$colb["aaa"]. "</td>\n"; $body .="</tr>\n"; } } } よろしくお願いいたします

    • ベストアンサー
    • PHP
  • forで書き出した値を条件付で合計したい

    PHPファイルで、以下のような成績表が出力されます。 ------------ 国語  算数 ------------ 89   NULL 90   78 NULL  45 60   99   :略 ------------- 150  177 ←こういう風に合計行を付けたしたいのですが、 事情があり、国語も算数も受験した者だけを合計したいのです。 for文とかmysql_fetch_arraytとか、使ってる関係で、 どういうにすればよいのかさっぱり見当つきません。 記述につき、アドバイスいただけますと幸いです。 <?php $con = mysql_connect(SERV, USR, PASS); $selectdb = mysql_select_db(MYDV, $con); $sql = "SELECT KOKUGO,SANSU FROM MYTABLE"; $rst = mysql_query($sql, $con); $recmax = mysql_num_rows($rst); $body .= "<table border='1'>\n"; for ($recnum = 0; $recnum < $recmax; $recnum++) { $col = mysql_fetch_array($rst); $body .= "<tr>\n"; $body .= "<td>" . $col["KOKUGO"] . "</td>\n"; $body .= "<td>" . $col["SANSU"] . "</td>\n"; $body .= "</tr>\n"; } $body .= "</table><br>\n"; mysql_free_result($rst); $con = mysql_close($con); ?> <html><body> <?= $body ?> </body></html> ■ 環境 PHP 5.0.4 Win MySQL mysql 4.0.14b Win ■知識レベル: HTMLタグ打ち、初歩的なSQLを理解できる程度、PHP他プログラミング知識ほとんどなし

    • ベストアンサー
    • PHP
  • SQLのどこがおかしいでしょうか?

    PHP4、MySQLです。 for($i=1;$i<34;$i++){ $sql = "select count(group) as cnt".$i." "; $sql.= "from stock "; $sql.= "where group=".$i." "; //print "sql= ".$sql."<br>"; $result = mysql_query($sql,$db) or die("失敗しました".mysql_error ()); $Row = mysql_fetch_array($result, MYSQL_ASSOC); $cnt.$i = $Row['cnt".$i."']; } としています。どこがおかしいでしょうか? 教えてください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 縦に長い<table>でなく横に長い<table>を組むためのfor文の書き方

    文末のコードを実行すると、下記のような結果が得られますが、 番号 名前 性別   1 阿藤 男   2 江藤 男   3 加藤 女   4 木藤 女   5 工藤 男 行列を入れ替えた表をつくりにはどういうロジックになりますか。 番号   1   2   3   4   5 名前  阿藤  江藤  加藤  木藤  工藤 性別   男   男   女   女   女 おそらく、for文を改造するのでしょうが・・・ よろしくお願い致します。 <?php $con = mysql_connect(SERVER, USER, PASS); $selectdb = mysql_select_db(DB, $con); $sql = "select * from mytable"; $rst = mysql_query($sql, $con); $recmax = mysql_num_rows($rst); $body = "<table border='1'><tr><th>番号</th><th>名前</th><th>年齢</th><tr>\n"; for ($i = 0; $i < $recmax; $i++) { $col = mysql_fetch_array($rst); $body .= "<tr>\n"; $body .= "<td>" . ($i + 1) . "</td>\n"; $body .= "<td>" . $col["name"] . "</td>\n"; $body .= "<td>" . $col["age"] . "</td>\n"; $body .= "</tr>\n"; } $body .= "</table>\n"; mysql_free_result($rst); $con = mysql_close($con); ?> <HTML><BODY> <?= $body ?> </BODY></HTML>

    • ベストアンサー
    • PHP
  • 入門書のPHPサンプル内で、MySQL関数を使いたい

    環境:PHP5.0.3+MySQL4.0.14です。PHPどころか、プログラムも素人です。 検索結果をHTML表に一覧化する仕組みを作っているのですが WHERE条件に合致した数値データを平均化したり、 WHERE条件合致した日付データの書式を【MySQL関数によって】加工したいです。 それぞれ、mysql.exe(DOS窓上)での書き方はわかったものの (SELECT AVG(HOGE1) WHERE (HOGE <= 1) のように)、 これをPHPに組み込んだ際ににどう使えばわからないです。 今回使っているPHP入門書のサンプルは以下の通りです。ここで mysql_fetch_arrayに格納されたテーブル(カラム)を取り出しているらしい ことはわかりますが、以下のサンプルで加工したい対象である $col["DATE1"]、$col["HOGE1"]を $col["date_format(DATE1, '%y/%m/%d')"] や $col["AVG(HOGE1)"]などと してもだめみたいです。 以下の例で、これらを取り出すにはどのように記述したらいいでしょうか。 よろしくお願い致します。 <?php require_once("dbini.php"); $con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD); $selectdb = mysql_select_db($DBNAME, $con); $sql = "select * from mytable"; $rst = mysql_query($sql, $con); $recmax = mysql_num_rows($rst); $body = "結果: $recmax 件"; $body .= "<table>"; for ($recnum = 0; $recnum < $recmax; $recnum++) { $col = mysql_fetch_array($rst); $body .= "<td>" . $col["DATE1"] . "</td>"; $body .= "<td>" . $col["HOGE1"] . "</td>"; $body .= "</tr>"; } $body .= "</table>\n"; mysql_free_result($rst); $con = mysql_close($con); ?> <html> <head></head> <body> <?= $body ?> </body> </html>

    • ベストアンサー
    • PHP
  • 検索結果の表示をもっと早くしたい

    次のように、200人の「MYID」諸氏に対応する登録年月(6桁)を リストアップしたところ、SQLを人数分解釈するためか、 表示までに異常に時間がかかってしまうのですが、 改善案をご教示いただけますと幸いです。 リストアップのイメージ (1001氏) 200409 200410 200411 (1002氏) 200501 200402   :(略) <?php $con = mysql_connect(SERV, USR, PASS); $selectdb = mysql_select_db(MYDV, $con); $numfrom = "1001"; $numto = "1200"; for ($i = $numfrom ; $i <= $numto; $i++) { $sql = "SELECT * FROM MYTABLE"; $sql .= "WHERE MYID = " . $i; $rst = mysql_query($sql, $con); $recmax = mysql_num_rows($rst); $body .= "<table border='1'>\n"; for ($recnum = 0; $recnum < $recmax; $recnum++) { $col = mysql_fetch_array($rst); $body .= "<tr>\n"; $body .= "<td>" . $col["YYMM"] . "</td>\n"; $body .= "</tr>\n"; } $body .= "</table><br>\n"; } mysql_free_result($rst); $con = mysql_close($con); ?> <html><body> <?= $body ?> </body></html>

    • ベストアンサー
    • PHP
  • mysql_num_rowsなどのWarningの原因がわからない

    以下のプログラム、何が誤っているのでしょうか。 違う箇所で使ったPHPの使いまわし(そちらは問題なく動いている) なのですが、サーバー上で実行しても Warning: mysql_num_rows(): supplied argument is not a valid MySQL result ... Warning: mysql_free_result(): (以下同上) となり、どうしても原因が究明できません。。 以下、省略してますが、本質は変わりません。SQL文($sql)を phpMyAdminで通すとなんら問題なく問い合わせ結果が得られます。 <?php  $con = mysql_connect(localhost, username, pss);  $selectdb = mysql_select_db(mydb, $con);  $sql = "SELECT Kaisya FROM MYTABLE";  $rst = mysql_query($sql, $con);  $recmax = mysql_num_rows($rst);//■←この行がWarning■  $body = "<table border='1'>";  $body .= "<tr>";  $body .= "<td style=\"text-align: center;\">会社名</td>";  for ($recnum = 0; $recnum < $recmax; $recnum++) {   $col = mysql_fetch_array($rst);   $body .= "<tr>";   $body .= "<td>" . $col['Kaisya'] . "</td>";   $body .= "</tr>";  }  $body .= "</table>";  mysql_free_result($rst);//■←この行がWarning■  $con = mysql_close($con); ?> <html><head></head><body> <?= $body ?> </body></html>

    • ベストアンサー
    • PHP
  • select文

    こんばんは。PHPでデータベースからレコードとフィールドを表として取り出そうとしてますが、うまく行きません。 MySQLへの接続はうまくいってると思うので、while文が間違ってるのでしょうか?PHPのバージョンはPHP Version 4.4.2です。 よろしくお願いしますm(__)m <?php require_once("dbini.php"); $con = mysql_connect($server, $user, $pass); $select = mysql_select_db($dbname, $con); $sql = "select * from book"; $rst = mysql_query($sql, $con); $body = "<table border='0' cellpadding='5' cellspacing='5' width='500'><tr><td>\n"; while($col = mysql_fetch_array($rst)) { $body .= "<b><font size='+2'>".$col["title"]."</font></b>" $body .= "</td></tr>"; $body .= "<tr><td colspan='2'>".$col["article"]."</td></tr></table>"; } mysql_free_result($rst); $con = mysql_close($con); ?> <html> <body> <?= $body ?> </body> </html>

    • ベストアンサー
    • PHP
  • PHP MySQL を使ってリストボックスを作りたい

    PHPで、MySQLよりSelectしたデータをリストボックスにしたくて、 コーディングしていますが、本を読みながら見よう見まねでつくってますが、 うまくいきません。 現象としては、IEで呼び出すと、一番上にrequireしたfanctionが そのまま記述されて出てきます。 そのほかは、その下にうまく表示されています。 lib.phpをinput1.phpで呼び出して使っています。 lib.php >------------------------------ function make_SyaName (){ $sql = "select * from Syain"; print $sql; $result = mysql_query( $sql ) ; while ( $syain = mysql_fetch_array ( $result ) ) { print "<option value=" . ${syain['SyaNo']} . ">" . ${syain['SyaName']} . "</option>"\n; } } >------------------------------ input1.php >------------------------------ 省略・・・ <select name="TanNo"><option value=>担当者<? make_SyaName () ?> ・・・省略 >------------------------------ 初歩的な質問で恐縮ですが、よろしくお願いいたします。

    • ベストアンサー
    • PHP