A-AA+then

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

1,314
    <?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
    
    
    
    แก้ยังไงดีค่ะ  เป็นหน้าที่ไว้แสดงข้อมุลในรายละเอียดคำถาม ในหน้าที่ไว้ใช้ตอบคำถามเว็บบอร์ดอ่าค่ะ

13 ความคิดเห็น

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