09/10/2018, 23:30

[PHP] Hỏi về việc trình bày dữ liệu.

Sau khi truy vấn mình muốn trình bày dữ liệu như sau: trên khung bên phải của trang web, mỗi hàng sẽ có 2 hoặc 3 sản phẩm (bao gồm tên, ảnh, giá tiền) ví dụ:



Mình đã làm mọi cách nhưng chỉ có thể thị mỗi sản phẩm ở 1 dòng, sản phẩm sau lại ở phía dưới sản phẩm trước.




Đoạn code hiển thị của mình như sau:

PHP Code:
$sql="select * from $tb_product";
        
$result=mysql_query($sql,$conn);

        if (
mysql_num_rows($result)!=0)
        {
            while (
$row=mysql_fetch_array($result))
            {
                
$itemid=$row***91;'product_id'***93;;
                
$product_name=$row***91;'product_name'***93;;
                
$product_type=$row***91;'product_type'***93;;
                
$product_image=$row***91;'product_image'***93;;
                
$product_price=$row***91;'product_price'***93;;
                
$product_date_added=date('m-d-Y',$row***91;'product_date_added'***93;);
                
$product_status=$row***91;'product_status'***93;;
                
$product_des=$row***91;'product_des'***93;;
                
                echo 
"<div>";
                echo 
"<table width="228">";
                echo 
"<tr>";
                echo 
"<td align="center"><b>$product_name</b></td>";
                echo 
"</tr>";
                echo 
"<tr>";
                echo 
"<td align="center"><img src="$product_image"></td>";
                echo 
"</tr>";
                echo 
"<tr>";
                echo 
"<td align="center">$product_price</td>";
                echo 
"</tr>";
                echo 
"<tr>";
                echo 
"<td align="right"><a href="tocart.php?itemid=$itemid" class="mtext"><img 

src="image/tocart.jpg" border="0"></a>&nbsp;&nbsp;<a href="productdetail.php?itemid=
$itemid" class="mtext"><img 

src="image/readmore.jpg" border="0">"
;
                echo 
"<td>";
                echo 
"</tr>";
                echo 
"</table>";
                echo 
"</div>"
Bạn nào biết thuật toán hiển thị thì giúp mình với. Xin cảm ơn.
pcdinh viết 01:39 ngày 10/10/2018
Thuật toán là cái gì cơ?

Lỗi 1: Câu SQL không có order.
Lỗi 2: Echo: Không hiểu PHP là ngôn ngữ multiline.
Lỗi 3: Mix PHP, SQL với HTML
Lỗi 4: Table và Div là block. Phải để float và chú ý đến IE width bug nếu không các block sẽ tuân theo đúng trật tự xếp đặt thông thường
cái nick đó viết 01:36 ngày 10/10/2018
đoạn code ví dụ dưới đây hi vọng giúp được bác

một số điều em thường lưu ý đó là
- nếu trong chuỗi không có biến thì dùng dấu nháy đơn để bao lấy chuỗi thì bộ parser sẽ chạy nhanh hơn là dùng dấu nháy kép
- khi dùng echo để viết HTML thì cũng nên dùng nháy đơn, sẽ dễ nhìn hơn nhiều . nhưng dần dần nên tìm hiểu về 1 cái template engine như Smarty

nếu có lỗi syntax thì thông cảm nha

PHP Code:
<?php
$sql 
"select * from $tb_product"
$result mysql_query($sql$conn);
$products = array();

while (
$row mysql_fetch_array($result)) {
    
$products***91;***93; = array (
        
'id'    => $row***91;'product_id'***93;,
        
'name'    => $row***91;'product_name'***93;,
        
'image'    => $row***91;'product_image'***93;
        
/* tiep */
    
);
}

$totalProducts    count($products);
$noOfCols        3//số sản phẩm mỗi dòng
$noOfRows        = ( ($totalProducts $noOfCols) == ) ? ($totalProducts $noOfCols) : (int)($totalProducts $noOfCols) + 1;

if (
$totalProducts 0) {

    echo 
'<table width="600">';
    
    
// lặp qua các dòng
    
for ($rowCounter 1$rowCounter <= $noOfRows$rowCounter++) {
    
        echo 
'<tr>';
        
        
// lặp qua các cột
        
for ($colCounter 1$colCounter <= $noOfCols$colCounter++) {
            
            echo 
'<td width="200">';
                
            
// tính toán ra cái index của product trong mảng products
            
$productIndex = (($rowCounter 1) * $noOfCols) + $colCounter 1;
                
            
// chỉ hiển thị product nếu index của nó vẫn còn trong mảng products;
            
if ($productIndex < ($totalProducts 1)) {
                
$product $products***91;$productIndex***93;;

                echo 
'
                    <a href="showProduct.php?id=' 
$product***91;'id'***93; . '">' $product***91;'name'***93; . '</a><br />
                    <img src="' 
$product***91;'image'***93; . '" />';
            } else {
                
                echo 
' ';
            }
            
            echo 
'</td>';
        } 
// lặp các cột
        
        
echo '</tr>';
    } 
// lặp qua các dòng
    
    
echo '</table>';
}

?>
conan1212 viết 01:42 ngày 10/10/2018
Hic cái này có gì khó đâu bác, cứ mỗi lần lập qua từng record lại tăng giá trị của một biến $i nào đó lên, và kiểm tra biến này, nếu nó $i%3==0 thì cho nó xuống một dòng khác thôi chứ làm gì mà phức tạp kinh thế.
pcdinh viết 01:33 ngày 10/10/2018
Chẳng cần phải đếm hay kiểm tra gì hết. Nếu các bạn thạo dùng CSS thì có thể cứ in tuần tự rồi dùng CSS để xếp hàng cho chúng. Đơn giản hơn, elegant hơn và cũng mạnh mẽ hơn.
MichaelTuanAnh viết 01:47 ngày 10/10/2018
bác biết thì mách nhỏ cho người ta, dùng CSS như thế nào nhỉ?

Quote Được gửi bởi pcdinh View Post
Chẳng cần phải đếm hay kiểm tra gì hết. Nếu các bạn thạo dùng CSS thì có thể cứ in tuần tự rồi dùng CSS để xếp hàng cho chúng. Đơn giản hơn, elegant hơn và cũng mạnh mẽ hơn.
Thanh duc viết 01:36 ngày 10/10/2018
Nghe bác định nói ngẩn con tò te liền làm thử
PHP Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<
title>Untitled Document</title>
<
style type="text/css">
<!--
#item {
    
list-style-typenone;
}
#item li {
    
floatleft;
    
height100px;
    
width100px;
    
background-color#FFFF66;
    
border1px solid #330066;
}
-->
</
style>
</
head>

<
body>
<
div style="width:400px; display:block; background:#330066">
<
ul id="item">
<
li>1</li>
<
li>2</li>
<
li>3</li>
<
li>4</li>
<
li>5</li>
<
li>6</li>
<
li>7</li>
<
li>8</li>
</
ul>
<
br clear="all" />
</
div>
</
body>
</
html
cái nick đó viết 01:44 ngày 10/10/2018
ờ há, cảm ơn các bác nha, sao mình cứ phức tạp hóa các vấn đề nhỉ (chắc do ảnh hưởng từ thời table còn bá chủ )
conan1212 viết 01:43 ngày 10/10/2018
Sử dụng CSS là bạn phải đối phó với vấn đề Cross Browser, Multi Browser do vậy cách này chỉ áp dụng được với những người có kinh nghiệm với XHTML và CSS.
Nên kiểm tra trên các trình đuyệt để dảm bảo layout không loạn lên .
Hero_vanchien viết 01:38 ngày 10/10/2018
Quote Được gửi bởi conan1212 View Post
Sử dụng CSS là bạn phải đối phó với vấn đề Cross Browser, Multi Browser do vậy cách này chỉ áp dụng được với những người có kinh nghiệm với XHTML và CSS.
Nên kiểm tra trên các trình đuyệt để dảm bảo layout không loạn lên .
Chính xác đây...
Tôi đã thử làm nhiều site với CSS và Table tuy nhiên cứ nhìn IE ngon mắt rồi chuyển sang Firefox là ý như rằng lại bị vỡ và ngược lại.
Cứ như kiểu tính kích thước của 2 thằng nó không khớp nhau hay sao đó.
Bài liên quan
0