File : mysql_update357.txt. ID : 9144
Skin : Default | Sons-of-obsidian | Sunburst | Highlighter | Frame
คำอธิบายโปรแกรม
ารเชื่อมต่อกับ mysql ด้วย php มีหลายรูปแบบให้เลือกใช้ บางแบบถูกบังคับด้วยเงื่อนไขของรุ่น เช่น mysql_connect ที่จะใช้ไม่ได้บน php7 แต่ใช้ได้บน php5 ส่วน mysqli ก็ใช้ได้แบบมุมมอง object กับไม่เป็น การ fetch ก็มีถึง 3 แบบ คือ object, assoc และ array ซึ่งเขียนเหมือนกันเมื่อใช้ตัวแปลภาษาต่างกัน จึงทำตัวอย่าง 9144 ให้เรียกใช้คำสั่งผ่านฟังก์ชัน โดยแยกโค้ด #coding ส่วนของ process กับ database function ออกจากกัน และมาตรวจเงื่อนไขในฟังก์ชันว่าปัจจุบันใช้ตัวแปลรุ่นใด หรือเลือกเชื่อมแบบใด ก็จะทำงานไปตามนั้น ซึ่งขยายตัวอย่างมาจาก 9137 และ 9143 ที่ขยับโค้ดให้เหมาะกับแต่ละสภาพแวดล้อม ทั้งในห้องเรียน ในหอพัก หรือในฟรีเว็บโฮสติ้ง
<?php 
session_start();
ini_set('error_reporting', E_WARNING);  // E_ALL : get deprecated
ini_set('display_errors', 'on');
/* ปรับปรุง 16 พฤศจิกายน 2562
- เผยแพร่ใน http://www.thaiall.com/source 
- เริ่มต้นต้องสร้างตารางก่อน ดูที่ตัวแปร $create_sql
- ตัวอย่างที่ https://blog.ghost3k.net/articles/php/89/updating-mysql-code-to-mysqli-in-php
*/
# ส่วนกำหนดค่าเริ่มต้นของระบบ
$host     = "localhost";
$db       = "test";  
$tb       = "test"; 
$user     = "root"; // รหัสผู้ใช้ ให้สอบถามจากผู้ดูแลระบบ
$password = "";    // รหัสผ่าน ให้สอบถามจากผู้ดูแลระบบ
$create_sql = "create table test (id varchar(20),  ns varchar(20), salary varchar(20))
engine = InnoDB default charset=utf8 collate=utf8_unicode_ci;";
$drop_sql = "drop table test";
if (isset($_REQUEST{'action'})) $act = $_REQUEST{'action'}; else $act = "";
# จัดการ session ของ php7
if (isset($_REQUEST["v7"])) {
  $_SESSION["v7"] = false;	
  if($_REQUEST["v7"] == "obj") $_SESSION["v7"] = true;
}	
# ส่วนสร้าง และลบตาราง
if (strlen($act) > 0 && ($act == "createtable" || $act == "droptable")) {
  doconnect();
  if($act == "droptable") doquery($drop_sql); else  doquery($create_sql);  
  footer("$act : completely<br/><a href='?'>back</a>");
}  
# ส่วนแสดงผลหลัก ทั้งปกติ และหลังกดปุ่ม del หรือ edit
if (strlen($act) == 0 || $act == "del" || $act == "edit") {
  doconnect();
  doquery("select * from test");
  echo "<table>";
  while (dofetch("object")) {
    if (isset($_REQUEST{'id'}) && $_REQUEST{'id'}  == getfld("object","id")) $chg = " style='background-color:#f9f9f9"; else $chg = " readonly style='background-color:#ffffdd";
    echo "<tr><form action='' method=post>
      <td><input name=id size=5 value='". getfld("object","id") . "' style='background-color:#dddddd' readonly></td>
      <td><input name=ns size=40 value='". getfld("object","ns") . "' $chg'></td>
      <td><input name=salary size=20 value='". getfld("object","salary") . "' $chg;text-align:right'></td>
      <td>";
    if (isset($_REQUEST{'id'}) && $_REQUEST{'id'} == getfld("object","id")) {
      if ($act == "del") echo "<input type=submit name=action value='del : confirm' style='height:40;background-color:yellow'>";
      if ($act == "edit") echo "<input type=submit name=action value='edit : confirm' style='height:40;background-color:#aaffaa'>";
    } else {
      echo "<input type=submit name=action value='del' style='height:26'> <input type=submit name=action value='edit' style='height:26'>";
    }
    echo "</td></form></tr>";
  }	
  echo "<tr><form action='' method=post><td><input name=id size=5></td><td><input name=ns size=40></td><td><input name=salary size=20></td><td><input type=submit name=action value='add' style='height:26'></td></tr></form></table>";
  if (isset($_SESSION["msg"])) echo "<br>".$_SESSION["msg"]; // แสดงผลค่านี้ หลังการ Refresh
  $_SESSION["msg"] = "";  // เมื่อแสดงผลแล้ว ก็ล้างค่านี้จากตัวแปร msg
  footer(null);
} 
# ส่วนเพิ่มข้อมูล
if ($act == "add") {
  doconnect();  
  doquery("insert into $tb values('". $_REQUEST{'id'} . "','". $_REQUEST{'ns'} . "','". $_REQUEST{'salary'} . "')");
  if ($r) $_SESSION["msg"] = "insert : completely";
  footer("refresh");
}
# ส่วนลบข้อมูล
if ($act == "del : confirm") {
  doconnect();
  doquery("delete from $tb where id ='". $_REQUEST{'id'} . "'");
  if ($r) $_SESSION["msg"] = "delete : completely";  
  footer("refresh");
}
# ส่วนแก้ไขข้อมูล
if ($act == "edit : confirm") {
  doconnect();
  doquery("update $tb set ns ='". $_REQUEST{'ns'} . "', salary ='". $_REQUEST{'salary'} . "' where id =" . $_REQUEST{'id'});  
  footer("refresh");
}
# รวมฟังก์ชันด้านล่างนี้
function footer($msg){
  global $conn;	
  if($msg == "refresh") {
     header("Location: ". $_SERVER["SCRIPT_NAME"]); 
     if (isset($_SESSION["v7"]) && $_SESSION["v7"] == false) 	 
	   mysqli_close($conn);
     else $conn->close();	 
     exit;
  }	
  echo "$msg<br/><a href=?action=createtable>create table</a> : <a href=?action=droptable>drop table</a>";  
  echo "<br/>version " . (int)phpversion() . " : ";  
  if ((int)phpversion() >=7) {
    if (isset($_SESSION["v7"]) && $_SESSION["v7"] == false) 
      echo "<a href=?v7=obj>mysqli object</a> : mysqli no object";
    else echo "mysqli object : <a href=?v7=noobj>mysqli no object</a>";  
  }  
  exit;
}	
function doconnect(){
  global $conn,$host,$user,$password,$db;	
  if ((int)phpversion() >=7) {  
    if (isset($_SESSION["v7"]) && $_SESSION["v7"]  == false) {
      $conn = mysqli_connect($host, $user, $password, $db);	
      if (!$conn) footer("Connection failed: " . mysqli_connect_error());   
    } else {
      $conn = new mysqli($host, $user, $password, $db);	
      if ($conn->connect_error) footer("Connection failed: " . $conn->connect_error);   
    }  
  } else {
    $conn = mysql_connect($host, $user, $password);	
    if (!$conn) footer("Connection failed: " . mysql_error());   	  
  }	  
}
function doquery($myq){
  global $r,$conn,$db;
  if ((int)phpversion() >=7) {    
    if (isset($_SESSION["v7"]) && $_SESSION["v7"]  == false) {
      $r = mysqli_query($conn,$myq);   
    } else {
      $r = $conn->query($myq); 
    }  
    if (!$r)  footer("Query : Fail<br/>$myq");
  } else {
      $r = mysql_db_query($db,$myq);   	  
     if (!$r)  footer("Query : Fail<br/>$myq");	  
  }	  
}	
function dofetch($t) {
  global $o, $r;	 // object, assoc, array
  if ((int)phpversion() >=7) {  
    if($t == "object") return ($o = $r->fetch_object());
  } else {
    if($t == "object") return ($o = mysql_fetch_object($r));
  }	
}
function getfld($t,$fld) {
  global $o; // การอ้างอิงเขตข้อมูลเหมือนกันทั้งใน php7 และ php5 	
  if($t == "object") return ($o->{$fld}); 
}
?>