file การตอบเว็บบอร์ด
<?php
$host = "127.0.0.1";
$user = "root";
$passwd = "momay";
$dbname = "projact";
mysql_connect($host,$user,$passwd) or die("ติดต่อ Host ไม่ได้");
mysql_select_db($dbname) or die("ติดต่อฐานข้อมูลไม่ได้");
mysql_query("SET NAMES TIS620");
$sql = " select * ,date_formet(Qexpire, '%d-%m-%Y') as Qexpire from toppic where top_id=$top_id";
$sql = "select * from topic where top_id=$top_id";
$dbquery = mysql_db_query($dbname, $sql);
$result = mysql_fetch_array($dbquery); // ตำแหน่งเนี่ยที่ผิด
$top_id = $result[top_id];
$Qsender = $result[Qsender];
$Qtopic = $result[Qtopic];
$Qdetail = $result[Qdetail];
$Qemail = $result[Qemail];
$Qtype = $result[Qtype];
$Qexpire = $result[Qexpire];
$fileupload = $result[fileupload];
$view = $result[view];
?>
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\AppServ\www\phpmydream\webb\answer.php on line 26
แก้ยังไงดีค่ะ เป็นหน้าที่ไว้แสดงข้อมุลในรายละเอียดคำถาม ในหน้าที่ไว้ใช้ตอบคำถามเว็บบอร์ดอ่าค่ะ
<?php
$sql = "SELECT * FROM `table` WHERE ........";
$query = mysql_query($sql, $connection);
if (mysql_num_rows($query) == 0) {
// ไม่มีผลลัพท์
} else {
// ผลลัพท์
$result = mysql_fetch_array($query, MYSQL_ASSOC);
...................
}
?>
ที่คุณอาว่าไม่มีผลลัพธ์ บางทีอาจไม่ได้หมายความว่าที่ฐานข้อมูลไม่มีข้อมูลอยู่
แต่อาจจะมีสาเหตุอื่นๆ ที่ทำให้ไม่มีผลลัพธ์ส่งมาให้ mysql_fetch_array() ทำงานต่อ
ยกตัวอย่างเช่น $dbname = "projact";
บางทีชื่อ DB มันอาจสะกดว่า project ก็ได้
555++
โค้ดที่เขียนให้ดูเป็นตัวอย่างการ query ที่ถูกต้อง ส่วนการ query แล้วจะมีผลลัพท์หรือไม่มันอีกเรื่อง
ผมเคยเขียนบนเว็บนี้หลายครั้งแล้วว่า ถ้าพบปัญหาเกี่ยวงกับ query ให้ไปทดสอบบน phpmyadmin ด้วยการ echo เอา query ออกมา แล้วนำไปทดสอบบน phpmyadmin ถ้ามีผลลัพท์ตามต้องการ แสดงว่า ข้อผิดพลาด อยู่บน php ถ้าผลลัพท์ไม่ออกมาหรือไม่ถูกต้อง ก้ให้แก้ไขและทดสอบ query บน phpmyadmin จนกว่าจะได้ผลลัพท์ตามที่ต้องการ
$host = "127.0.0.1";
$user = "root";
$passwd = "momay";
$dbname = "projact";
mysql_connect($host,$user,$passwd) or die("ติดต่อ Host ไม่ได้");
mysql_select_db($dbname) or die("ติดต่อฐานข้อมูลไม่ได้");
mysql_query("SET NAMES TIS620");
$sql = "select *,DATE_FORMAT(Qexpire, '%d-%m-%Y') as Qexpire from topic order by top_id";
$sql = "select * from topic order by top_id desc";
$dbquery = mysql_db_query($dbname, $sql);
// หาจำนวนเรกคอร์ดข้อมูลในตาราง
$num_rows = mysql_num_rows($dbquery);
// เริ่มวนรอบแสดงข้อมูล
$i=0;
while ($i < $num_rows)
{
$result = mysql_fetch_array($dbquery);
$top_id = $result[top_id];
$Qsender = $result[Qsender]; //ชื่อผู้ตั้งกระทู
$Qtopic = $result[Qtopic]; //คำถาม
$Qdetail = $result[Qdetail];//รายละเอียด
$Qemail = $result[Qemail];
$Qtype = $result[Qtype];
$Qexpire = $result[Qexpire]; // วัน
$fileupload = $result[fileupload];
$view = $result[view];
$i++;
$strSql = "select count(*) as numreply from reply where reply_id = '$top_id' ";
$strResult = mysql_query($strSql);
$data = mysql_fetch_array($strResult);
$numreply = $data['numreply'];
echo " <A HREF=\"answer.php?top_id=$top_id\" target=\"$top_id\">$Qtopic</A> <FONT COLOR=\"blue\">$Qexpire</FONT> $name<BR>";
?>
<tr bgcolor="BCEE68">
<td><a href="answer.php?top_id=$top_id" target="top_id"><?=$Qtopic;?></a></td>
<td align="center"><?=$Qsender;?></td>
<td align="center"><?=$Qexpire;?></td>
<td align="center"><?=$view;?></td>
<td align="center"><?=$numreply;?></td>
</tr>
<?php
}
?>
</table>
<?php
mysql_close();
?>
ไฟล์ที่แสดงกระทู้ แล้วส่งลิ้งไปหาไฟล์ด้านบน
จะได้ภาพประมรมาณนี้
ส่วน echo นี้ ทำให้เราลิ้งไปหน้าที่แสดงคำตอบของกระทู้ได้ แบบไม่มีอะไร eroro
ไม่หรอกค่ะ ถูกแล้วละ
ทำอย่างที่ผมบอก คือทดสอบ query บน phpmyadmin ใฟ้ใช้งานได้ก่อนเลยละครับ
เวรกรรม....
อย่างแรกเลย ให้ echo เอาคำสั่ง sql ที่ใช้งานบนเว็บออกมา
$sql = "select * from topic order by top_id desc";
echo $sql;
$dbquery = mysql_db_query($dbname, $sql);
อย่างที่สอง เอาคำสั่งที่ได้ไปรันบน phpMyAdmin ซึ่งถ้ามีข้อผิดพลาด มันจะบอกถึงความผิดพลาดได้ละเอียดว่า ให้เราแก้ไขและทกดสอบ query จนกระทั่งมันได้ผลลัพท์ถูกต้องตามที่ต้องการ แล้วค่อนำกลับมาใส่ยัง PHP ตามเดิม
ที่จริงก็ผิดอยู่ตรงนี้
ขอบคุณมากค่ะ อาจารย์
มันผิดอยุ่ตรง $sql = "select * from topic where top_id=$top_id";
เปลี่ยนเป็น $sql = "select * from topic order by top_id desc";
มันะแสดงแค่กระทู้แรกเท่านั้นอ่ะค่ะ
ไม่ว่าจะมีกี่กระทู้ในฐานข้อมูล แล้วลิ้งมันไปที่กระทู้เดียว ก็คือกระทู้แรกล่าสุด
ลองโค้ดแบบนี้ดู
while(result = mysql_fetch_array($dbquery))
{
echo $result[top_id];
echo $result[Qsender];
echo $result[Qtopic];
echo $result[Qdetail];
echo $result[Qemail];
echo $result[Qtype];
echo $result[Qexpire];
echo $result[fileupload];
echo $result[view];
}