PHP Foreach语句问题。返回多行

时间:2012-12-07 22:57:48

标签: php html mysql

我是一名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查询后结果都会逐页停留在页面上。

你能告诉我这个问题到底是什么吗?谢谢!

5 个答案:

答案 0 :(得分:4)

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']);
}

?>

答案 1 :(得分:4)

你做错了。 ; - )

首先,你必须在这样的循环中使用mysql_fetch_array获取结果:

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

其次我想告诉你所有mysql_ *函数都被标记为已弃用。如果你想学习PHP,你应该尝试学习如何使用PDO连接到mysql。

答案 2 :(得分:3)

你正在尝试逆转:

    <?php     

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

立即尝试:)

答案 3 :(得分:3)

使用while获取所有数据并检查变量名称

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

答案 4 :(得分:3)

您只获得一个结果(只有一次调用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。