• ベストアンサー

MySQLに保存した画像を表示したい

<環境> PHP:4.3.8 MySQL:4.0.16 はじめまして、PHPを始めて駆け出しの者です。 MySQLに保存した画像を表示したいのですが なかなかうまくいきません。 なにかきっかけとなればと思い、書き込みをします。 どうぞご教授ください。 MySQLに画像を保存する事もやっとの事で出来たのですが、 ちゃんと保存されているか確認するため画像を表示してみよう と試みたのですが、またそこで壁にぶち当たってしまいました。 ネットの各所で検索し調べ、カタチまでは出来たのですが 肝心の画像が「×(バツ印)」になっていて表示出来ません。 +++img_upload.php+++ <?php if ($_POST["submit"]!=""){ if ($_POST["file_name"]=="none"){ print("ファイル名が入力されていません。<BR>\n"); exit; } $file_name = $_POST["file_name"]; if ($_FILES["upfile"]["tmp_name"]=="none"){ print("ファイルのアップロードができませんでした。<BR>\n"); exit; } $fp = fopen($_FILES["upfile"]["tmp_name"], "rb"); if(!$fp){ print("アップロードしたファイルを開けませんでした"); exit; } $imgdat = fread($fp, filesize($_FILES["upfile"]["tmp_name"])); fclose($fp); print("ファイルサイズ:{$_FILES["upfile"]["size"]}<BR>\n"); $len = strlen($imgdat); print("データ長 = $len<BR>"); $imgdat = addslashes($imgdat); $con = mysql_connect("***.***.***.***", "*****", "*****"); if (!$con){ print("MySQLへの接続に失敗しました"); exit; } if (!mysql_select_db("*****")){ print("データベースへの接続に失敗しました"); exit; } $encoded_file = base64_encode($imgdat); $sql = "INSERT INTO image (img_data) values ('$encoded_file')"; $result = mysql_query($sql); if (!$result){ print("SQLの実行に失敗しました<BR>"); print(mysql_errno().": ".mysql_error()."<BR>"); exit; } mysql_close($con); } ?> +++img_display.php+++ <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <TITLE>データベースへの画像の表示</TITLE> </HEAD> <BODY> <P>ファイルの表示</P> <FORM method="POST" enctype="multipart/form-data" action="img_display.php"> <INPUT type="hidden" name="MAX_FILE_SIZE" value="1048576"> 画像のファイルIDを入力してください<BR> <INPUT type="text" name="log_id"><BR> <INPUT type="submit" name="submit" value="送信"> <INPUT type="reset" name="reset" value="リセット"> </FORM> <?php if ($_POST["submit"]!=""){ $log_id = $_POST['log_id']; echo "<img src=\"get_image.php?log_id=" . $log_id . "\">"; } ?> </BODY> </HTML> +++get_image.php+++ <?php if ($_GET["log_id"]!=""){ $log_id = $_GET['log_id']; $con = mysql_connect("***.***.***.***", "*****", "*****"); if (!$con){ print("MySQLへの接続に失敗しました"); exit; } if (!mysql_select_db("******")){ print("データベースへの接続に失敗しました"); exit; } $sql = "SELECT img_data FROM image WHERE log_id='".$log_id."'"; $result = mysql_query($sql); if (!$result){ print("SQLの実行に失敗しました<BR>"); print(mysql_errno().": ".mysql_error()."<BR>"); exit; } $row = mysql_fetch_array($result); mysql_close($con); $decoded_file = base64_decode($row[1]); mb_http_output("pass"); header("Content-type: image/jpeg"); header("Content-Disposition: inline; filename=image.jpg"); echo $row[0]; } ?> DBのほうのテーブルには、「log_id」と「img_data」があります。 すみませんが、よろしくお願いします。

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

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

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

単純に格納できるサイズ以上のデータを保存したから オーバーフローして画像が表示されなかったのでは? バイナリを格納するフィールドの形式は何にしていますか? 扱えるサイズ以上のデータは格納できませんのでご注意下さい。 ・img_upload.php  サイズチェックを入れましょう ・get_image.php  出力するのはイメージなので、 *mb_http_output("pass"); header("Content-type: image/jpeg"); *header("Content-Disposition: inline; filename=image.jpg"); *の付いた行は要らないです。

animack
質問者

お礼

書き込みありがとうございます。 バイナリを格納するフィールドのデータ型は「MIDIUMBLOB」 にしてあります。 テストに使用していた画像は50KBほどの画像でしたので、 このデータ型で問題は無いと思ったのですが・・・。 急遽、DBを使用して画像アップロードする方法ではなく ディレクトリを作成しそこに画像を溜め込む方法に 方向転換する事になってしまいましたので、 この質問は締め切らせて頂きます。 DBでの方法は個人的にも興味があるので、後々 やっていこうかと思います。 ご回答わざわざありがとうございました。

その他の回答 (2)

  • wp_
  • ベストアンサー率54% (132/242)
回答No.3

uploadされる元画像、upされDBに格納されたバイナリ、get_image.phpでbase64_decodeされたバイナリをそれぞれ取得し、diffをとりましょう。 バイナリに変化があればそこのソースの見直しを、 正常なバイナリなのに表示されないと言うのであれば出力部分の見直しをしましょう。 サイズオーバーか、エンコード失敗か、アップロードの中断か。 原因はなんにせよ、処理の切り分け・不正処理の洗い出しを行わねばなりません。 input/outputされたデータを検証した上でソースレビューするほうが良いです。 >TEXT バイナリが崩れますのでMIDIUMBLOBのままでよいです。 // No.2の方の言うとおりデータサイズ不足な気がしますが^^;

animack
質問者

お礼

書き込みありがとうございます。 たしかに原因の洗い出しをしないとなかなか解決しそうにありません^^; 急遽、DBを使用して画像アップロードする方法ではなく ディレクトリを作成しそこに画像を溜め込む方法に 方向転換する事になってしまいましたので、 この質問は締め切らせて頂きます。 (こちらの方法でも質問させて頂くかもしれません・・・) DBでの方法は個人的にも興味があるので、後々 やっていこうかと思います。 ご回答ありがとうございました!

  • iyomante
  • ベストアンサー率60% (14/23)
回答No.1

とりあえずパッと見なんですが、 $decoded_file = base64_decode($row[1]); は $row[1]ではなくて $row[0]では。 あと header("Content-Disposition: inline; filename=image.jpg"); image.jpgがなにかわかりませんがこれは要らないのでは

animack
質問者

お礼

>>iyomanteさん 書き込みありがとうございます。 「$decode_file・・・」の箇所は凡ミスでした・・・。 色々直しているうちに修正し忘れていました。 headerの箇所も「filename=image.jpg」の箇所を削ってみたり しましたが、結果は変わらずです。 ちなみにbase64_encodeしてDBに格納しているわけですが、 格納先のデータ型はMIDIUMBLOBとしているのですが TEXTの方が好ましいのでしょうか? 当方が勉強不足な点もありますので、もっと色々と 調べてみたいと思います。 ご回答ありがとうございました。

関連するQ&A

  • PHPとMySQLを使い、画像データベースを構築しています。

    PHPとMySQLを使い、画像データベースを構築しています。 以下までできたのですが、SQL syntaxエラーが発生してしまい、UP出来ませんでした。 画像を指定しない場合は、成功します。 <form method="post" action="addinfo.php" enctype="multipart/form-data"> Place Name(*)<br> <input type="text" size="50" maxlength="100" name="place_name"><br> Address(*)<br> <input type="text" size="50" maxlength="100" name="address"><br> Pictures<br> <input type="file" size="50" name="picture1"><br> <input type="file" size="50" name="picture2"><br> <input type="file" size="50" name="picture3"><br> <input type="reset" value="Reset" name ="reset"> <input type="submit" value="Submit" name="submit"> </form> <?php if ($_POST["submit"] != "") { // Connecting DB require 'lib.php'; //img1 if ($_FILES["picture1"]["tmp_name"] != NULL) { $fp = fopen($_FILES["picture1"]["tmp_name"], "rb"); if (!$fp) { print("Cannot open the uploaded file <BR>\n"); exit; } $img1 = fread($fp, filesize($_FILES["picture1"]["tmp_name"])); fclose($fp); } ----------------------------------------------------------- img2, img3についての処理もimg1と同じなので、文字数の関係で省略します ----------------------------------------------------------- // Insert Query $sql = "INSERT INTO places (place_name, address, `picture1`, `picture2`, `picture3`) VALUES('{$_POST["place_name"]}','{$_POST["address"]}', '{$img1}', '{$img2}', '{$img3}') "; $result = mysql_query($sql); if (!$result) { print("QUERRY ERROR<BR>\n"); print(mysql_errno() . ": " . mysql_error() . "<BR>\n"); exit; } echo "UPLOAD SUCCESSFULL "; ご教授お願いいたします

    • ベストアンサー
    • MySQL
  • php,mysqlにて画像パス保存/表示につい

    mysqlに画像パスを格納しておき、phpでブラウザに表示するという部分について質問があります。 以前画像を扱った際は、DBにそのまま画像データを格納していたのですが、一般的ではないということで画像パス使う方針にしました。 画像パスはthumbnailというカラムにvarcharで画像パスを格納しました。 今回ご相談させていただいた件では、主に画像の表示の部分にアドバイスをいただければと考えています。 以前画像をそのまま保存し表示するときは、get_image.phpのようなファイルを噛ませ、それをブラウザに読み込ませることで表示していたのですが、画像パスでも同じようなやり方でいいのでしょうか? ネットで調べてみたのですが、何となくしっくりこないというか、私の誤解もあるかもしれないのですがすっきりせず迷走中です。 どうか、アドバイスをご教示いただけないでしょうか。 ※以下は、試しにget_image.php噛ませてみた際のコードです。 <?php $id = $_GET['id']; //DB接続 ~省略~ $sql = "SELECT image FROM テーブル名 WHERE id='$id'"; $result = mysql_query($sql); if (!$result) { echo ("SQLの実行に失敗しました<BR>"); echo(mysql_errno().": ".mysql_error()); exit; } $row = mysql_fetch_array($result); mysql_close($con); $img_path = '$row['image']' $img = file_get_contents($img_path); header('Content-type: image/jpg'); echo $img; ?>

    • ベストアンサー
    • PHP
  • フォームからMYSQLへの接続

    フォームからの入力で登録ボタンを押して MYSQLへデータの書き込み、そして削除ボタンを押して データを削除するという勉強をしています。 削除の場合は、番号か名前、電話番号のいずれかを入力して 削除ボタンを押せば該当するデータが削除されるようにしたいのですが 番号指定以外の名前指定や電話番号指定での削除ができません。 「DELETE FROM address where no=$no or name='$name' or tel='$tel'」の 書き方に問題があるようですが どのようにしたらよいのでしょうか? ---------------------------------------------- <html> <body> <form action="" method="post"> 番号:<br><input type="text" name="no"><br> 氏名:<br><input type="text" name="name"><br> 電話番号:<br><input type="text" name="tel"><br><br> <input type="submit" value="登録" name="submit"> <input type="submit" value="削除" name="submit"> </form> <?php error_reporting(1); $con = mysql_connect("127.0.0.1", "root", ""); if(!$con){ exit("データベースに接続できませんでした。"); } $result = mysql_select_db("test", $con); if(!$result){ exit("データベースを選択できませんでした。"); } $no = $_POST["no"]; $name = $_POST["name"]; $tel = $_POST["tel"]; $submit = $_POST["submit"]; if($no != null){ if($submit == "登録"){ $result = mysql_query("INSERT INTO address(no, name, tel) VALUES ('$no', '$name', '$tel')", $con); if($result){ echo "<p>登録が完了しました。<br>"; }else{ echo "<p>登録失敗</p>"; } }elseif($submit == "削除"){ $result = mysql_query("DELETE FROM address where no=$no or name='$name' or tel='$tel'", $con); if($result){ echo "<p>削除が完了しました。<br>"; }else{ echo "<p>削除失敗</p>"; } } } ?> </body> </html> ---------------------------------------------- あと「header("Location: {$_SERVER['PHP_SELF']}");」を使って 2重投稿を回避したいのですが 書く場所により「登録が完了しました。」「削除が完了しました。」の メッセージが表示されなくなってしまいます。 どこに記入したらよいのでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • BLOBでの画像表示について

    BLOBでの画像表示について質問させてください。 元々ヘテムルのサーバーを利用していたのをここ最近さくらのVPSに移行しました。 するとヘテムルではBlob型の画像表示が正常に表示されていたものがサクラのVPSにて画像表示がされなくなってしまいました。 mysqlのバージョンやphpinfoの設定などを限りなくヘテムルに近づけたのですが正常に表示されないため詰まってしまいました。 各ブラウザで、以下のような状況です。 IE:表示されない Chrome:表示されない Firefox:画像ファイル"http://~/image.php?id=544"は壊れているため、表示できませんでした。 以下質問用にソースを書き換えたものですが、ご教授頂ければと思います。 質問用ソースで動作させて同じ様に画像が出ないことは確認しています。 質問用ソースの構造は以下の通りです。 form.html ↓ファイルをPOST upload.php ↓データをINSERT MySQLのthumbnailテーブル ↓データをSELECT image.php ■form.html■ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>sample</title> </head> <body> <form action="upload.php" method="post" enctype="multipart/form-data"> ファイル:<br /> <input type="file" name="upfile" size="30" /><br /> <br /> <input type="submit" value="アップロード" /> </form> </body> </html> ■upload.php■ <?php include_once(dirname(__FILE__) . "/admin/common/functions.php"); include_once(dirname(__FILE__) . "/admin/common/db_functions.php"); // MySQL に接続し、データベースを選択します。 dbConnect(); global $_G_DbConnection; $message = "ファイルが選択されていません。"; //サムネイル1 if (is_uploaded_file($_FILES["upfile"]["tmp_name"]) && !empty($_FILES["upfile"]["name"])){ $contents = file_get_contents($_FILES["upfile"]["tmp_name"]); $contents = base64_encode($contents); $contents = mysql_real_escape_string($contents,$_G_DbConnection); $post_thumbnail1 = $contents; $post_thumbnail1_name = $_FILES["upfile"]["name"]; } mysql_query("SET AUTOCOMMIT=0"); mysql_query("BEGIN"); // サムネイル1 $post_thumbnail1_id = null; if (!empty($post_thumbnail1_name)) { $sql = "INSERT INTO `thumbnail` ("; $sql .= "`filename`,`thumbnail`)"; $sql .= " values('$post_thumbnail1_name', '{$post_thumbnail1}')"; if (!(mysql_query($sql))) { mysql_query("ROLLBACK"); $message = "ファイルをアップロードできません。"; } else { $post_thumbnail1_id = mysql_insert_id(); mysql_query("COMMIT"); $message = $post_thumbnail1_name . "をアップロードしました。"; } } ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>sample</title> </head> <body> <p><?=$message; ?></p> <img src="image.php?id=<?=$post_thumbnail1_id; ?>"> </body> </html> ■image.php■ <?php include_once(dirname(__FILE__) . "/admin/common/functions.php"); include_once(dirname(__FILE__) . "/admin/common/db_functions.php"); // MySQL に接続し、データベースを選択します。 dbConnect(); global $_G_DbConnection; //ID $get_id = null; if (isset($_GET['id'])){ $get_id = $_GET['id']; // MySQL 問い合わせテスト $sql = "select * from `thumbnail`"; $con = " where id = " . $get_id; if (!($rs = mysql_query($sql . $con))) { echo "MySQL 問い合わせエラー"; echo $sql . $con; die; } while ($row = mysql_fetch_array($rs)) { // 出力 $ext = substr($row['filename'], strrpos($row['filename'], '.') + 1); if (is_null(get_content_type($ext))) { echo "ファイル取得エラー"; } else { header('Content-type: ' .get_content_type($ext)); echo base64_decode($row['thumbnail']); } } dbFreeResult($rs); } ?> ■thumbnailテーブル■phpMyadminよりエクスポート CREATE TABLE IF NOT EXISTS `thumbnail` ( `id` int(11) NOT NULL AUTO_INCREMENT, `filename` varchar(255) DEFAULT NULL, `thumbnail` longblob NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=545 ; □中身のデータ□ INSERT INTO `thumbnail` (`id`, `filename`, `thumbnail`) VALUES (544, 'SH3D0054.jpg', 0x2f~2f5a);  ←[BLOB - 17.3 KiB] INSERT INTO `thumbnail` (`id`, `filename`, `thumbnail`) VALUES (543, 'ねむネコ.bmp', 0x51~413d); ← [BLOB - 234.9 KiB] 長くなってしまいましたが、ご教授お願い致します。

    • 締切済み
    • PHP
  • GETメソッド ID MYSQL

    分からないことがありましたのでご質問をさせて頂きます。 現在作成してる仕様なのですが、 フォームの一つの項目のリンクを設置し、別のページに渡し そこで更に詳細な情報をMYSQLからひっぱってきて表示させようとしております。 そこでGETメソッドを使って行おうとしているのですが、どうしても 変数の受け渡しがうまくいきません。 こちらがそのコードになります。 1,フォーム <td><a href="shousai.php?code=<?php echo $row['id'];?>">詳しくはこちら</a></td> 2,詳細ページ(shousai.php) <?php echo var_dump($_GET["id"]); $id = $_GET["id"]; $con = mysql_connect('localhost','aaaa','aaa'); if (!$con) { print("MySQLへの接続に失敗しました"); exit; } if (!mysql_select_db("database")) { print("データベースへの接続に失敗しました"); exit; } $sql="select * from table where id ='$id'"; $result=mysql_query($sql,$con); //SQL文の発 $rows=mysql_num_rows($result); while($row = mysql_fetch_array($result)){ ?> <table border ="1"> <tr><td><?php echo $row["name"]; ?></p></td></tr> <tr><td><?php echo $row["address"]; ?></td></tr> <tr><td><?php echo $row["station"]; ?></td></tr> <?php } ?> </table> 2の詳細ページにてvar_dumpで$_GET["id"];の値を受け取ってるか 確かめたのですがNULLになっており、ページになにも反映されません。 フォームからリンクで値を送り、それをきっかけにデータベースに接続して詳細を表示させたいと思っております。 どなたかご存知の方お伺いできませんでしょうか?

    • ベストアンサー
    • PHP
  • MySQLでデータ表示

    MySQLでデータの表示を行っています 10件ずつ表示し、11件からは2ページ目に表示したいです サイトや本を見ながらデータ表示と次の10件のリンクは表示されるよう自力で頑張ったのですが 次の10件を押してもデータが変わらず1件目から10件目のままです どこが違うか教えてもらえますか。 どうコードを入力するか教えてくれたらありがたいです 一覧 ta2.phpです <html> <body> <form action = "ta2.php" method="GET"> <input type="hidden" name="page" value="0"> </form> <?php //データベースに接続 if (!$con = mysql_connect("localhost", "root", "admin")) { echo "接続エラー" ; exit ; } //データベースを選択 if (!mysql_select_db("db_test", $con)) { echo "データベース選択エラー" ; exit ; } //LIMITを使ったSELECT文を作成 $sql = "select * from tbl_test" ; $sql.= " limit " . $page*10 . ", 10" ; //SQL実行 if (!$res = mysql_query($sql)) { echo "SQLエラー<BR>" ; exit ; } //検索結果表示 echo "<table border='1'> <tr> <th>番号</th> <th>氏名</th> <th>住所</th> <th>操作</th> </tr>"; while($row = mysql_fetch_array($res)) { $ID = htmlspecialchars($row['番号']); $NAME = htmlspecialchars($row['氏名']); $ADDR = htmlspecialchars($row['住所']); echo "<tr> <td>$ID</td> <td>$NAME</td> <td>$ADDR</td> <td><a href='edit.php?番号=$ID'>修正</a> <a href='delete.php?番号=$ID'>削除</a></td></tr>"; header('content-type: text/html; charset="utf-8"'); if ($_GET) { // データがGETされていたら $page = isset($_GET['page']) ? $_GET['page'] : ''; // 取得 } } $sql = "select count(*) from tbl_test " ; if (!$res = mysql_query($sql)) { echo "SQLエラー<BR>" ; exit ; } $row = mysql_fetch_array($res) ; $cnt = $row[0] ; //ページ表示 if(!$cnt > 10) echo ceil($cnt / 10), "ページの中の", $page + 1, "ページ目を表示<br>" ; //前の10件 if ($page != 0) { echo "<a href = ta2.php?page= $page>" ; echo "&lt 前の10件" ; } //次の10件 if (($page + 1)*10 < $cnt) { echo "<a href = ta2.php?page= $page>" ; echo " 次の10件 " ; } //結果セットの開放 mysql_free_result ($res) ; //データベースから切断 mysql_close($con) ; ?> </table> </body> </html>

    • ベストアンサー
    • MySQL
  • mysqlへのデータ追加について

    以下を実行すると”失敗しました”が表示されます。 $q1~$q5にはtest.html(FORM)からから受け取った(POST),2ビット文字を含む100文字未満が格納されています。(POSTの受け渡しテスト部分で受け渡しの成功は確認) それをmysqlのテーブルに格納したいのですが,そこがうまくいきません。 mysqlのdataテーブルにはq1~q5のフィールドがあり,すべてtext(200)です。本やネットで調べていますが原因がよくわかりません。 mysql_query($sql, $con)の書き方がおかしいのでしょうか。 どなたかご教授下さい。よろしくお願いします。 <?php $q1 = $_POST['q1']; $q2 = $_POST['q2']; $q3 = $_POST['q3']; $q4 = $_POST['q4']; $q5 = $_POST['q5']; /*POSTの確認 $body = $q1; $body .= $q2; $body .= $q3; $body .= $q4; $body .= $q5; print $body; */ require_once("dbini.php"); $con = mysql_connect($DBSERVER, $DBUSER, $DBPASS); mysql_query("SET_NAMES 'sjis'"); $selectdb = mysql_select_db($DBNAME, $con); $sql = "insert into data (q1, q2, q3, q4, q5) values ($q1, $q2, $q3, $q4, $q5)"; $rst = mysql_query($sql, $con); if($rst){ print $q1."<br>"; print $q2."<br>"; print $q3."<br>"; print $q4."<br>"; print $q5."<br>"; print "上記の内容で登録しました。"; }else{ print "失敗しました。";} $con = mysql_close($con); ?>

    • ベストアンサー
    • PHP
  • mysql sqlエラー

    先ほども質問したのですが再度質問させていただきます mysql limitページ分割を行っていてエラーは消せたのですが今度 SQLエラーになり出来ません 前の人が質問したのを参考にしてつくったのですがうまくいかず困っています 検索結果を10件ずつ表示して googleみたいに 1l 2l 3 みたいな感じやりたいです <body> <?php error_reporting(E_ALL ^ E_NOTICE); //データベースに接続 if (!$con = mysql_connect("localhost", "root", "admin")) { echo "接続エラー" ; exit ; } //データベースを選択 if (!mysql_select_db("db_test", $con)) { echo "データベース選択エラー" ; exit ; } //LIMITを使ったSELECT文を作成 $sql = "select * from tbl_test where (氏名 LIKE '%{$_GET['name']}%') or (住所 LIKE '%{$_GET['name']}%')"; $sql = "limit" . $page * 10 . ", 10" ; //SQL実行 if (!$res = mysql_query($sql)) { echo "SQLエラー<BR>" ; exit ; } //検索結果表示 echo "<table border=1>" ; echo "<tr> <th>番号</th> <th>氏名</th> <th>住所</th> <th>操作</th> </tr>" ; while($row = mysql_fetch_array($res)){ $ID = htmlspecialchars($row['番号']); $NAME = htmlspecialchars($row['氏名']); $ADDR = htmlspecialchars($row['住所']); echo "<tr> <td>$ID</td> <td>$NAME</td> <td>$ADDR</td> <td><a href='edit.php?番号=$ID'>修正</a> <a href='delete.php?番号=$ID'>削除</a></td> </tr>"; //検索条件に該当する全データの件数取得 $sql = "select count(*) from tbl_test " ; $sql = "where (氏名 LIKE '%{$_POST['name']}%') or (住所 LIKE '%{$_POST['name']}%')"; if (!$res = mysql_query($sql)) { echo "SQLエラー<BR>" ; exit ; } $row = mysql_fetch_array($res) ; $cnt = $row[0] ; //ページ表示 if(!$cnt > 10) echo ceil($cnt / 10), "ページの中の", $page + 1, "ページ目を表示<br>" ; //前の10件 if ($page_num != 0) { echo "<a href = find.php?name=".$name. ". $page -1.>" ; echo "&lt 前の10件"; } //次の10件 if (($page_num + 1)*10 < $cnt) { echo "<a href = find.php?name=".$name. ". $page +1.>" ; echo " 次の10件 &g</a>t" ; } //結果セットの開放 mysql_free_result ($res) ; //データベースから切断 mysql_close($con) ; } ?> </body> </html>

    • ベストアンサー
    • MySQL
  • mysql>PHPにデータ表示、10件ごとにページ分割

    はじめまして、PHP勉強中の初心者です。。 MYSQLから取り出したデータを件数でページ分割したいのですが、 うまくきません。。 環境:eclipse3.5、mysql5.0、php5.0、xampp (phpで、sql接続、select * from でデータは表示は確認できてます)。。 ソースは↓です。。(初心者なもので不備がればすみません)。。 eclipse上では if (($page_num+1)*10<$cnt) {}でエラーで表示されます。。 どなたかご存知の方いましたら、教えていただけないでしょうか? <!--kensaku.html--> <html> <body> <form action ="kensaku.php" method="post">    名前:<input type="text" name="nm">    年齢:<input type="hidden" name="page_num" value="0">    <input type="submit" name="exec" value="検索"> </form> </body> </html> //kensaku.php ソース <html> <body> <? $nm=$_POST['nm']; $page_num=$_POST['page_num']; //データベースに接続 if (!$conn =mysql_connect("","user","PASS")) { echo "接続エラー" ; exit ; } //データベースを選択 if (!mysql_select_db("table", $con)) { echo "データベース選択エラー" ; exit ; } //LIMITを使ったSELECT文を作成 $sql = "select id,name from table " ; $sql.= "where name like '%$nm% ' order by id " ; $sql.="limit" . $page_num * 10 . ", 10" ; //SQL実行 if (!$res = mysql_query($sql)) { echo "SQLエラー<BR>" ; exit ; } //検索結果表示 echo "<table border=1>" ; echo "<tr><td>id</td><td>name</td></tr>" ; while($row = mysql_fetch_array($res)){ echo "<tr>" ; echo "<td>" . $row["id"] . "</td>" ; echo "<td>" . $row["name"] . "</td>" ; echo "</tr>" ; } echo "</table>" ; //検索条件に該当する全データの件数取得 $sql = "select count(*) from member " ; $sql.="where name like '% $nm % ' order by id " ; if (!$res = mysql_query($sql)) { echo "SQLエラー<BR>" ; exit ; } $row = mysql_fetch_array($res) ; $cnt = $row[0] ; //ページ表示 if(!$cnt > 10) echo ceil($cnt / 10), "ページの中の", $page_num + 1, "ページ目を表示<br>"; //前の10件 if ($page_num !=0) { echo "<a href = kensaku.php?nm=".$nm.",".$page_num -1..">"; echo "&lt 前の10件"; } //次の10件.--ここからエラー行ですが、、解決策がわかりません。。 if (($page_num+1)*10<$cnt) { echo "<a href = kensaku.php?nm=".$nm.",".$page_num +1..">"; echo " 次の10件 &g</a>t"; } //結果セットの開放 mysql_free_result ($res) ; //データベースから切断 mysql_close($con) ; ?> </body> </html> すみませんが、ご存知の方いましたら、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • php5.2.9に変更後に不具合について

    php初心者です。 レンタルサバ―なのですが、php4.4.7からphp5.2.9に変更後うまくいかなくて困っています。 header("Location: http://○○○/top.php");がうまく飛びません。 ページを実行すると真っ白の画面になってしまいます。 以前のバージョンですと、問題なく動いていました。 下記を見てください。 どうしたらよいのでしょうか? <?php mysql_query('SET NAMES ujis'); require_once( "function.php" ); session_start(); if ( $_REQUEST[ "SUBMIT" ] != "" ) { if ( ( $_POST[ "VALUE_ID" ] != "" ) && ( $_POST[ "VALUE_PW" ] != "" ) ) { $k_id = $_POST[ "VALUE_ID" ]; $k_pw = $_POST[ "VALUE_PW" ]; $con=mysql_connect('aaa','aaa','aaa') or die("MySQL接続エラー: ".mysql_error()); mysql_select_db('aaa',$con); $sql= "select * from あああ where id='$k_id' and pw='$k_pw'"; $result=mysql_query($sql); $rows=mysql_num_rows($result); if($rows==1){ while($row=mysql_fetch_array($result)){ $d_id = $row["id"]; $d_pw = $row["pw"]; } } } } if ( !isset( $_SESSION[ "D_ID" ] ) ) { $_SESSION[ "D_ID" ] = ""; } $_SESSION[ "D_ID" ] = $d_id; if ( !isset( $_SESSION[ "D_PW" ] ) ) { $_SESSION[ "D_PW" ] = ""; } $_SESSION[ "D_PW" ] = $d_pw; if ( !isset( $_SESSION[ "K_ID" ] ) ) { $_SESSION[ "K_ID" ] = ""; } $_SESSION[ "K_ID" ] = $k_id; if ( !isset( $_SESSION[ "K_PW" ] ) ) { $_SESSION[ "K_PW" ] = ""; } $_SESSION[ "K_PW" ] = $k_pw; if ( ( $_SESSION[ "D_ID" ] == "" ) || ( $_SESSION[ "D_PW" ] == "" ) ) { print( "<br><center>○○○○○○○○<br>" ); print( "<br>○○○○○○○○○○○○○○○○<br>" ); print( "<br>○○○○○○○○<br>" ); print( "<br><a href=\"index.html\">[ BACK ]</a></center>" ); exit(); }elseif( CheckID_PW( $_SESSION[ "K_ID" ], $_SESSION[ "K_PW" ], $_SESSION[ "D_ID" ], $_SESSION[ "D_PW" ] ) == false ) { print( "<br><center>○○○○○○○○<br>" ); print( "<br><center>○○○○○○○○○○○○○○○○<br>" ); print( "<br><center>○○○○○○○○" ); print( "<br><br><a href=\"index.html\">[ BACK ]</a></center></body>" ); } else {header("Location: http://○○○/top.php");} ?>

    • 締切済み
    • PHP