PHP Ionic Angular Phonegap AJAX Javascript CSS MySQL jQuery Forum


ปักหมุด รวมคำตอบที่อาจจะมีประโยชน์

ถาม-ตอบ แนะนำไอเดียว โค้ดตัวอย่าง แนวทาง วิธีแก้ปัญหา ปักหมุด รวมคำตอบที่อาจจะมีประโยชน์

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


โดย:  Ninenik IP: 1.46.71.xxx วันที่: 26-03-2017 เวลา: 03:49:22

  ข่าวประกาศ หรือกระทู้ถามนี้ ปิดการถาม-ตอบ ไม่สามารถตอบกลับได้



 ความคิดเห็นที่ 1
จากกระทู้ http://www.ninenik.com/forum_view_2181_1.html

การ insert แล้วข้อมูลไม่เข้าใน database ต้องไล่การทำงานตามลำดับ
หน้ารับค่า แบบนี้เป็นแนวทาง
 

ตัวอย่างไฟล์ dbconnect.php

<?php  
$mysqli = new mysqli("localhost", "root","","test");  
/* check connection */  
if ($mysqli->connect_errno) {  
    printf("Connect failed: %s\n", $mysqli->connect_error);  
    exit();  
}  
if(!$mysqli->set_charset("utf8")) {  
    printf("Error loading character set utf8: %s\n", $mysqli->error);  
    exit();  
}  
 

- ตรวจสอบว่ามีการเรียกใช้การเชื่อมต่อกับ database แล้วหรือไม่

 
<?php  
session_start();  
require_once("dbconnect.php");  
?>
 
 

- เข้าเงื่อนไข การรับค่าหรือไม่ เช่น ส่งค่ามา มีการการเช็คค่า และเข้าเงื่อนไขหรือไม่ 

 
 
<?php
if(isset($_POST['btn_submit']) && $_POST['btn_submit']!=""){
	echo "check submit";
}
?>
 
 

- ดูว่าชนิดของตัวแปรที่ส่งมา กับเงื่อนไขเป็นตัวแปรประเภทเดียวกันหรือไม่

เช่น ส่งแบบ GET ต้องเช็คที่ตัวแปร $_GET['xxxx'] หรือ ส่งแบบ POST ต้องเช็คด้วยตัวแปร $_POST

 
<form name="form1" method="post" action="">
  <input type="text" name="data" id="data">
  <input type="submit" name="btn_submit" id="btn_submit" value="Submit">
</form>
<?php
if(isset($_POST['btn_submit']) && $_POST['btn_submit']!=""){
	echo "check submit";
}
?>
 
หรือ
 
<form name="form1" method="get" action="">
  <input type="text" name="data" id="data">
  <input type="submit" name="btn_submit" id="btn_submit" value="Submit">
</form>
<?php
if(isset($_GET['btn_submit']) && $_GET['btn_submit']!=""){
	echo "check submit";
}
?>
 

- เช็คว่าค่าที่ส่งมา ส่งมาครบหรือไม่ รูปแบบตัวแปรหรือชนิดของตัวแปรถูกต้องหรือไม่

 
<?php
if(isset($_POST['btn_submit']) && $_POST['btn_submit']!=""){
	echo "<pre>";
	print_r($_POST); // ตัวแปร POST ส่งอะไรมาบ้าง ส่งมาครับไหม
	print_r($_GET); // ตัวแปร _GET ส่งอะไรมาบ้าง ส่งมาครับไหม	
	echo "</pre>";
}
?>

- หลัง submit ข้อมูลตรวจสอบคำสั่ง sql ว่าเป็นค่าที่ถูกต้องหรือไม่

 
<?php
session_start();  
require_once("dbconnect.php");  
if(isset($_POST['btn_submit']) && $_POST['btn_submit']!=""){
	$sql="
	INSERT INTO tbl_demo SET
	data='".$_POST['data']."'
	";
	echo $sql; // แสดงคำส่ัง sql ว่ารูปแบบถูกต้องหรือไม่
	exit; // หยุดทำงาน
	$mysqli->query($sql);
}
?>
 

- กรณีคำสั่ง sql มีรูปแบบไม่ถูกต้องหรือต้องการป้องกัน sql injection สามารถเพิ่มคำสั่งป้องกันเพิ่มเติมได้

 
<?php
session_start();  
require_once("dbconnect.php");  
if(isset($_POST['btn_submit']) && $_POST['btn_submit']!=""){
	
	// ป้องกัน sql injection อย่างง่าย สามารถไปสร้างเป็นฟังก์ชั่เพื่อรียกใช้งานได้
	$_POST['data'] = $mysqli->real_escape_string($_POST['data']); 
	
	$sql="
	INSERT INTO tbl_demo SET
	data='".$_POST['data']."'
	";
	echo $sql; // แสดงคำส่ัง sql ว่ารูปแบบถูกต้องหรือไม่
	exit; // หยุดทำงาน
	$mysqli->query($sql);
}
?>
 

- เช็คว่าคำสั่ง sql นั้นทำการคิวรี่ สำเร็จหรือไม่

 
<?php
session_start();  
require_once("dbconnect.php");  
if(isset($_POST['btn_submit']) && $_POST['btn_submit']!=""){
	
	// ป้องกัน sql injection อย่างง่าย สามารถไปสร้างเป็นฟังก์ชั่เพื่อรียกใช้งานได้
	$_POST['data'] = $mysqli->real_escape_string($_POST['data']); 
	
	$sql="
	INSERT INTO tbl_demo SET
	data='".$_POST['data']."'
	";
	$result = $mysqli->query($sql);
	if($result){
		echo "query success";	
	}
}
?>

บางกรณีการส่งข้อมูลจำนวนมากๆ อาจจะถูกจำกัดด้วยตัวจัดการ php 
เช่น php_value post_max_size เราสามารถปรับแค่โดยการกำหนดใน php.ini ได้

 


โดย:  Ninenik IP: 1.46.71.xxx วันที่: 26-03-2017
 ความคิดเห็นที่ 2

แนวทางการตรวจสอบการเชื่อมต่อกับฐานข้อมูลบน server ด้วย mysqli

 
ตัวอย่างไฟล์เชื่อมต่อฐานข้อมูล
 

ไฟล์ dbconnect.php

 
<?php  
$mysqli = new mysqli("localhost", "ชื่อ user","รหัสผ่าน","ชื่อ database");  
/* check connection */ 
if ($mysqli->connect_errno) {  
    printf("Connect failed: %s\n", $mysqli->connect_error);  
    exit();  
}  
if(!$mysqli->set_charset("utf8")) {  
    printf("Error loading character set utf8: %sn", $mysqli->error);  
    exit();  
}
 

- ตรวจสอบว่ามีการเรียกใช้การเชื่อมต่อกับ database แล้วหรือไม่

<?php  
session_start();  
require_once("dbconnect.php");  
?>
 
หากเราไม่สามารถเชื่อมต่อฐานข้อมูลได้ เงื่อนไขจะเข้า  if ($mysqli->connect_errno) {  
ให้ตรวจสอบว่า ใส่ชื่อ user , รหัสผ่าน หรือชื่อ database ถูกต้องแล้วหรือไม่
 
 

- ตรวจสอบการคิวรี่ข้อมูลว่าทำสำเร็จหรือไม่ และตรวจสอบว่ามีข้อมูลหรือไม่

<?php
$sql = "
SELECT * FROM tbl_a
";
$result = $mysqli->query($sql);
if($result && $result->num_rows>0){  // คิวรี่ข้อมูลสำเร็จหรือไม่ และมีรายการข้อมูลหรือไม่

}
?>
 

- ตรวจสอบว่าคิววรี่สำเร็จและถ้ามีข้อมูล ให้แสดงรายการข้อมูลนั้น กรณีมีรายการเดียว

<?php
$sql = "
SELECT * FROM tbl_a
";
$result = $mysqli->query($sql);
if($result && $result->num_rows>0){  // คิวรี่ข้อมูลสำเร็จหรือไม่ และมีรายการข้อมูลหรือไม่
	$row = $result->fetch_array();
	echo $row['mydata'];
}
?>
 

- ตรวจสอบว่าคิววรี่สำเร็จและถ้ามีข้อมูล ให้แสดงรายการข้อมูลนั้น กรณีมีหลายรายการ

<?php
$sql = "
SELECT * FROM tbl_a
";
$result = $mysqli->query($sql);
if($result && $result->num_rows>0){  // คิวรี่ข้อมูลสำเร็จหรือไม่ และมีรายการข้อมูลหรือไม่
	while($row = $result->fetch_array()){ // วนลูปแสดงรายการ
		echo $row['mydata'];
	}	
}
?>
 

- ตรวจสอบว่าคิววรี่สำเร็จและถ้ามีข้อมูลให้อัพเดท หรือถ้าไม่มีข้อมูล ให้เพิ่มรายการใหม่

<?php
$sql = "
SELECT a_id,a_name FROM tbl_a
";
$result = $mysqli->query($sql);
if($result && $result->num_rows>0){  // คิวรี่ข้อมูลสำเร็จหรือไม่ และมีรายการข้อมูลหรือไม่
	$row = $result->fetch_array();
	$sql_update="
	UPDATE tbl_a SET 
	a_name='new value'
	WHERE a_id='".$row['a_id']."'
	";
	$mysqli->query($sql_update);	
}else{
	$sql_insert="
	INSERT INTO tbl_a SET
	a_name='new a_name' 
	";  
	$mysqli->query($sql_insert);
}
?>
 

- ตรวจสอบว่าการ UPDATE ข้อมูลมีการคิวรี่หรือไม่ และมีการเปลี่ยนแปลงค่าเกิดขึ้นหรือไม่

<?php
$sql = "
SELECT a_id,a_name FROM tbl_a
";
$result = $mysqli->query($sql);
if($result && $result->num_rows>0){  // คิวรี่ข้อมูลสำเร็จหรือไม่ และมีรายการข้อมูลหรือไม่
	$row = $result->fetch_array();
	$sql_update="
	UPDATE tbl_a SET 
	a_name='new value'
	WHERE a_id='".$row['a_id']."'
	";
	if($mysqli->query($sql_update)){ // มีการคิวรี่อัพเพทข้อมูล
		if($mysqli->affected_rows>0){ // การคิวรี่มีการเปลี่ยนแปลงค่า
			
		}else{ // การคิวรี่ไม่มีการเปลี่ยนแปลงค่า เช่น กรณีเราอัพเดทค่าเดิม
			
		}
	}
}else{
	$sql_insert="
	INSERT INTO tbl_a SET
	a_name='new a_name' 
	";  
	$mysqli->query($sql_insert);
}
?>
 

- ตรวจสอบว่าการ INSERT ข้อมูลใหม่ มีการคิวรี่เกิดขึ้นหรือไม่ แล้วเกิดการเพิ่มรายการขึ้นหรือไม่

<?php
$sql = "
SELECT a_id,a_name FROM tbl_a
";
$result = $mysqli->query($sql);
if($result && $result->num_rows>0){  // คิวรี่ข้อมูลสำเร็จหรือไม่ และมีรายการข้อมูลหรือไม่
	$row = $result->fetch_array();
	$sql_update="
	UPDATE tbl_a SET 
	a_name='new value'
	WHERE a_id='".$row['a_id']."'
	";
	if($mysqli->query($sql_update)){ // มีการคิวรี่อัพเพทข้อมูล
		if($mysqli->affected_rows>0){ // การคิวรี่มีการเปลี่ยนแปลงค่า
			
		}else{ // การคิวรี่ไม่มีการเปลี่ยนแปลงค่า เช่น กรณีเราอัพเดทค่าเดิม
			
		}
	}
}else{
	$sql_insert="
	INSERT INTO tbl_a SET
	a_name='new a_name' 
	";  
	$result = $mysqli->query($sql_insert);
	if($result && $mysqli->affected_rows>0){ // มีการคิวรี่และมีการเพิ่มรายการ
		
	}
}
?>
 

- ตรวจสอบว่า primary key หรือ ID ของรายการที่เพิ่มมาใหม่ มีค่าคืออะไร

<?php
$sql = "
SELECT a_id,a_name FROM tbl_a
";
$result = $mysqli->query($sql);
if($result && $result->num_rows>0){  // คิวรี่ข้อมูลสำเร็จหรือไม่ และมีรายการข้อมูลหรือไม่
	$row = $result->fetch_array();
	$sql_update="
	UPDATE tbl_a SET 
	a_name='new value'
	WHERE a_id='".$row['a_id']."'
	";
	if($mysqli->query($sql_update)){ // มีการคิวรี่อัพเพทข้อมูล
		if($mysqli->affected_rows>0){ // การคิวรี่มีการเปลี่ยนแปลงค่า
			
		}else{ // การคิวรี่ไม่มีการเปลี่ยนแปลงค่า เช่น กรณีเราอัพเดทค่าเดิม
			
		}
	}
}else{
	$sql_insert="
	INSERT INTO tbl_a SET
	a_name='new a_name' 
	";  
	$result = $mysqli->query($sql_insert);
	if($result && $mysqli->affected_rows>0){ // มีการคิวรี่และมีการเพิ่มรายการ
		$insert_userID = $mysqli->insert_id; // primary key ของรายการที่เพิ่มเข้ามาใหม่
	}
}
?>
 

- การตรวจสอบรายการที่มีการเปลี่ยนแปลงว่ามีกี่แถวที่มีการเปลี่ยนแปลง หรือมีข้อมูลกี่แถว

SELECT ใช้ 
 
$result->num_rows>0
 
กรณ๊คำสั่ง INSERT UPDATE DELETE ใช้
 
$mysqli->affected_rows
 

- รูปแบบการ SELECT ข้อมูล ใช้คำสั่งในกรณีต้องการข้อมูลหรือชุดข้อมูลในรูปแบบต่างๆ กันสามารถ
กำหนดได้ดังนี้ มีให้เลือก 4 แบบ

$result->fetch_assoc() // ส่งค่ากลับมาแบบ array key เป็นชื่อ field
$result->fetch_row() //  ส่งค่ากลับมาแบบ array key เป็น index เริ่มที่ 0,1 ....
$result->fetch_array() // ส่งค่าทั้งแบบ assoc และ row 
$result->fetch_object() // ส่งค่ากลับมาแบบ object 
 

- การปิดการเชื่อมต่อ mysql ใช้คำสั่ง แต่โดยปกติแล้ว มีคำสั่งสุดสิ้นสุดลง การปิดการเชื่อมต่อ
จะเกิดขึ้นเองโดยอัตโนมัติ เราอาจจะใช้หรือไม่ก็ได้

 
$mysqli->close(); //  ปิดการเชิ่อมต่อ server database mysql


 


โดย:  Ninenik IP: 1.46.205.xxx วันที่: 16-04-2017