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







แก้ยังไงดีค่ะ  เป็นหน้าที่ไว้แสดงข้อมุลในรายละเอียดคำถาม ในหน้าที่ไว้ใช้ตอบคำถามเว็บบอร์ดอ่าค่ะ

05 ก.พ. 2555 13 2,102

อาจเป็นเพราะไม่มีผลลัพท์ครับ ให้ตรวจสอบผลลัพท์ก่อนว่ามีหรือไม่ แล้วค่อย fetch ออกมาครับ

<?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);

          ...................

      }

?>
#1

แต่อาจารย์ค่ะ ข้อมูลมันมีอยู่แล้วอ่ะค่ะ
#2

ขอเสริมนิดนึงฮะ

ที่คุณอาว่าไม่มีผลลัพธ์ บางทีอาจไม่ได้หมายความว่าที่ฐานข้อมูลไม่มีข้อมูลอยู่

แต่อาจจะมีสาเหตุอื่นๆ ที่ทำให้ไม่มีผลลัพธ์ส่งมาให้ mysql_fetch_array() ทำงานต่อ



ยกตัวอย่างเช่น $dbname = "projact";

บางทีชื่อ DB มันอาจสะกดว่า project ก็ได้
#3

อ้างอิงจาก ความคิดเห็น #2แต่อาจารย์ค่ะ ข้อมูลมันมีอยู่แล้วอ่ะค่ะ


555++

โค้ดที่เขียนให้ดูเป็นตัวอย่างการ query ที่ถูกต้อง ส่วนการ query แล้วจะมีผลลัพท์หรือไม่มันอีกเรื่อง



ผมเคยเขียนบนเว็บนี้หลายครั้งแล้วว่า ถ้าพบปัญหาเกี่ยวงกับ query ให้ไปทดสอบบน phpmyadmin ด้วยการ echo เอา query ออกมา แล้วนำไปทดสอบบน phpmyadmin ถ้ามีผลลัพท์ตามต้องการ แสดงว่า ข้อผิดพลาด อยู่บน php ถ้าผลลัพท์ไม่ออกมาหรือไม่ถูกต้อง ก้ให้แก้ไขและทดสอบ query บน phpmyadmin จนกว่าจะได้ผลลัพท์ตามที่ต้องการ





#4

file การตอบเว็บบอร์ด
 <?

$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();


 ?>



ไฟล์ที่แสดงกระทู้ แล้วส่งลิ้งไปหาไฟล์ด้านบน

จะได้ภาพประมรมาณนี้

#5

file การตอบเว็บบอร์ด
echo " <A HREF=\"answer.php?top_id=$top_id\" target=\"$top_id\">$Qtopic</A> <FONT COLOR=\"blue\">$Qexpire</FONT> $name<BR>"; 





ส่วน echo นี้ ทำให้เราลิ้งไปหน้าที่แสดงคำตอบของกระทู้ได้  แบบไม่มีอะไร eroro
#6

อ้างอิงจาก ความคิดเห็น #3ขอเสริมนิดนึงฮะ

ที่คุณอาว่าไม่มีผลลัพธ์ บางทีอาจไม่ได้หมายความว่าที่ฐานข้อมูลไม่มีข้อมูลอยู่

แต่อาจจะมีสาเหตุอื่นๆ ที่ทำให้ไม่มีผลลัพธ์ส่งมาให้ mysql_fetch_array() ทำงานต่อ



ยกตัวอย่างเช่น $dbname = "projact";

บางทีชื่อ DB มันอาจสะกดว่า project ก็ได้




ไม่หรอกค่ะ ถูกแล้วละ
#7

ถ้าขึ้นแบบนี้แสดงว่าที่ผิด น่าจะอยู่ที่ query แล้วละครับ



ทำอย่างที่ผมบอก คือทดสอบ query บน phpmyadmin ใฟ้ใช้งานได้ก่อนเลยละครับ
#8

วิธีการทดสอบอ่ะ อาจารย์ ไม่รู้จริงๆ
#9

อ้างอิงจาก ความคิดเห็น #9วิธีการทดสอบอ่ะ อาจารย์ ไม่รู้จริงๆ


เวรกรรม....



อย่างแรกเลย ให้ echo เอาคำสั่ง sql ที่ใช้งานบนเว็บออกมา



$sql = "select * from topic order by top_id desc";

echo $sql;

$dbquery = mysql_db_query($dbname, $sql);



อย่างที่สอง เอาคำสั่งที่ได้ไปรันบน phpMyAdmin ซึ่งถ้ามีข้อผิดพลาด มันจะบอกถึงความผิดพลาดได้ละเอียดว่า ให้เราแก้ไขและทกดสอบ query จนกระทั่งมันได้ผลลัพท์ถูกต้องตามที่ต้องการ แล้วค่อนำกลับมาใส่ยัง PHP ตามเดิม

#10

ขอบคุณมากค่ะจารย์ 



ที่จริงก็ผิดอยู่ตรงนี้
อ้างอิงจาก ความคิดเห็น #10
อ้างอิงจาก ความคิดเห็น #9วิธีการทดสอบอ่ะ อาจารย์ ไม่รู้จริงๆ


เวรกรรม....



อย่างแรกเลย ให้ 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";
#11

อาจารย์ค่ะ ถ้าใส่ $sql = "select * from topic order by top_id desc";



มันะแสดงแค่กระทู้แรกเท่านั้นอ่ะค่ะ



ไม่ว่าจะมีกี่กระทู้ในฐานข้อมูล แล้วลิ้งมันไปที่กระทู้เดียว ก็คือกระทู้แรกล่าสุด
#12

ในโค้ดเห็นสั่งให้แสดงผลออกมาเพียงครั้งเดียวฮะ

ลองโค้ดแบบนี้ดู




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];



}

 


#13
ความคิดเห็น
ไฟล์อัปโหลด ชนิด jpg, jpeg ขนาดไฟล์ไม่เกิน 1024
^