2012-04-01 47 views
5

Tôi gặp sự cố lạ khi đặt truy vấn vào bảng html được hiển thị trong thiết lập php/mysql. Truy vấn sẽ luôn tạo ra một kết quả nhiều hơn được hiển thị. Ví dụ: nếu 1 bộ kết quả được trả về, không có gì hiển thị trong bảng. Nếu có 5, chỉ có 4 được hiển thị. Tôi đã thử các truy vấn tương tự với một hàm được xác định trước để tạo ra một bảng dựa trên một truy vấn và nó tạo ra bảng bên phải với số lượng kết quả chính xác. Dưới đây là một ví dụ (xin lỗi cho thụt lề hoặc thiếu):Truy vấn PHP/MySQL vào vấn đề bảng html

$user_id = implode($_SESSION['user_id']); 
$query = "SELECT name, address 
    FROM user 
    WHERE user_id = '$user_id' 
    ORDER BY date_added DESC"; 
$result = mysql_query($query) or die ("query failed: " . mysql_error());   

echo "<table border='1' style=\"border-collapse: collapse;\"> 
<tr style=\"background-color: #000066; color: #FFFFFF;\"> 
<th>Name</th> 
<th>Address</th> 
</tr>"; 

$rowCt = 0; // Row counter 
while($row = mysql_fetch_array($result)) 
    { 
    if($rowCt++ % 2 == 0) $Style = "background-color: #00CCCC;"; 
    else $Style = "background-color: #0099CC;"; 
    echo "<tr style=\"$Style\">"; 
    echo "<td>" . $row['name'] . "</td>"; 
    echo "<td>" . $row['address'] . "</td>"; 
    echo "</tr>"; 
    } 
    echo "</table>"; 

Bất kỳ ý tưởng nào tại sao điều này đang xảy ra? Bất kỳ sự giúp đỡ nào sẽ được đánh giá cao, điều đó khiến tôi phát điên và cần phải tìm ra nó trước khi tôi có thể tiếp tục! Cảm ơn.

EDIT

Tôi đã thay đổi nó một chút để lặp qua số lượng hàng như con số đó là đúng, và bảng bây giờ là kích thước chính xác, tuy nhiên kết quả cuối cùng luôn là sản phẩm nào. Bất kỳ ý tưởng?

$rowCt = 0; // Row counter 
    $i = 0; 
    echo mysql_num_rows($result). ' number of rows'; 
    $num = mysql_num_rows($result); 
    //while($row = mysql_fetch_array($result)) 
    while ($i < $num) 
    { 

    $row = mysql_fetch_array($result); 

    if($rowCt++ % 2 == 0) $Style = "background-color: #00CCCC;"; 
    else $Style = "background-color: #0099CC;"; 
    echo "<tr style=\"$Style\">"; 
    echo "<td>" . $row['name'] . "</td>"; 
    echo "<td>" . $row['address'] . "</td>"; 
    echo "</tr>"; 
    $i++; 

    } 
    echo "</table>"; 

Cảm ơn

+1

echo mysql_num_rows ($ result); và đảm bảo nó trả về số hàng bạn mong đợi – Tom

+1

bạn đang cố gắng làm gì với 'implode ($ _ SESSION [' user_id '])'? – mshsayem

+0

Tôi thấy không có gì sai với mã của bạn. Chỉ trong bạn trong khi, bạn có một nếu và khác, hãy thử bình luận chúng ra và xem những gì sẽ xảy ra, nó có thể làm điều gì đó bất ngờ. Ngoài ra tôi đề nghị thực hiện truy vấn $ trực tiếp trong phpmyadmin (nếu được cài đặt) và xem tập dữ liệu được trả về để xác nhận dữ liệu được trả về. – ArendE

Trả lời

0

Bạn đã tuyên bố tình DOCTYPE trên trang web? Đây là điều duy nhất tôi có thể nghĩ đến. Mã của bạn có vẻ chính xác.

Lưu ý: Nếu DOCTYPE không được chỉ định, thuộc tính border-collapse có thể tạo ra kết quả không mong muốn.

http://www.w3schools.com/cssref/pr_tab_border-collapse.asp

Ngoài ra, bạn đã cảnh báo/lỗi bật phải không? Có thể có một số lỗi với hàng cuối cùng đó là lý do tại sao nó không hiển thị.

+0

Xin chào, cảm ơn bạn đã trả lời. Loại tài liệu được khai báo và không có lỗi nào liên quan đến khu vực đó hiển thị. Ngay cả khi tôi nhận được nó để đếm số tiền của những thứ trở lại, nó vẫn hiển thị một ít hơn là thực sự có! Bất kỳ ý tưởng nào khác? –

0

hãy thử sử dụng mysql_fetch_assoc thay vì mysql_fetch_array

0

kiểm tra $ i của bạn và $ num trong vòng lặp while. tôi nghĩ rằng trong khi bạn nên:

while($i <= $num){ 
// Your code 
} 
0

Hãy thử điều này:

<?php 
$user_id = $_SESSION['user_id']; 
$query = mysql_query("SELECT * FROM `user` WHERE `user_id`='$user_id' ORDER BY `date_added` DESC")or die(mysql_error()); 
?> 
<table border="1" style="border-collapse: collapse;"> 
<tr style="background-color: #000066; color: #FFFFFF;"> 
<th>Name</th> 
<th>Address</th> 
</tr> 
<? 
$colour2 = "transparent"; 
$colour1 = "#0099CC"; 
$row_count = 0; 
while($row = mysql_fetch_array($query)){ 
$rowcolor = ($row_count % 2) ? $colour1 : $colour2; 
?> 
<tr style="background: <? echo $rowcolor; ?>;"> 
<td><? echo $row['name']; ?></td> 
<td><? echo $row['address']; ?></td> 
</tr> 
<? 
$row_count++; 
} 
?> 
</table> 
0

Bạn đã thử đầu ra mà không cần bảng? tức là

echo $row['name']." - ".$row['address']."<br />"; 

Nếu có cùng kết quả, bạn đã áp dụng truy vấn đó trong phpMyAdmin để kiểm tra kết quả? có thể là bản ghi cuối cùng của bạn bị trống trong DB để mã hiển thị không có gì.

0

thử sử dụng vòng lặp for thay vì trong khi.

for($i=0;$i<=mysql_num_rows;$i++) 
{ 
    $row = mysql_fetch_array($query); 
    ... 
    ... 
} 
0

Có lẽ là nó đếm

<th>Name</th> 
<th>Address</th> 

Như hàng thử, lấy chúng ra.

1

Hãy thử điều này .........

<style> 
#s { 
background-color: #000066; 
color: #FFFFFF; 
} 
#s1 { 
background-color: #0CC; 
} 
#s2 { 
background-color: #09C; 
} 
</style>  
<?php 
$user_id = implode($_SESSION['user_id']); 
$result = mysql_query("SELECT name, address FROM user WHERE user_id = '$user_id' ORDER BY date_added DESC", $your_connection) or die ("query failed: " . mysql_error());   
?> 
<table border="1" style="border-collapse:collapse;"> 
<tr id="s"> 
<th>Name</th> 
<th>Address</th> 
</tr> 
<?php 
$rowCt = 0; // Row counter 
while($row = mysql_fetch_assoc($result)) 
    { 
    if($rowCt++ % 2 == 0): 
    $Style = "s1"; 
    else: 
    $Style = "s2"; 
    endif; 
    ?> 
    <tr id="<?php echo $Style; ?>"> 
    <td><?php $row['name']; ?></td> 
    <td><?php $row['address']; ?></td> 
    </tr> 
    <?php } ?> 
    </table> 
Các vấn đề liên quan