2013-05-25 70 views
0

我想呼應出數組中多行,但只能輸出一行: PHP陣列中的PHP打印行

$query = "SELECT * FROM user WHERE Category = 'Men'"; 
$result = mysql_query($query); 
    while ($row1 = mysql_fetch_array($result)) { 
    $fname1 = $row1['FName'];  
    $sname1 = $row1['SName']; 
    } 

$result2 = mysql_query($query); 
    while ($row2 = mysql_fetch_array($result2)) { 
    $fname2 = $row2['FName'];  
    $sname2 = $row2['SName']; 
    } 

HTML

<h2>First Name: <?php echo "$fname1"; ?></h2> 
<h2>Second Name: <?php echo "$sname1"; ?></h2> 

<h2>First Name: <?php echo "$fname2"; ?></h2> 
<h2>Second Name: <?php echo "$sname2"; ?></h2> 

,但它給了我同樣的輸出兩者應該有所不同。 輸出是:

名字:約翰 第二名稱:史密斯

名字:約翰 第二名稱:史密斯

當我想輸出是:

名字:約翰 第二名稱:史密斯

名字:鮑勃 第二名稱:馬利

誰能幫我解決這個問題,請\

在數據庫中的數據是:

User_ID| FName |SName| Category 
1  John Smith Men 
2  Bob Marley Men 
+3

你必須在循環內部回聲......你基本上是相呼應的初始值,因爲有記錄的多次迭代。看看我的意思,只是在你的循環內呼應來測試。 – brbcoding

回答

1

使用數組,也只是跟蹤你的代碼。

PHP:

$query = "SELECT * FROM user WHERE Category = 'Men'"; 
$result = mysql_query($query); 
    $fname=array(); 
    $sname=array(); 

    for($i=0;$i<2 && ($row = mysql_fetch_array($result));$i++) { 
    $fname[$i] = $row['FName'];  
    $sname[$i] = $row['SName']; 
    } 

HTML:

<h2>First Name: <?php echo "$fname[0]"; ?></h2> 
<h2>Second Name: <?php echo "$sname[0]"; ?></h2> 

<h2>First Name: <?php echo "$fname[1]"; ?></h2> 
<h2>Second Name: <?php echo "$sname[1]"; ?></h2> 
2

while循環覆蓋你變了個遍,只輸出最後的結果,你必須要麼通過陣列

也強制性把回波的同時內或將其保存到數組,然後循環「停止使用mysql_功能」,改變到PDO :)

解決您的代碼將

$query = "SELECT * FROM user WHERE Category = 'Men'"; 
$result = mysql_query($query); 
while ($row1 = mysql_fetch_array($result)) { 
?> <h2>First Name: <?php echo $row1['FName']; ?></h2> 
    <h2>Second Name: <?php echo $row1['SName']; ?></h2><?php  
} 
0
$query = "SELECT * FROM user WHERE Category = 'Men'"; 
$result = mysql_query($query); 
while ($row1 = mysql_fetch_array($result)) { 
$fname1 = $row1['FName'];  
$sname1 = $row1['SName']; 
echo " <h2>First Name: $fname1</h2>"; 
echo "<h2>Second Name: $sname1</h2>"; 
} 
+0

後'$ sname1' – brbcoding

0

你重寫你的價值,因爲你的while循環的每行每一次迭代。試試這個:

$query = "SELECT * FROM user WHERE Category = 'Men'"; 
// mysql_ = bad. mysqli_ = good! 
$result = mysql_query($query); 
$row1 = mysql_fetch_array($result); 
$fname1 = $row1['FName']; 
$sname1 = $row1['SName']; 

// using the same $result. 
$row2 = mysql_fetch_array($result); 
$fname2 = $row2['FName'];  
$sname2 = $row2['SName']; 

當然,作爲已經在別處指出,如果你在你的桌子兩個以上的項目,並希望在輸出的每個項目,該解決方案將無法工作。如果是這樣的話,你會想是這樣的:

$result = mysql_query($query); 
while($row = mysql_fetch_array($result)) 
{ 
?> <h2>First Name: <?=$row['FName'] ?></h2> 
    <h2>Second Name: <?=$row['SName'] ?></h2><br /><?php 
} 

,或者根據您的需求:

$result = mysql_query($query); 
$men = array(); 
while($row = mysql_fetch_array($result)) 
{ 
    $men[] = $row; 
} 

// then later in the script 
foreach($men as $man) 
{ 
    // extract takes all of the array keys and turns them into local variables. 
    // just make sure you read the warnings in the docs: 
    // http://php.net/manual/en/function.extract.php 
    extract($man); 
    ?> 
    <h2>First Name: <?=$FName ?></h2> 
    <h2>Second Name: <?=$SName ?></h2><br /><?php 
} 
+0

'提取物()觀看您收短標籤'是可怕的,而且容易出錯。爲什麼不做'$ man ['FName'];' –

+0

@PhilipWhitehouse這取決於需求,真的。對於模板系統,使用'extract'是更簡單/更乾淨的解決方案 – cwallenpoole