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 次。

当我这样做时出现了这个问题,foreach因为我希望在每次 SQL 查询之后将结果一张一张地卡在页面上。

你能告诉我似乎是什么问题吗?谢谢!

4

5 回答 5

2

mysql_fetch_array每次调用获取一行。你会想要这样做:

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

你只会得到一个结果(只有一次调用 mysql_fetch_array())。我敢打赌,对话中有六列。

...
$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 回答