10/10/2018, 00:17

Code này sai chỗ nào vậy mấy pro

khi mình vào http://localhost/viewentry.php?id=1(hoặc 2, 3, 4...) nhưng nó vẫn load trang viewentry mà có datepost mới nhất. Mấy pro biết cách khắc phục ko (mình nghĩ cái validentry có vấn đề !?). Đoạn code ở phía dưới. Mình cảm ơn nhiều

Code:
<?php
require("config.php");
if(isset($_GET['id']) == true) {
	if(is_numeric($_GET['id']) == false) {
		$error = 1;
	}
	if($error = 1) {
		header("Location: " . $config_basedir);
	}
	else {
		$validentry = $_GET['id'];
	}	
}
else {
	$validentry = 0;
}
if($_POST['submit']) {
	$db = mysql_connect($dbhost, $dbuser, $dbpassword);
	mysql_select_db($dbdatabase, $db);
	$sql = "INSERT INTO comments(blog_id, dateposted, name, comment) VALUES(" . $validentry. ",NOW()," . $_POST['name'] . "," . $_POST['comment'] . ")";
	mysql_query($sql);
	header("Location: http://" . $HTTP_HOST . $SCRIPT_NAME . "?id=" . $validenry);
}
else {

}
require("header.php");
if($validentry == 0) {
	$sql = "SELECT entries.*, categories.cat FROM entries, categories
			WHERE entries.cat_id = categories.id
			ORDER BY dateposted DESC
			LIMIT 1;";
}
else {
	$sql = "SELECT entries.*, categories.cat FROM entries, categories
			WHERE entries.cat_id = categories.id
			AND entries.id = " . $validentry . " ORDER BY dateposted DESC LIMIT 1;";
}
$sql_result = mysql_query($sql);
$row = mysql_fetch_assoc($sql_result);
echo "<h2>" . $row['subject'] . "</h2>" . $row['cat'] . " - Post on " . date("D jS F Y g:j A", strtotime($row['dateposted']));
echo "<p>" . nl2br($row['body']);
echo "<p>";
$commsql = "SELECT * FROM comments WHERE blog_id = " . $validentry . " ORDER BY dateposted DESC;";
$commresult = mysql_query($commsql);
$numrows_comm = mysql_num_rows($commresult);
if(numrows_comm == 0) {
	echo "No comments";
}
else {
	$i = 1;
	while($commrow = mysql_fetch_assoc($commresult)) {
		echo "<a name = 'comment" . $i . "'>";
		echo "<h3>Comment by " . $commrow['name'] . "on " . strtotime($commrow['commresult']) . "</h3>";
		echo $commrow['comment'];
		$i++;
	}
}
?>
<h2>Leave a comment</h2>
<form action="<?php echo $SCRIPT_NAME . "?id=" . $validentry ?>" method="post">
<table border="0">
<tr>
	<td>Your name: </td>
    <td><input type="text" name="name"></td>
</tr>
<tr>
	<br>
	<td>Comment: </td>
    <td><textarea name="comment" cols="50" rows="10"></textarea></td>
</tr>
<tr>
	<br>
    <td></td>
    <td><input type="submit" name="submit" value="Add comment"></td>
</tr>
</table>
</form>
<?php require("footer.php"); ?>
sacroyant viết 02:21 ngày 10/10/2018
Bạn thay is_numeric bằng is_int là được

Có điều thấy logic chương trình của bạn hơi yếu

Giả sử tớ gõ trực tiếp đường dẫn thế này :

http://localhost/viewentry.php

Như vậy phần if(isset($_GET['id']) == true) cho qua, chương trình đi vào khối else , --> $validentry=0 (1)
PHP Code:
else {
    
$validentry 0;



Vì tớ gõ đường dẫn trực tiếp nên if($_POST['submit']) cũng cho qua, chương trình rơi vào khối else :

PHP Code:
else {


Có nghĩa là trường hợp này không mở database (2)

Tiếp đến bạn chèn header.php, không biết có gì ở đây nhưng sau đó chúng ta vẫn có 1 câu lệnh sql, vì (1).
PHP Code:
if($validentry == 0) {
    
$sql "SELECT entries.*, categories.cat FROM entries, categories
            WHERE entries.cat_id = categories.id
            ORDER BY dateposted DESC
            LIMIT 1;"
;

Và do (2), nên sẽ sinh lỗi ở đây :

PHP Code:
$sql_result mysql_query($sql);
$row mysql_fetch_assoc($sql_result); 
dohoangthien viết 02:27 ngày 10/10/2018
Chắc pro chưa hiểu ý mình. Code của mình thì ko có báo lỗi sai gì hết nhưng nó chạy ko đúng. Chẳng hạn như nếu mình nhấp vào link http://localhost/viewentry.php?id=2 thì nó sẽ mở trang viewentry.php nhưng có nội dung là entry có id là 2, nhấp vào link http://localhost/viewentry.php?id=3 thì mở entry có id là 3 ... Mình đã thử xuất $validentry cuối tập tin nhưng nó vẫn hiện số 0 hoài, mặc dù mình gõ http://localhost/viewentry.php?id=2 (nếu đúng thì $validentry phải là 2). Mình ko biết nếu gõ địa chỉ trên thì $_GET['id'] == true hay là false ??
Vô Thin viết 02:23 ngày 10/10/2018
Được gửi bởi dohoangthien
Chắc pro chưa hiểu ý mình. Code của mình thì ko có báo lỗi sai gì hết nhưng nó chạy ko đúng. Chẳng hạn như nếu mình nhấp vào link http://localhost/viewentry.php?id=2 thì nó sẽ mở trang viewentry.php nhưng có nội dung là entry có id là 2, nhấp vào link http://localhost/viewentry.php?id=3 thì mở entry có id là 3 ... Mình đã thử xuất $validentry cuối tập tin nhưng nó vẫn hiện số 0 hoài, mặc dù mình gõ http://localhost/viewentry.php?id=2 (nếu đúng thì $validentry phải là 2). Mình ko biết nếu gõ địa chỉ trên thì $_GET['id'] == true hay là false ??
Bạn nên đọc lại kỹ lý thuyết ở sách kẻo thêm nữa thì mất căn bản và lơ mơ:

không ai viết if(isset($_GET['id']) == true)

mà chỉ cần viết if(isset($_GET['id']) là đủ rồi.

và cũng không ai viết: if(is_numeric($_GET['id']) == false) {
$error = 1;
}

mà viết

if(intval($_GET['id']) == 1) // hoặc 2, 3 gì ấy tùy bạn thôi thì làm việc gì đó, còn nếu nó không bằng 1, 2, 3 tức là nó không phải là số thì chỉ cần do nothing.
amida viết 02:27 ngày 10/10/2018
Nên đọc kĩ và suy nghĩ các góp ý hơn là mong muốn câu trả lời hợp lý với mình nhất
dohoangthien viết 02:27 ngày 10/10/2018
Sau nhiều giờ nghiên cứu hàm intval của pro superthin mình đã khắc phục được rồi. Câu lệnh phải là $validentry = intval($_GET['id']). Nhưng mà coi lại trong sách nó vẫn ghi là $validentry = $_GET['id'] (thế mới đau). Dù sao cũng cảm ơn mấy pro, đặc biệt là superthin . Có gì thắc mắc mình sẽ post tiếp(newbie mà), cảm ơn mấy pro đã nhiệt tình giúp đỡ.
Vô Thin viết 02:21 ngày 10/10/2018
Được gửi bởi dohoangthien
Sau nhiều giờ nghiên cứu hàm intval của pro superthin mình đã khắc phục được rồi. Câu lệnh phải là $validentry = intval($_GET['id']). Nhưng mà coi lại trong sách nó vẫn ghi là $validentry = $_GET['id'] (thế mới đau). Dù sao cũng cảm ơn mấy pro, đặc biệt là superthin . Có gì thắc mắc mình sẽ post tiếp(newbie mà), cảm ơn mấy pro đã nhiệt tình giúp đỡ.
Cùng nhau học thôi bạn à, mình cũng lơ mơ về IT lắm, cũng mới tập tành gần đây thôi, sau cái vụ bị ông nhà báo chê dữ quá nên cũng thử sức từ thợ khoan bê tông nhảy sang tọc tạch mấy đoạn mã lập trình. Chúng ta cùng nhau học tập hén.
diepnghitinh viết 02:26 ngày 10/10/2018
Được gửi bởi dohoangthien
Chắc pro chưa hiểu ý mình. Code của mình thì ko có báo lỗi sai gì hết nhưng nó chạy ko đúng. Chẳng hạn như nếu mình nhấp vào link http://localhost/viewentry.php?id=2 thì nó sẽ mở trang viewentry.php nhưng có nội dung là entry có id là 2, nhấp vào link http://localhost/viewentry.php?id=3 thì mở entry có id là 3 ... Mình đã thử xuất $validentry cuối tập tin nhưng nó vẫn hiện số 0 hoài, mặc dù mình gõ http://localhost/viewentry.php?id=2 (nếu đúng thì $validentry phải là 2). Mình ko biết nếu gõ địa chỉ trên thì $_GET['id'] == true hay là false ??
Theo mình nghĩ vậy file viewentry.php sẽ viết như sau...
<?php
if (isset($_GET[id])){
$validentry = intval($_GET[id]);
echo $validentry;
}
?>
duongdragonxxx viết 02:26 ngày 10/10/2018
<?php
require("config.php");

$validentry="0"; //thêm dòng này vào

if(isset($_GET['id']) == true) {
bạn sửa lại như thế này là dc
dohoangthien viết 02:23 ngày 10/10/2018
Mấy pro cho mình hỏi trong phpAdmin, mình có sẵn 2 record với id là 1 và 2. Mình xóa id thứ 2. Xong rồi mình tạo thêm 1 record thì nó tự động lấy id là 3. Mình muốn nó phải tự động lấy id(kế tiếp id trên) tức là 2 thì phải làm thế nào vậy mấy pro. Mình cảm ơn
Bài liên quan
0