プロが教えるわが家の防犯対策術!

学校の課題で、PHP & MySQLを使ってウェブを作っています。

BBTapahtumaテーブルからJas_nroをキーにデータを抽出して、Tap_nroとTap_nimiを降順に出力します。
実行してもエラーはでません。現在BBTapahtumaには10件、該当Jas_nroのレコード数は5件(Tap_nro:10-8-7-6-1)ですが、表示されるのは4件(Tap_nro: 8-7-6-1)で、一番初めにくるべきデータが出てきません。where Jas_nro=$no を外し全レコード抽出(Tap_nro: 9-8-7-6-5-4-3-2-1)したり、order by Tap_nro desc を外して昇順(Tap_nro: 6-7-8-10)にしても、やはり1件目に当たるデータが出力されません。

$_SESSION['no']=$noは「1」が入っており、MySQL consoleで「select * from BBTapahtuma where Jas_nro=1 order by Tap_nro desc;」を実行すると、5件出てくるのでその次の出力の方に誤りがあるのだと思います。
テーブルは下記の3項目。テーブルを閉じた後に Lisa (別ページへのリンクボタン)があります。
Tap_nro, Tap_nimi, Lisatietoja(各データの詳細へのリンクボタン)

ソースは次の通りです。どこに間違いがあるのか見つけられません。よろしくお願いいたします。

<?php
$host="localhost";
$user="xxxx";
$password="xxxx";
$dbname="bb";
$yhteys = mysqli_connect($host, $user, $password, $dbname);

$no = $_SESSION['no'];
$sql = "select * from BBTapahtuma where Jas_nro=$no order by Tap_nro desc";
if(!$tulos=mysqli_query($yhteys, $sql))
{
echo "error";
exit;
}

if(!$row=mysqli_fetch_array($tulos, MYSQLI_BOTH))
{
echo "tiedot eivat ole tietokannassa.";
}

echo "<table border=0>";
echo "<tr><td>Numero &nbsp&nbsp</td><td>Tapahtuman nimi &nbsp&nbsp</td><td></td></tr>";
while($row=mysqli_fetch_array($tulos, MYSQLI_BOTH)){
echo "<tr>";
echo "<td>". $row['Tap_nro'] ."</td>";
echo "<td>". $row['Tap_nimi'] ."</td>";
echo "<form action='omatkeikkatiedot11.php' method='POST'>";
echo "<span class='button'><input type=hidden name=Tap_nro value=". $row['Tap_nro'] .">";
echo "<td><input type=submit name=lisa id=lisa value='Listietoja'></td></form></span></tr>";
}
echo "</table>";
echo "<br><br>";
echo "<form action=omatkeikkatiedot2.php method=POST>";
echo "<div class='button'><input type=hidden name=Jas_nro value=". $row['Jas_nro'].">";
echo "<input type=submit name='Lisaa' id='laheta' value ='Lisaa'>";
echo "</div></form>";

?>

A 回答 (1件)

if(!$row=mysqli_fetch_array($tulos, MYSQLI_BOTH))


{
echo "tiedot eivat ole tietokannassa.";
}
ここでデータポインタが進んでいるからでしょう。
ループ処理の前にポインタを先頭に戻してもよいですが、結果の有無を調べるだけならmysqli_num_rows()で件数を取得、判定すればよいかと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。
ご指摘のあった箇所を外したら正常の件数が出力されたので、データがない分に関しては、別の判定方法に置き換えました。
これで、先に進めます。

お礼日時:2009/11/19 00:51

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