- ベストアンサー
PHPでの条件式
PHPでの条件式 <環境> PHP:4.3.8 MySQL:4.0.16 MySQLからデータを読み出して、ある条件によって 表示されるものを変えるという作業をしているのですが 思ったように表示出来ません。 下記のコードで”else”の場合の時に「そのIDのデータは登録されていません。」 という文字列を表示させたいのですが、何も表示されずに 終わってしまいます。 希望の動作は、フォームでDBに登録されていないID番号(log_id)を入力した時に 「そのIDのデータは登録されていません。」という文字列を表示させたいのですが どのようにすれば解決に導けるのでしょうか。 どなたかご教授お願いいたします。 ■>>>test.php<<<■ <html> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <TITLE>DBの画像表示テスト</TITLE> </HEAD> <body> <FORM name="display" method="POST" action="test.php"> 画像ファイルのIDを入力してください<BR> <INPUT type="text" name="log_id"><BR> <INPUT type="submit" name="submit" value="送 信"> <INPUT type="reset" name="reset" value="リセット"> </FORM> <br> <?php include('./inc_php/db.php'); //フォームで入力された「log_id」番号にマッチするデータを呼び出す $query = "select * from image where log_id = '".$log_id."'"; $result = mysql_query($query); //SQLを実行する while( $row = mysql_fetch_array($result) ) { //フォーマットは" $variable = $row["NameOfMysqlCoulm"]" //これらを変更して、mysqlテーブルコラムを合わせてください。 $log_id = $row["log_id"]; //No $F1 = $row["F1"]; //F1の答え $F2 = $row["F2"]; //F2の答え $F3 = $row["F3"]; //F3の答え $F4oa = $row["F4oa"]; //F4oaの答え $img_data = $row["img_data"]; //データが格納されているアドレス情報 $end_flag = $row["end_flag"]; $day_date_end = $row["day_date_end"]; $log_id = addslashes($log_id); //入力文字のエスケープ if( $img_data != NULL ){ //"$img_data"(アドレス情報)がNULLで無いとき ?> <table border="1px"> <tr> <td width="100px">log_id(No情報)</td> <td width="300px"><b><?php echo $log_id ?></b></td> <td width="350px" rowspan="6"> <a href="<?php echo $img_data ?>" target="_blank"><img src="<?php echo $img_data ?>" width="300"></a> </td> </tr> </table> <?php }elseif( $img_data == NULL ){ //"$img_data"(アドレス情報)がNULLのとき ?> <table border="1px"> <tr> <td width="100px">log_id(No情報)</td> <td width="300px"><b><?php echo $log_id ?></b></td> <td width="350px" rowspan="6"> <b>このIDの画像データは登録されていません。</b> </td> </tr> </table> <?php }else{ ?> <p><b>そのIDのデータは登録されていません。</b></p> <?php } } mysql_close($db); ?> <br> </body> </html>
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
while( $row = mysql_fetch_array($result) ) { $img_data = $row["img_data"]; if( $img_data != NULL ){ echo $img_data; }elseif( $img_data == NULL ){ echo "このIDの画像データは登録されていません。"; }else{ echo "そのIDのデータは登録されていません。"; } } 上記のソースを見やすくしたものです。 >希望の動作は、フォームでDBに登録されていないID番号(log_id)を入力した時に >「そのIDのデータは登録されていません。」という文字列を表示させたいのですが >どのようにすれば解決に導けるのでしょうか。 登録されていないIDはDBに入っていないのですね? だとすれば、mysql_fetch_arrayをかけてもレコードが無いので そもそもwhileの中に入っていきません。 なのでechoの処理がなされず何も表示されないのでしょう。 クエリで返ってくるレコードが「絶対に単一」であればwhileを書く必要すらありません。 $row = mysql_fetch_array($result); if( isset($row["img_data"] ) and $row["img_data"] != "" ) { echo $row["img_data"]; } elseif( $row["img_data"] == "" ) { echo "このIDの画像データは登録されていません。"; } else { echo "そのIDのデータは登録されていません。"; } // 蛇足ですが、$log_idのインジェクション対策は大丈夫ですか。 // まさかregister_globalが・・・
その他の回答 (1)
- purakoi
- ベストアンサー率33% (1/3)
register_globalsは基本offにしますね。 詳細は http://d.hatena.ne.jp/keyword/register_globals 掻い摘んで言いますと。 たとえばhttp://www.example.com/example.php?a=1&b=2 とアクセスしたとすると register_globals=on の設定では、PHPの変数$aが1,$bが2に初期化された状態になってしまいます。 こうすることにより、外部から内部の変数にアクセスできてしまう等のセキュリティの問題が生じます。
お礼
なるほど・・・勉強になります! ただ自分が管理しているサーバではないので設定を 変えるのは難しそうです。 各ページごとに各変数の初期化を記入したものを includeさせてるのですが、それで代替になるのやら・・・。
お礼
わかりやすいご回答ありがとうございます。 PHP駆け出しの私には大変勉強になります。 >だとすれば、mysql_fetch_arrayをかけてもレコードが無いので そもそもwhileの中に入っていきません。 >なのでechoの処理がなされず何も表示されないのでしょう。 なるほど、参照されるものが無いと処理がされないのですね。 ちなみにwhile無しソースに書き換えてくださった方で試すと、ページにアクセスしたはじめから 「echo "このIDの画像データは登録されていません。";」 の部分の処理がなされているのですが、これもソースを改編してやる必要があるという事ですね。 ちなみに色々と試しましたが、まだ「そのIDのデータは登録されていません。」を表示してあげる事が出来ません・・・。 もう少し勉強したいと思います。 インジェクション対策ですが、今のところは危ないと思われる文字を全角に変換するという処理を入れています。 register_globalはOnになっていますが・・・Offの方が安全には良いのでしょうか。