【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード

はじめまして、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>

すみませんが、ご存知の方いましたら、よろしくお願いいたします。

A 回答 (5件)

連投すみません。



そちらが #2の補足に提示されたソースを PHPエディタにコピペした所、中括弧が全角になっている部分が2ヶ所ありましたが、そちらのソースでは 大丈夫でしょうか?

> }
> //↓↓↓まだここのエラーとeclipseが表示。。
> //次の10件.--ここからエラー行ですが、、解決策がわかりません。。
> if(($page_num+1)*10<$cnt){
> echo "<a href = kensaku.php?nm=".$nm.",".$page_num+1 .">";
> echo " 次の10件 &g</a>t";
> }

もしかして、シンプルなパースエラー?

この回答への補足

bm_hiroさん、ありがとうございます。
いろいろやってみましたが、SQLエラーに変わりした。。

エラーMSGはeclipseのエラーですが
データベース選択エラーSQLエラー[]2
id name
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in 34
SQLエラー
SQLエラー[select count(*) from member where name like '%安%' order by id ]4

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in 49

Warning: mysql_free_result():66

ソースは(汚くてすみません)
<html>
<body>
<?php
$nm=$_GET['nm'];
$page_num=$_GET['page_num'];

//データベースに接続
if(!$conn =mysql_connect("","user","pass")){
echo "接続エラー" ;
echo "SQLエラー[$sql]1<BR>" ;
}

//データベースを選択
if(!mysql_select_db("member",$conn)){
echo "データベース選択エラー" ;
echo "SQLエラー[$sql]2<BR>" ;

}
//LIMITを使ったSELECT文を作成

$TMP=$page_num*10;
$sql ="select id,name from member where name like '%$nm%' order by id limit ".$TMP.",1";
//SQL実行

if(!$rs = mysql_query("SET NAMES 'sjis' ",$conn)){
echo "SQLエラー<BR>3" ;
echo $TMP."<br>";
echo $page_num;
exit ;
}
//検索結果表示
echo "<table border=1>" ;
echo "<tr><td>id</td><td>name</td></tr>" ;
//--ここが↓34行目エラー
while($row=mysql_fetch_array($rs))
{
echo "<tr>" ;
echo "<td>" . $row["id"] . "</td>" ;
echo "<td>" . $row["name"] . "</td>" ;
echo "</tr>" ;}
echo "</table>" ;
//検索条件に該当する全データの件数取得
$sql2 = "select count(*) from member " ;
$sql2.="where name like '%$nm%' order by id " ;
if(!$rs=mysql_query($sql2,$conn))
{
echo "SQLエラー<BR>" ;
echo "SQLエラー[$sql2]4<BR>";}

//--ここが↓49行目エラー
$row = mysql_fetch_array($rs) ;
$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";
}
//結果セットの開放
//--ここが↓66行目エラー
mysql_free_result($rs);
//データベースから切断
mysql_close($conn);
?>
</body></html>

多分$rsの箇所のエラーだと思いますが、解決策がまだ。。
私もいろいろ試してみますが、
ご存知の方いましたら、教えていただけないでしょうか?

補足日時:2010/03/24 10:55
    • good
    • 0
この回答へのお礼

bm_hiroさん,たびたびすみません。。
おかげ様で解決しました。
上記の補足の部分はsqlデータdbの選択ミスですした。。
お恥ずかしい限りです。。。
でも、GETの件や{の全角の指摘がなければ、解決しませんでした。
本当に、私のような、初心者の質問にも回答いただけこと感謝したします。ありがとうございました。
また、掲示板で見かけたら、すみませんが、お願いいたします。

お礼日時:2010/03/24 11:45

いろいろツッコみ所がありますが、せめてエラーメッセージを教えてください。

この回答への補足

bm_hiroさん、ご丁寧にありがとうございます。
今、手元にeclipseのPCないので、明日、エラーMSGもふまえて、試してみます。。m(_ _)m。
連続して、返答いただけるのは、私的にか迷惑ではないので、御気になさらずに、逆に感謝です。
でも、本日試せなくて、すみません。

補足日時:2010/03/23 18:36
    • good
    • 0

デバックする方法を、もう少し勉強した方が良いと思いますが ^ ^;



アルゴリズム的な問題は無視して、記述されたスクリプトを読むと・・・

>$sql.="limit".$TMP.",10" ;
$sql.="limit△".$TMP.",10" ;
△は半角スペースですが・・・分かりませんでしたか ^ ^;


>//↓↓↓まだここのエラーとeclipseが表示。。
>//次の10件.--ここからエラー行ですが、、解決策がわかりません。。
>if(($page_num+1)*10<$cnt){
>echo "<a href = kensaku.php?nm=".$nm.",".$page_num+1 .">";

eclipseの経験ないので、どのようなエラーか不明ですが、下記の記載があるので、
>$nm=$_POST['nm'];
>$page_num=$_POST['page_num'];
href=kensaku.php?nm=(数字)&page_num=(数字)と記述する形式です。
「=kensaku.php?nm=".$nm.",".$page_num+1 .">」は、上記の形式になっていないです!!

「=kensaku.php?nm=".$nm."&".$page_num+1 .">」
「,」を「&」に置き換えるが正解と思います。

でも・・・POSTではなくGETでないですか?


FORMでの受け渡しなど基礎的なことが違って気がしますよ
    • good
    • 0

LIMIT 使ってましたね ^ ^;




> $sql.="limit" . $page_num * 10 . ", 10" ;
計算式を直接記述しているのが不味いとお思います。
「$page_num * 10」

TMP= $page_num * 10;
$sql.="limit" . $TMP . ", 10" ;


バックスラッシュが有効なら・・・
$sql.="limit" . `$page_num * 10` . ", 10" ;



デバックですが・・・
>echo "SQLエラー<BR>" ;
echo "SQLエラー[$sql ]<BR>" ; とした方が分かり易いです

この回答への補足

qaz_qwerty_me さん
ご指摘があった箇所訂正してみましたが、無理でした。。。
でも、お答え頂いた事に感謝してます。ありがとうございます。
私自身もがんばってみますが、解決策ご存知の方いましたら、すみませんが、教えていただけないでしょうか?
//訂正後のkensaku.phpです、
<html>
<body>
<?
$nm=$_POST['nm'];
$page_num=$_POST['page_num'];

//データベースに接続
if(!$conn =mysql_connect("","user","pass")) {
echo "接続エラー" ;
exit ;
}

//データベースを選択
if(!mysql_select_db("member",$con)) {
echo "データベース選択エラー" ;
exit ;
}
//LIMITを使ったSELECT文を作成
//ご指摘があった訂正箇所↓↓↓
$TMP=$page_num*10;//訂正箇所
$sql = "select id,name from member " ;
$sql.= "where name like '%$nm% ' order by id " ;
$sql.="limit".$TMP.",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件";


//↓↓↓まだここのエラーとeclipseが表示。。
//次の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>
すみません。教えてください。。

補足日時:2010/03/23 14:45
    • good
    • 0

まじめにコードを読んでいないので・・・外しているかも知れませんが SQLを使っているならページ制御は Limit句を使うのが簡単で確実&早い? と思います。



これで先頭から3行 select できます
(SQL)... Limit 0, 3;


取り合えず見つけたURL
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!