3

私はPHPの初心者ですが、最近、ソースコードに問題があります。

ここにあります:

   <html>
    <head>
        <title>
            Bot
        </title>
        <link type="text/css" rel="stylesheet" href="main.css" />
    </head>
    <body>
        <form action="bot.php "method="post">
            <lable>You:<input type="text" name="intrebare"></lable>
            <input type="submit" name="introdu" value="Send">
        </form>
    </body>
</html>
<?php
//error_reporting(E_ALL & ~E_NOTICE);
mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("robo") or die(mysql_error());

$intrebare=$_POST['intrebare'];
$query = "SELECT * FROM dialog where intrebare like '%$intrebare%'"; 
$result = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_array($result) or die(mysql_error());
?>
<div id="history">
<?php       
        foreach($row as $rows){ 
            echo "<b>The robot says: </b><br />";
            echo $row['raspuns'];
            }
?>
</div>

結果を6倍返します。

この問題は、foreachSQLクエリのたびに結果を1つずつページに貼り付けたいために作成したときに発生しました。

何が問題なのか教えていただけますか?ありがとう!

4

5 に答える 5

2

mysql_fetch_array呼び出しごとに1行をフェッチします。あなたはこのようにしたいと思うでしょう:

while ($row = mysql_fetch_array($result)) {
    echo "<b>The robot says:</b><br>";
    echo htmlentities($row['raspuns']);
}

そして、最初にそれを取り除きmysql_fetch_arrayます。

(私はHTMLで変数出力をエスケープしていることに注意してください。何をしているのかわからない限り、生データをページに出力しないでください。)

ちなみに、mysql_queryは事実上非推奨です。新しいコードにはまったくお勧めしません。mysqli(代替)またはPDO(新しいホットネス)を見てください。新しいmysqli(objecty)インターフェースを使用すると、PHPの部分は次のようになります。

<?php

//error_reporting(E_ALL & ~E_NOTICE);

$db = new mysqli('localhost', 'root', '', 'robo');

# turn into a wildcard
$intrebare='%' . $_POST['intrebare'] . '%';

$stmt = $db->prepare('SELECT * FROM dialog WHERE intrebare LIKE ?');
$stmt->bind_param('s', $intrebare);
$result = $stmt->execute();

echo '<div id="history">';
# 5.4 lets you do it like this; 
# older versions, try `while ($row = $result->fetch_assoc())`
foreach ($result as $row) {
    echo "<b>The robot says: </b><br />";
    echo htmlentities($row['raspuns']);
}

?>
于 2012-12-07T23:03:28.880 に答える
2

あなたはそれを誤解している。;-)

まず、次のmysql_fetch_arrayようなループで結果をフェッチする必要があります。

while (true == ($row = mysql_fetch_array($result))) {
    echo "<b>The robot says: </b><br />";
    echo $row['raspuns'];
}

次に、すべてのmysql_*関数が非推奨としてマークされていることをお伝えしたいと思います。PHPを学びたい場合は、PDOを使用してmysqlに接続する方法を学ぶ必要があります。

于 2012-12-07T23:03:54.027 に答える
1

あなたはそれを逆の方法で試しています:

    <?php     

    while($row = mysql_fetch_array($result,MYSQL_ASSOC)){ 
        echo '<strong>The robot says: </strong><br />', $row['raspuns'];
        }
    ?>

今すぐやってみて下さい :)

于 2012-12-07T23:01:43.937 に答える
1

whileを使用して、すべてのデータをフェッチし、変数名を確認します

        while($row = mysql_fetch_array($result)){ 
        echo "<b>The robot says: </b><br />";
        echo $row['raspuns']; // Here
        }
于 2012-12-07T23:02:08.677 に答える
1

結果は1つだけです(mysql_fetch_array()の呼び出しは1つだけです)。ダイアログには6つの列があります。

...
$result = mysql_query($query) or die(mysql_error());
?>
<div id="history">
<?php
while($row = mysql_fetch_array($result))
{
    echo "<b>The robot says: </b><br />";
    echo htmlentities($row['raspuns']);
}
?>
</div>

また、mysql_*関数は非推奨になりました。mysqli_*またはPDOに切り替えます。

于 2012-12-07T23:03:57.140 に答える