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 1,330

อาจเป็นเพราะไม่มีผลลัพท์ครับ ให้ตรวจสอบผลลัพท์ก่อนว่ามีหรือไม่ แล้วค่อย 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
^