電子書籍の厳選無料作品が豊富!

いつもお世話になっています。

やりたい事から説明します。
リストボックスで絞込みを2段階にしています。
その2段階目で、レコードがあればきちんと表示するのですが
無い場合に、一段階戻したいのです。

やってみた事。
前のページから、POST で 【genreno = $sgenreno】を送っています。

うまく表示するのですが、レコードが無いときにうまく表示できません。
*レコードが無いので、前のページに戻るリンクを表示したいのです

下は私なりに書いてみたのですが、if文にしない時はうまくいくのですが
if文にすると、レコードが無い場合にだけ変数が表示しません。
**変数以外の部分は表示するので、分岐は出来てると思うのですが

変な事をしているのだと思いますが、色々やってみてもうまくいきません。
宜しくアドバイスをお願いいたしますm(__)m

<?php
require_once("dbini.php");
$con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD);
$selectdb = mysql_select_db($DBNAME, $con);
//1ページ当りの表示件数を設定します
$PAGESIZE = 10;
if (!isset($page)) {
$sql = "select count(*) as cnt from テーブルA where genreno = $sgenreno";
$rst = mysql_query($sql, $con);
$col = mysql_fetch_array($rst);
$tcnt = $col["cnt"];
mysql_free_result($rst);
$page = 1;
}
$totalpage = ceil($tcnt / $PAGESIZE);
$pagehead = "$tcnt 件の登録があります。 " .
"[" . ($PAGESIZE * ($page - 1) + 1) . "-";
if ($page < $totalpage) {
$pagehead .= ($PAGESIZE * $page) . "] を表示しています</p>";
}
else {
$pagehead .= "$tcnt] を表示しています</p>";
}
//1ページ分だけ抽出するSQL文を組み立てます
$sql = "select * from テーブルA where genreno = $sgenreno order by id desc limit " .
$PAGESIZE * ($page - 1) . ", $PAGESIZE";

   $rst = mysql_query($sql, $con);
//結果セットからデータを読み込みます
while($col = mysql_fetch_array($rst)) {
$genreno=$col["genreno"]; 
$genre=$col["genre"];
$sgenre=$col["sgenre"];
}
//△△△△△△△うまくいかないのはこの部分△△△△△△△
if($tcnt == 0 ){
$navi .= "<a href='1setubi_search.php?genreno=$genreno'>【".$genre."】"."</a>"."【".$sgenre."】は登録がありません。" ;
}

else{
$navi .= "今表示しているのは<a href='1setubi_search.php?genreno=$genreno'>【".$genre."】"."</a>"."【".$sgenre."】です。" ;
//↑この行はレコードがある場合は表示します
}
mysql_free_result($rst);
//△△△△△△△うまくいかないのはこの部分まで△△△△△△△

A 回答 (2件)

前のページに戻りたいなら、


//△△△△△△△うまくいかないのはこの部分△△△△△△△
if($tcnt == 0 ){
// この表記でうまくいくかどうかは、試験環境がないので保証の限りではないですが。
$genre='javascript:history.back()';
$navi .= "<a href=【".$genre."】"."</a>"."【".$sgenre."】は登録がありません。" ;
}

で戻れそうな感じですが、$sgenreに何をセットすべきかは、この記事の情報では判断できません。$sgenreno をキーにして、テーブルAを検索し、その中のカラムsgenreから値を取り出しているわけですが、$sgenrenoに該当するレコードが1件もないのに、1件もない場合にどんな値が カラムsgenre から取り出されるべきかと問われているようなものです。それは第三者に分かるはずはないのです。

私が書くならこうします。
$navi .= "<a href=【".$genre."】"."</a>"."【".$sgenreno."】に該当する○○は登録がありません。" ;
    • good
    • 0
この回答へのお礼

再度アドバイス、ありがとうございました!

前回のアドバイスを元に、色々な方法を試して
データのあるなしに関わらず、ジャンルを表示するように
今朝方、作ったところでした。

ただ、前のページに戻るリンクを張りたかっただけなので
アドバイス通り以下のようにしました。

if($tcnt == 0 ){
// この表記でうまくいくかどうかは、試験環境がないので保証の限りではないですが。
$back='javascript:history.back()';
$navi .= "<a href=".$back.">"."登録がありません、前のページに戻ります。"."</a>" ;
}

このようにさせて頂きました。

色々な方法を考えてみる事が大事だと言うことを考えさせていただきました、
初心者の質問にお付き合い頂いて本当にありがとうございました。

お礼日時:2007/11/25 15:58

while($col = mysql_fetch_array($rst)) {


$genreno=$col["genreno"]; 
$genre=$col["genre"];
$sgenre=$col["sgenre"];
}
のループは下記の条件で該当レコード0なら1度も通過しない。
select * from テーブルA where genreno = $sgenreno order by id desc limit
ゆえに、変数$genreも$sgenreも値を持たない変数になる。他に、これらの変数を初期化している箇所がないので、

$navi .= "<a href='1setubi_search.php?genreno=$genreno'>【".$genre."】"."</a>"."【".$sgenre."】は登録がありません。" ;

は多分、

【】【】は登録がありません。

と表示されて終わる~のではないかと。

この回答への補足

回答ありがとうございます。

ご指摘どおりです。
【】【】は登録がありませんと表示します。。。

アドバイスを頂いて、もう一度SQL文を発行すればよいのかと思いましたが、
while($col = mysql_fetch_array($rst)) {

こうしている限りだめなんですよね?

すみません、再度アドバイスをいただけませんか m(__)m

補足日時:2007/11/18 01:40
    • good
    • 0

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