รบกวนขอคำแนะนำเกี่ยวกับmysqli_fetch_array และSQL JOIN
คือข้อมูลเก็บที่2ตาราง
1.data_project ข้อมูลของโครงการที่ต้องการจะนำมาแสดง
2.data_participan เก็บid_project และ id(ของuser)
id_project เป็น primary key ของตารางdata_project
id เป็น primary key ของตารางที่เอาไว้เก็บข้อมูลส่วนตัวของผู้ใช้
ตารางdata_participan ถูกสร้างขึ้นมาเพื่อเอาไว้เก็บว่าผู้ใช้ลงทะเบียนในโครงการใดบ้าง
ทีนี้หนูคิดว่าปัญหาน่าจะอยู่ที่sqlที่หนูเขียน
$result = mysqli_query($conn,"select * data_participant where id = '$userid' RIGHT JOIN data_project ON data_participant.id_project = data_project.id_project ");
แต่ก็พยายามดูจุดบกพร่องแล้วนะคะ เปรียบเทียบในเน็ต หาดูวิธีเขียนจากบทความ เนื่องจากว่าโปรเจคนี้เป็นโปรเจคแรกที่ใช้คำสั่งjoin มาเขียนในsql
หรือข้อผิดพลาดจะอยู่ mysqli_fetch_array($result); รึป่าวก็ไม่แน่ใจแต่ในใจลึกๆคิดว่าน่าจะบกพร่องที่$resultมากกว่า
นี้คือโค้ดที่มีปัญหาค่ะ MyJoinProject.php
<!DOCTYPE html">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div class="content">
<?php include "connect.php"; ?>
<?php
function cutstr($str, $maxstr='', $holder='') {
if (strlen($str) > $maxstr) {$str = iconv_substr($str, 0, $maxstr, "UTF-8") . $holder;}
return $str;}?>
<table>
<?php
session_start(); //รับค่าไอดียุเซอจากตอนล้อกอิน
echo $_SESSION['userid'];//รับค่าไอดียูสเซอจากตอนล้อกอิน2
$userid = $_SESSION['userid'];
$result = mysqli_query($conn,"select * data_participant RIGHT JOIN data_project ON data_participant.id_project = data_project.id_project where id = '$userid' ");
$i=0; // กำหนดให้ตัวแปร i = 0
while($row = mysqli_fetch_array($result,MYSQLI_ASSOC)) {
$id_article[$i]['id_project'] = $row['id_project'];
$author[$i]['leader'] = $row['leader'];
$title[$i]['nameproject'] = $row['nameproject'];
$article[$i]['detail'] = $row['detail'];
echo "<tr>";
echo "<td>";
echo "<div id='title'><h2>
<a href='show_article_full.php?id_project=$id_article'>
$title
</a></h2></div>";
echo "<div id='detail'>".cutstr($article,'300','...')."</div>";
echo "<div id='float_r'>
<a href='show_article_full.php?id_project=$id_article'>
Read More>>
</a></div>";
echo "</td>";
echo "</tr>";
$i++; //ก็ให้บวกเพิ่มไปจนเท่ากับ ตัวแปร num
}
?>
</table>
</div>
</body>
</html>
ดัดแปลงมาจากโค้ดนี้ค่ะ เป็นโค้ดที่เอาไว้แสดงโครงงานทั้งหมดที่มีในตาราง
<!DOCTYPE html">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div class="content">
<?php include "connect.php"; ?>
<?php
function cutstr($str, $maxstr='', $holder='') {
if (strlen($str) > $maxstr) {
$str = iconv_substr($str, 0, $maxstr, "UTF-8") . $holder;
}
return $str;
}
?>
<table>
<?php
//$sql = "select * from data_project order by id_project DESC";
$result = mysqli_query($conn,'select * from data_project order by id_project DESC');
$num = mysqli_num_rows($result);//นับแถวทั้งหมดในตารางออกมา
$i=0; // กำหนดให้ตัวแปร i = 0
while($i < $num){ //ถ้า ตัวแปร i น้อยกว่า ตัวแปร num
$row = mysqli_fetch_array($result);
$id_article = $row['id_project'];
$author = $row['leader'];
$title = $row['nameproject'];
$article = $row['detail'];
echo "<tr>";
echo "<td>";
echo "<div id='title'><h2>
<a href='show_article_full.php?id_project=$id_article'>
$title
</a></h2></div>";
echo "<div id='detail'>".cutstr($article,'300','...')."</div>";
echo "<div id='float_r'>
<a href='show_article_full.php?id_project=$id_article'>
Read More>>
</a></div>";
echo "</td>";
echo "</tr>";
$i++; //ก็ให้บวกเพิ่มไปจนเท่ากับ ตัวแปร num
}
?>
</table>
</div>
</body>
</html>
----แจ้งเตือนที่ขึ้น----
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in H:\XAMMP\htdocs\_endprojectSW_OOP\MyJoinProject.php on line 25
ตารางที่เอาไว้เก็บข้อมูลโครงการ
ตารางที่เอาไว้เก็บผู้ร่วมโครงการ เก็บไอดีโครงการ และ ไอดียูเซอร์ผู้ร่วมโครงการ
อันนี้เป็นตัวอย่างเมื่อโค้ดMyJoinProjectสำเร็จค่ะ แสดงชื่อโครงการและรายละเอียดตัวอักษร300ตัว แสดงเฉพาะโครงการที่ยูเซอร์เข้าร่วม
พยายามมาหลายทางแล้วค่ะตอนแรกไม่ได้ใส่ลูปwhile แต่ใส่แล้วแจ้งเตือนก็ยังขึ้นเหมือนเดิมค่ะ ปรึกษาหลายคนแล้ว ลองแก้เองตามทางแก้ในเน็ตแล้วก็ยังไม่ได้ค่ะ ให้อาจารย์ช่วยดูให้อาจารย์ก็บอกว่าเท่าที่ดูSQLก็ไม่มีปัญหาอะไร แต่อาจารย์ยุ่งมากค่ะเลยยังแก้ไม่ได้ เลยอยากจะให้พี่ๆช่วยดูอีกแรงนึงค่ะ ว่าควรแก้อะไรตรงไหน เพราะดูทางแก้ทั้งเว็ปไทยเว็ปต่างประเทศก็ยังแก้ไม่ได้เลยTag : PHP, MySQL, Ms SQL Server 2016, jQuery, XAMPP
Date :
2019-11-23 21:45:10
By :
TleCena
View :
2890
Reply :
7
ตอบเพิ่มเติม จาก sql statement เดาว่า...
Code (SQL)
select * data_participant
น่าจะขาด FROM ไปนะ
Code (SQL)
// SELECT `columns` FROM `table`;
select * FROM data_participant
ยังไงก็อย่าลืมเก็บเกี่ยววิธี debug error ด้วยตัวเองอย่างที่บอกข้างบนด้วย มันจะทำให้ง่ายและไวกว่ามานั่งรอคำตอบจากคนอื่น เป็นประโยชน์กับตัวเองมากกว่า
แล้วก็การเขียนคำสั่ง sql เมื่อก่อนผมก็ไม่ได้สังเกตุหรอก แต่พบว่าการเน้นย้ำตัวใหญ่เล็กและการใช้ backtick (`) จะช่วยงานได้ดีกว่ามาก เพราะทำให้ดูง่ายว่าอะไรคือคำสั่ง อะไรคือชื่อตารางหรือคอลัมน์
ตัวอย่างเช่น
Code (SQL)
SELECT * FROM `table` WHERE `id` = 1 AND `name` LIKE '%someone%';
แบบนี้มันดูง่าย เวลาไล่อ่านหาข้อผิดพลาดจะเห็นได้เร็วมาก ถ้าเขียนตัวเล็กหมด (เมื่อก่อนผมก็ใช้แบบนั้น) มันจะลายตาไปหมด เวลาไล่หาข้อผิดพลาดแล้วมึนเอง.!?!
การใช้ backtick จะช่วยป้องกัน error จากการใช้คำสงวน (reserved words) ของ mysql ได้ด้วย
ประวัติการแก้ไข 2019-11-24 00:29:36 2019-11-24 00:31:01
Date :
2019-11-24 00:25:52
By :
mr.v
ลองแก้ไขตามที่แนะนำแล้วนะคะมีแจ้งเตือนใหม่ขึ้นมาค่ะ
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'data_participant RIGHT JOIN data_project ON data_participant.id_project = data_p' at line 1
<!DOCTYPE html">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div class="content">
<?php include "connect.php"; ?>
<?php
function cutstr($str, $maxstr='', $holder='') {
if (strlen($str) > $maxstr) {$str = iconv_substr($str, 0, $maxstr, "UTF-8") . $holder;}
return $str;}?>
<table>
<?php
session_start(); //รับค่าไอดียุเซอจากตอนล้อกอิน
echo $_SESSION['userid'];//รับค่าไอดียูสเซอจากตอนล้อกอิน2
$userid = $_SESSION['userid'];
$result = mysqli_query($conn,"select * data_participant RIGHT JOIN data_project ON data_participant.id_project = data_project.id_project where id = '$userid' ");
if (!is_object($result)) {
die(mysqli_error($conn));// แก้ตัวแปร $link ให้ถูกต้องเอาเอง
}
$i=0; // กำหนดให้ตัวแปร i = 0
if (is_object($result)) {
while($row = mysqli_fetch_array($result)) {
$id_article[$i]['id_project'] = $row['id_project'];
$author[$i]['leader'] = $row['leader'];
$title[$i]['nameproject'] = $row['nameproject'];
$article[$i]['detail'] = $row['detail'];
echo "<tr>";
echo "<td>";
echo "<div id='title'><h2>
<a href='show_article_full.php?id_project=$id_article'>
$title
</a></h2></div>";
echo "<div id='detail'>".cutstr($article,'300','...')."</div>";
echo "<div id='float_r'>
<a href='show_article_full.php?id_project=$id_article'>
Read More>>
</a></div>";
echo "</td>";
echo "</tr>";
$i++; //ก็ให้บวกเพิ่มไปจนเท่ากับ ตัวแปร num
}}
?>
</table>
</div>
</body>
</html>
มีปัญหาที่SQLจริงๆค่ะ ยังไงจะลองเช็คการเขียนSQLดูนะคะ
Date :
2019-11-24 01:30:23
By :
TleCena
บันทัดที่ 21 ตามความเห็น 2 ที่ mr.v แนะนำครับ
Date :
2019-11-24 02:07:47
By :
NewbiePHP
แก้ได้เรียบร้อยแล้วค๊าาา ทำตามที่คุณ mr.v ขอบคุณ คุณNewbieXYZ ด้วยนะคะที่ช่วยมาย้ำเตือนอีกรอบ
โค้ดหลังแก้ไขค่ะ
<!DOCTYPE html">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div class="content">
<?php include "connect.php"; ?>
<?php
function cutstr($str, $maxstr='', $holder='') {
if (strlen($str) > $maxstr) {$str = iconv_substr($str, 0, $maxstr, "UTF-8") . $holder;}
return $str;}?>
<table>
<?php
session_start(); //รับค่าไอดียุเซอจากตอนล้อกอิน
echo $_SESSION['userid'];//รับค่าไอดียูสเซอจากตอนล้อกอิน2
$userid = $_SESSION['userid'];
$result = mysqli_query($conn,"select * FROM data_participant RIGHT JOIN data_project ON data_participant.id_project = data_project.id_project where id = '$userid' ");
if (!is_object($result)) {
die(mysqli_error($conn));// แก้ตัวแปร $link ให้ถูกต้องเอาเอง
}
$i=0; // กำหนดให้ตัวแปร i = 0
if (is_object($result)) {
while($row = mysqli_fetch_array($result)) {
$id_article = $row['id_project'];
$author = $row['leader'];
$title = $row['nameproject'];
$article = $row['detail'];
echo "<tr>";
echo "<td>";
echo "<div id='title'><h2>
<a href='show_article_full.php?id_project=$id_article'>
$title
</a></h2></div>";
echo "<div id='detail'>".cutstr($article,'300','...')."</div>";
echo "<div id='float_r'>
<a href='show_article_full.php?id_project=$id_article'>
Read More>>
</a></div>";
echo "</td>";
echo "</tr>";
$i++; //ก็ให้บวกเพิ่มไปจนเท่ากับ ตัวแปร num
}}
?>
</table>
</div>
</body>
</html>
Date :
2019-11-24 14:40:54
By :
TleCena
Load balance : Server 03