0

データベースから動物名を出力するプログラムを書いていますが、正しい値(データベースにない値)が見つからない場合、プログラムが実行できないという問題があります。

<?php
$host='localhost';
$user='root';
$password='root';
$dbname='pet';
$connect=mysqli_connect($host,$user,$password,$dbname) or die("can not connect to server");

if(@$_GET['data']=='yes')
{
    $animalName=trim($_POST['animal']);
    $query="SELECT name FROM display WHERE name='$animalName'";
    $result=mysqli_query($connect,$query) or die("can not execute query");
    while($row=mysqli_fetch_assoc($result))
    {
        extract($row);
        if(!$name==$animalName)
        {
            echo "not found";
        }
        else
        {
            echo "Hello $name. Have a nice day.";
        }
    }

}
else
{
        echo "<form action='$_SERVER[PHP_SELF]?data=yes' method='POST'>
            <h4>type an animal name in the box below and press enter</h4>
            <p><input type='text' name='animal' maxlength='20'></p>
            <p><input type='submit' value='submit'></p>
            </form>";
}
?>

データベースに存在しない動物を入力すると、コードはこのブロックを実行できません (空のページに変わります)

if(!$name==$animalName)
            {
                echo "not found";
            }

解決策はありますか。

4

4 に答える 4

4

データベースから結果セットに行が取得されない場合、while ループ内のコードは実行されません。

while ループに入ろうとする前に、結果セットの行数を確認する必要がある可能性があります。行が 0 の場合は、メッセージを発行するだけで、while ループでデータベースから結果を「フェッチ」しようとしないでください。

于 2013-11-06T17:01:27.403 に答える
3

mysqli_num_rows()while ループの前に使用

<?php
$host     = 'localhost';
$user     = 'root';
$password = 'root';
$dbname   = 'pet';
$connect = mysqli_connect($host, $user, $password, $dbname) or die("can not connect to server");

if (@$_GET['data'] == 'yes') {
    $animalName = trim($_POST['animal']);
    $query      = "SELECT name FROM display WHERE name='$animalName'";
    $result = mysqli_query($connect, $query) or die("can not execute query");
    if (mysqli_num_rows($result) > 0) {
        while ($row = mysqli_fetch_assoc($result)) {
            extract($row);
            if (!$name == $animalName) {
                echo "not found";
            } else {
                echo "Hello $name. Have a nice day.";
            }
        }
    } else
        echo "data not found";

} else {
    echo "<form action='$_SERVER[PHP_SELF]?data=yes' method='POST'>
                    <h4>type an animal name in the box below and press enter</h4>
                    <p><input type='text' name='animal' maxlength='20'></p>
                    <p><input type='submit' value='submit'></p>
                    </form>";
}
?> 
于 2013-11-06T17:05:21.227 に答える
1

これを試して:

if ($name != $animalName) {

クエリは、SQL インジェクションに対しても脆弱です。

于 2013-11-06T16:59:42.747 に答える
0

データベースに動物がいないために SELECT が失敗した場合、行を返さない mysql_query() のチェックがありません。$result = mysqli_query($connect,$query) ステートメントの後に次を追加します。

$result = mysqli_query($connect,$query);
if (mysql_num_rows($result) == 0) {
       echo "not found";
}
于 2013-11-06T17:05:48.030 に答える