10/10/2018, 09:54
Sửa hộ em code phân trang
- Chào các bác Pro, em mới học php và đang làm cái phân trang đơn giản, em lấy code trên diễn đàn mình, tuy code dài nhưng dễ hiểu vì nó nói trình tự, tuy nhiên em cũng làm giống hệt thế, em chỉ copy pase nhưng không hiểu sao nó báo lỗi ở dòng while khi mình cho lặp để lấy CSDL ra hiển thị
- Đây là code các bác xem sai chỗ nào nói hộ em nhé, nó chỉ sai chỗ while thôi.Thanks
<?php
$qr=mysql_query("select * from th");//query den bang co ten la: th trong CSDL
$n_record=mysql_num_rows($qr);//so ban ghi cua bang
$p=5;//so bang ghi trong 1 trang can hien thi
//-------Ham tinh so trang-------------------------
function num_page()
{
global $n_record;//lay bien toan cuc
global $p;
if($n_record%$p==0)
{
$n_page=$n_record/$p;
return $n_page;
}
else
{
$n_page=($n_record-($n_record%$p))/$p+1;
return $n_page;
}
}
//-------------------------------------------------
function view_page()
{
global $n_record;
for($i=1;$i<=num_page();$i++)
{
echo "<a href='themCSDL.php?n=".$i."'>".$i."</a>";
}
echo "<a href='themCSDL.php?n=all'>All</a>";
}
//-------------------------------------------------
echo "<br>";
$n=$_POST['n'];//lay bien n tren trinh duyet
$s=($n-1)*$p; //thu tu cua bang ghi tai trang thu n
if ($n!='all')
{
$qr1=mysql_query("select * from th limit $s,$p");
}
else
{
$qr1=mysql_query("select * from th");
}
//--------Hien thi bang-----------------------------
view_page();
echo "<table border='1' width='100%'>";
while($row=mysql_fetch_array($qr1))
{
$ten=$row["ten"];
$ma=$row["ma"];
echo "<tr>";
echo "<td>$ten</td>";
echo "<td>$ma</td>";
echo "</tr>";
}
echo "</table>";
view_page();
?>
/////////////////////
đây là đoạn mà nó báo lỗi không hiển thị ra được
while($row=mysql_fetch_array($qr1))
{
$ten=$row["ten"];
$ma=$row["ma"];
echo "<tr>";
echo "<td>$ten</td>";
echo "<td>$ma</td>";
echo "</tr>";
}
- Đây là code các bác xem sai chỗ nào nói hộ em nhé, nó chỉ sai chỗ while thôi.Thanks
<?php
$qr=mysql_query("select * from th");//query den bang co ten la: th trong CSDL
$n_record=mysql_num_rows($qr);//so ban ghi cua bang
$p=5;//so bang ghi trong 1 trang can hien thi
//-------Ham tinh so trang-------------------------
function num_page()
{
global $n_record;//lay bien toan cuc
global $p;
if($n_record%$p==0)
{
$n_page=$n_record/$p;
return $n_page;
}
else
{
$n_page=($n_record-($n_record%$p))/$p+1;
return $n_page;
}
}
//-------------------------------------------------
function view_page()
{
global $n_record;
for($i=1;$i<=num_page();$i++)
{
echo "<a href='themCSDL.php?n=".$i."'>".$i."</a>";
}
echo "<a href='themCSDL.php?n=all'>All</a>";
}
//-------------------------------------------------
echo "<br>";
$n=$_POST['n'];//lay bien n tren trinh duyet
$s=($n-1)*$p; //thu tu cua bang ghi tai trang thu n
if ($n!='all')
{
$qr1=mysql_query("select * from th limit $s,$p");
}
else
{
$qr1=mysql_query("select * from th");
}
//--------Hien thi bang-----------------------------
view_page();
echo "<table border='1' width='100%'>";
while($row=mysql_fetch_array($qr1))
{
$ten=$row["ten"];
$ma=$row["ma"];
echo "<tr>";
echo "<td>$ten</td>";
echo "<td>$ma</td>";
echo "</tr>";
}
echo "</table>";
view_page();
?>
/////////////////////
đây là đoạn mà nó báo lỗi không hiển thị ra được
while($row=mysql_fetch_array($qr1))
{
$ten=$row["ten"];
$ma=$row["ma"];
echo "<tr>";
echo "<td>$ten</td>";
echo "<td>$ma</td>";
echo "</tr>";
}
Bài liên quan
Có thể là chạy sai câu sql hoặc dl rỗng roài
Tất cả CSDL đã có hết, nói chung cái cơ bản đấy chắc các bác không phải lo
Đây là câu báo lỗi khi em chạy trên trình duyệt, em thấy code như thế là đúng, nhưng không hiểu sao lại thế, mong các bác giúp đỡ.
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in D:\www\tenma\themCSDL.php on line 100
Dòng 100 là dòng mà em bắt đầu khi báo lệnh while()
[=========> Bổ sung bài viết <=========]
Mong bác thuyduongcd nói rõ hơn hộ em chỗ nó lỗi
$n_page=($n_record-($n_record%$p))/$p+1;
được không ạ, em thấy chỗ đó vẫn ổn chứ nhỉ, nó in ra được số trang mình mong muốn "123All" rồi, em nghĩ ở đây nó chỉ sai chỗ là lấy CSDL ra trình duyệt mà thôi, các lệnh khác em nghĩ là tốt rồi.Vì nó chỉ báo sai cái chổ lệnh while()
Mong bác chỉ giáo thêm
Khi đó $n_page=(15-(15%5))/5 +1 = 4
Trong khi thực tế chỉ có 3 trang thôi. => trang 4 không có mẫu tin nào
Vậy nếu hiển thị trang 4 thì sẽ không truy vấn được mẫu tin nào cả ($qrl=null). Vì vậy khi gọi hàm này mysql_fetch_array() với tham số $qrl (ở dòng thứ 100)sẽ sinh ra lỗi như trên.
Khắc phục: Thay dòng đó bằng cái này:
theo em bác tính như trên cũng không đúng, nếu sai thì đây phải sai cái chỗ không đưa nó về int thì đúng hơn.
nếu như bác nói Giả sử DB có 15 record ($n_record=15)
Khi đó $n_page=(15-(15%5))/5 +1 = 3,4
cái này không thể bằng 4 được, nếu đúng ra theo em nghĩ nên ép thành kiểu int thì nó sẽ được là 3, em đã ép kiểu và cho echo ra $n_page=3, như vậy mới đúng.
Nhưng vấn đề là nó vẫn chưa chạy được.
Mong bác giúp để thêm.
15%5=0. Vậy thì kết quả là 4 chứ sao lại 3,4?
Còn muốn sửa lỗi thì phải debug từng bước
Chẳng hạn như chỗ này:
Em sửa lại được rồi, em sửa trong dòng $n=$_POST['n']; cho nó là GET mới đúng, nó lấy qua url, ở đây POST không được
Còn câu lệnh bác nói là đúng nhưng ở đây em nhầm, nó có thêm 1 trang nữa đó là ALL, vì vậy nó mới có 4 trang
Cảm ơn bác nhiều nhé, chúc bác thành công và hạnh phúc trong con đường đi làm "Thiên sứ PHP"