คำตอบที่ได้รับเลือกจากเจ้าของกระทู้
ความคิดเห็นที่ 3
บรรทัด 1 $sql = mysqli_query($conn,"Select * from company WHERE company =".$_GET["Company_Id"]."");
บรรทัด 2 while($row = mysqli_fetch_array($sql)){
1. error เกิดที่บรรทัด 2 คือ ค่าที่ส่งไปยัง function mysqli_fetch_array() ต้องเป็นค่า result ที่ได้จากการ query แต่ทีนี้ดันเป็นค่า false
เนื่องจากเกิดการ error ในบรรทัด 1
2. จากข้อ 1 สันนิฐานว่า เกิดจากตัวแปร $_GET["Company_Id"] ซึ่งอาจจะไม่มีค่าเข้ามา หรือ เป็นค่าว่าง ดังนั้น sql ที่ได้จะเป็น
Select * from company WHERE company =
3. แนวทางป้องกัน
3.1 ต้องตรวจสอบค่าตัวแปรพวกนี้ก่อนทำการ query
3.2 ควรเขียน sql แบบนี้
$company_id = (! empty($_GET['Company_Id'])) ? (int) $_GET['Company_Id'] : '';
$sql = "Select * from company WHERE company = '{$company_id}';";
// ถ้านำตัวแปร $_GET['Company_Id'] ไปใส่ใน sql เลย อาจจะเกิด error Undefied variable ได้
// กรณี $_GET['Company_Id'] เป็นค่าว่าง หรือ ไม่มีค่า
// ดังนั้น sql ที่ได้จะเป็น Select * from company WHERE company = '';
// ต่อให้ส่งเข้าไป query ในฐานข้อมูลก็ไม่ error / แต่อาจจะไม่ได้ข้อมูลที่ต้องการ
4. สำหรับภาษา php "" และ '' มันต่างกัน ลองดู
$var = 'xxx';
echo '$var';
echo "$var"; => ที่ถูกต้องจะใช้แบบนี้ echo "{$var}"; หรือ $sql = "Select * from company WHERE company = '{$company_id}';";
แล้วมาบอกทำไม
echo "xxxx"; => compiler จะต้องประมวลผลค่าที่อยู่ใน "" ถึงจะ print ออกมา
echo 'xxxx'; => compiler จะ print ค่าใน '' ออกมาเลย (ไม่ต้องประมวลผล)
บรรทัด 2 while($row = mysqli_fetch_array($sql)){
1. error เกิดที่บรรทัด 2 คือ ค่าที่ส่งไปยัง function mysqli_fetch_array() ต้องเป็นค่า result ที่ได้จากการ query แต่ทีนี้ดันเป็นค่า false
เนื่องจากเกิดการ error ในบรรทัด 1
2. จากข้อ 1 สันนิฐานว่า เกิดจากตัวแปร $_GET["Company_Id"] ซึ่งอาจจะไม่มีค่าเข้ามา หรือ เป็นค่าว่าง ดังนั้น sql ที่ได้จะเป็น
Select * from company WHERE company =
3. แนวทางป้องกัน
3.1 ต้องตรวจสอบค่าตัวแปรพวกนี้ก่อนทำการ query
3.2 ควรเขียน sql แบบนี้
$company_id = (! empty($_GET['Company_Id'])) ? (int) $_GET['Company_Id'] : '';
$sql = "Select * from company WHERE company = '{$company_id}';";
// ถ้านำตัวแปร $_GET['Company_Id'] ไปใส่ใน sql เลย อาจจะเกิด error Undefied variable ได้
// กรณี $_GET['Company_Id'] เป็นค่าว่าง หรือ ไม่มีค่า
// ดังนั้น sql ที่ได้จะเป็น Select * from company WHERE company = '';
// ต่อให้ส่งเข้าไป query ในฐานข้อมูลก็ไม่ error / แต่อาจจะไม่ได้ข้อมูลที่ต้องการ
4. สำหรับภาษา php "" และ '' มันต่างกัน ลองดู
$var = 'xxx';
echo '$var';
echo "$var"; => ที่ถูกต้องจะใช้แบบนี้ echo "{$var}"; หรือ $sql = "Select * from company WHERE company = '{$company_id}';";
แล้วมาบอกทำไม
echo "xxxx"; => compiler จะต้องประมวลผลค่าที่อยู่ใน "" ถึงจะ print ออกมา
echo 'xxxx'; => compiler จะ print ค่าใน '' ออกมาเลย (ไม่ต้องประมวลผล)
แสดงความคิดเห็น
ช่วยแก้โค้ด php ทีค่ะมันขึ้นแจ้งเตือนWarning: mysqli_fetch_array() expects parameter 1
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, bool given in C:\xampp\htdocs\smartkk\edit_cate1_2.php on line 19
ส่วนอันนี้โค้ดค่ะ
<?php
$ebits = ini_get('error_reporting');
error_reporting($ebits ^ E_NOTICE);
?>
<?php include "conn.php";?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>แก้ไขข้อมูลผู้ประกอบการ</title>
<link rel="stylesheet" type="text/css" href="css/style.css" />
</head>
<body>
<?php
$sql = mysqli_query($conn,"Select * from company WHERE company =".$_GET["Company_Id"]."");
while($row = mysqli_fetch_array($sql)){
$id = $row['Company_Id'];
$company = $row['Company_Name'];
$f_name = $row['Company_owner_name'];
$l_name = $row['Company_owner_surname'];
$tel = $row['Company_tel'];
$fax = $row['Company_fax'];
$add = $row['Company_address'];
}
?>
<form name="form1" class="form" method="post" action="edit_cate_status.php" enctype="multipart/form-data">
<center><h1>แก้ไขข้อมูลผู้ประกอบการ</h1></center>
<hr>
<table>
<tr>
<td class='t-right'>ID:</td>
<td><input type="text" name="id" id="Company_Id" value="<?php echo $row ['Company_Id'];?>" required /></td>
</tr>
<tr>
<td class='t-right'>ชื่อบริษัท:</td>
<td><input type="text" name="company" id="Company_Name" value="<?php echo $row ['Company_Name'];?>" required /></td>
</tr>
<tr>
<td class='t-right'>ชื่อ:</td>
<td><input type="text" name="f_name" id="Company_owner_name" value="<?php echo $row ['Company_owner_name'];?>" required /></td>
</tr>
<tr>
<td class='t-right'>นามสกุล:</td>
<td><input type="text" name="l_name" id="Company_owner_surname" value="<?php echo $row ['Company_owner_surname'];?>" required /></td>
</tr>
<tr>
<td class='t-right'>เบอร์โทรศัพท์:</td>
<td><input type="text" name="tel" id="Company_tel" value="<?php echo $row ['Company_tel'];?>" required /></td>
</tr>
<tr>
<td class='t-right'>แฟ็กซ์:</td>
<td><input type="text" name="fax" id="Company_fax" value="<?php echo $row ['Company_fax'];?>" required /></td>
</tr>
<tr>
<td class='t-right'>ที่อยู่:</td>
<td><input type="textarea" name="add" id="Company_address" value="<?php echo $row ['Company_address'];?>" required /></td>
</tr>
</table>
</br>
<center>
<input class="submit" name="btnSubmit" type="submit" value="บันทึก"/>
<a href="category1_2.php">
<input type="button" class="cencel" value="ยกเลิก"/>
</a>
</center>
<br/>
</form>
</body>
</html>