#58161 gửi bởi bungbu84
Ngày 12 Tháng 07 2010 , 06:19
Tình hình là E đang nghiên cứu về xtemplate, đã hiểu được chút rồi những còn cái truy vấn CSDL là còn trục trặc khi sử dụng hàm foreach để truy vấn CSDL. Cụ thể như sau:
E tạo 1 data có table ebook như sau:
Mã: Chọn hết
CREATE TABLE IF NOT EXISTS `vndots_ebooks` (
`id` int(11) NOT NULL auto_increment,
`ebook` varchar(255) NOT NULL,
`poster` varchar(255) NOT NULL,
`content` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

--
-- Dumping data for table `vndots_ebooks`
--

INSERT INTO `vndots_ebooks` (`id`, `ebook`, `poster`, `content`) VALUES
(1, 'Lap trinh PHP', 'Nguyen Van Kien', 'Noi dung chang co gi'),
(2, 'Chan Php', 'Nguyen Van Kien', 'Hoc mai khong thong! Qua chán!'),
(3, Huong dan dap Laptop', 'Nguyen Van Kien', 'Huong dan cac ban cach dap nat Laptop ma khong con su dung duoc linh kien nao nua');


Sau đó kết nối tới CSDL và file index.php của E như sau:
Mã: Chọn hết
<?php
$server = "localhost";
$username = "root";
$password = "";
$db = "vndots";
$ketnoi=@mysql_connect($server, $username, $password);
if(!$ketnoi)
{
die("Khong vao duoc MySQL server");
}
@mysql_select_db($db, $ketnoi) or die(mysql_error());
$tb_prefix = "vndots_";

include_once ( './include/xtemplate.class.php' );
$xtpl = new XTemplate('template/default/theme.xtpl');
$sql = mysql_query("select * from ".$tb_prefix."ebooks");
$row = mysql_fetch_array($sql);

$ebook = $row['ebook'];
$poster = $row['poster'];
$content = $row['content'];
$a = array('ebook'=>$ebook, 'poster'=>$poster, 'content'=>$content);

foreach($a as $value) {

// assign array data
$xtpl->assign('EBOOK', $ebook);
$xtpl->assign('POSTER', $poster);
$xtpl->assign('CONTENT', $content);
$xtpl->parse('main.table.row');

}
}
// parse the table
$xtpl->parse('main.table');

$xtpl->parse('main');
$xtpl->out('main');

?>


Và tạo file template/default/theme.xtpl như sau:
Mã: Chọn hết
<!-- BEGIN: main -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Language" content="en" />
<meta name="GENERATOR" content="Co-Comp Ltd" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Thư viện E-book</title>
</head>

<body>
<p>Kho sách hiện có:</p>

<!-- BEGIN: table -->
<table border="1">
<tr>
<th>Tên sách</th>
<th>Người Post</th>
<th>Sơ lược</th>
</tr>
<!-- BEGIN: row -->
<tr>
<td>{EBOOK}</td>
<td>{POSTER}</td>
<td>{CONTENT}</td>
</tr>
<!-- END: row -->

</table>
<!-- END: table -->

</body>
</html>
<!-- END: main -->

Nhưng sau khi chạy file index.php nó chỉ hiện thị 1 sản phẩm, không hiển thị hết các sản phẩm hiện có. Cái này là do sử dung hàm foreach không đúng, E tìm nhiều tài liệu về foreach nhưng cũng không làm dược mong các bác giúp đỡ.
File xtemplate.class.php đính kèm.
Đính kèm
(8.01 KB) Đã tải về 5 lần

-----------------------------------
#58183 gửi bởi bungbu84
Ngày 12 Tháng 07 2010 , 22:23
xman đã viết:vì đoạn sql của bạn chỉ lấy 1 ra được 1 row

Bác này nói E chẳng hiểu gì hết. Sao lại chỉ lấy ra được 1 row với cái SQL đó? E muốn hỏi ở đây là cách sử dụng hàm foreach như thế nào với toàn bộ code này. E biết nó chỉ gọi ra 1 row là do điều kiện trong hàm foreach không đúng. Còn nếu muốn gọi hết bình thường thì E dùng vòng while cũng được, chạy ngon lành. Có điều E muốn là sử dụng hàm foreach cơ. Ai biết chỉ với!
---------------------
E xin đính chính lại là dùng vòng lặp while thì chạy bình thường đó nha.

-----------------------------------
#178263 gửi bởi caophong
Ngày 27 Tháng 06 2016 , 22:06

foreach($a as $value) {
// assign array data
$xtpl->assign('EBOOK', $ebook);
$xtpl->assign('POSTER', $poster);
$xtpl->assign('CONTENT', $content);
$xtpl->parse('main.table.row');
}

$value sau khi duyệt từ mảng $a bạn gán vào đâu?