2012-12-07 89 views
5

我是一名PHP初學者,最近我的源代碼出現問題。PHP Foreach語句問題。多行返回

這就是:

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

它返回的結果6X倍。

當我創建了foreach時,出現了此問題,因爲我希望在每次SQL查詢後,結果都會一頁一頁粘在頁面上。

你能告訴我什麼似乎是問題嗎?謝謝!

回答

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。

+3

我試過你的代碼,它的工作,謝謝。但是它仍然會將結果返回給我,然後將其替換爲下一個結果。我想保留頁面上的所有結果。你能告訴我,我該怎麼做? –

3

您正在嘗試它扭轉方式:

<?php  

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

現在就來試試:)

+1

讓我換個簡單的英語foreach循環。對於$行中的每個$行....回顯$行。幫助? – Lenin

+0

@Downvoter你有沒有合理的理由downvote? – Lenin

+2

我是downvoter; 'mysql_fetch_array($ result)'一次只取一行。因此,只有一次調用它,你的foreach循環只是遍歷第一行。 –

3

使用而獲取的所有數據,並檢查變量名

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

這不會解決他的問題,因爲$行不是數組 –

+0

@BenjaminPaap - $行是一個數組;它只被設置一次 –

+1

@MTahir - 計算括號 –

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

?> 
3

你只會得到一個結果(只有一個調用mysql_fetch_array())。我打賭,在對話框中有六列。

​​

此外,mysql_ *函數被棄用。切換到mysqli_ *或PDO。