thaiall logomy background
coding : northwind.php.
my town
Source : Perl | PHP | ASP | JSP | HTML | HTML5 | JavaScript | Java | COBOL | C++ | MS Access | VBNet | VB | Python | โค้ดดี
File : northwind.php. ID : 9141
Skin : Default | Sons-of-obsidian | Sunburst | Highlighter | Full
<?php
/*
Script_name : Northwind.php
Source_code : http://www.thaiall.com/perlphpasp/source.pl?9141
Version 1.2563-10-24
###########################
- Change comment that it was prepared for 1 line coding
- Use function_exists for mysql_connect
- Test mysqli() on PHP 7.1 and PHP 5.6
- Test mysql_connect() on PHP 5.6 because it failed on PHP 7.1
- Can use php=7 and php=5 to control testing with XAMPP from https://www.apachefriends.org
- Northwind.mdb for mysql in SQL format was shared in http://www.thaiall.com/mysql/northwindwithsqlfile.zip
- Use "mytable" from http://www.thaiall.com/web2/rsp62.css
- Can read about subquery at http://www.dofactory.com/sql/subquery
- Test SQL command - online on https://www.w3schools.com/sql/sql_join_inner.asp
- Test SQL command - online on https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all
- Test SQL command - offline on http://www.alexnolan.net/software/mdb_viewer_plus.htm (Copyright 2004 - 2013)
###########################
Requirement before start this script
1. Download : http://www.thaiall.com/mysql/northwindwithsqlfile.zip
2. ก่อน import ให้สร้าง Database : northwind เพื่อนำเข้าฐานข้อมูลที่กำหนด
3. Import northwindfromphpmyadmin.sql in to MySQL
4. Orders (830), Order Details (2155), Customers(91), Employees(9), Products (77), Categories (8), Suppliers (29), Shippers (3)
*/
/* Section 1 : Configuration */
$host 			= 	"localhost";
$uname 			= 	"root";
$upass 			= 	"";
$db 			= 	"northwind";
/* Section 2 : Variable */
$maxField		= 	10;
$lineperpage	= 	25;
$linenumber		= 	true;
if(isset($_GET["p"])) $currentpage = $_GET["p"]; else $currentpage = 1;
if((int)phpversion() >= 7) $php7 = true; else $php7 = false;
if(isset($_GET["php"])) { if($_GET["php"] == "7") $php7 = true; else $php7 = false; }
$mytable = "<style>	
.mytable { margin-left:auto; margin-right:auto; }
.mytable td {padding:3px; border-bottom: 1px solid #dddddd; }
.mytable tr:nth-child(even) {background-color: #ddffdd}
.mytable tr:nth-child(odd) {background-color: #ffffdd}
.mytable tr:hover {background-color: #ddddff}
</style>";
/* Section 3 : Connection */
if($php7) {
  $connect = new mysqli($host, $uname, $upass, $db);
  if ($connect->connect_error) die("Connection failed: " . $connect->connect_error);
} else {
  if (function_exists('mysql_connect')) {	
    if(!$connect = mysql_connect($host, $uname, $upass)) die("Connect failed : ");
  } else {
    die("function mysql_connect : not exist in PHP");
  }
}
/* Section 4 : SQL Command */
$sql		=	"select * from customers";
$sql_type 	= 	0; /* SQL type */
if(isset($_GET["t"])) {
  $sql_type = $_GET["t"];
  switch ($_GET["t"]) {  
  /* 1 - start here  */
  case "1": $sql="
  select * from orders
  "; break;    
  /* 2 - if we have space in table name, it need to use ascii 96 */
  case "2": $sql="
  select * from `order details`
  "; break;   
  /* 3 - selelct record in range of data */
  case "3": $sql="
  select * from products limit 0,5
  "; break; /* 0 = start at first record, 5 = total record  */  
  /* 4 - order have desc and asc */
  case "4": $sql="
  select * from products order by productname desc
  "; break; /* desc = descending and asc = ascending */  
  /* 5 - where = < > */
  case "5": $sql="
  select * from orders where employeeid = 4
  "; break;  /* criteria = where   */
  /* 6 - another sample of where */
  case "6": $sql="
  select * from orders where freight > 100 and freight < 1000
  "; break; /* freight = ค่าขนส่ง */  
  /* 7 - like = almost same */
  case "7": $sql="
  select * from products where QuantityPerUnit like '%pieces%'
  "; break; /* % = The percent sign represents zero, one, or multiple characters  */
  /* 8 - where to join table */
  case "8": $sql="
  select `order details`.*, products.* from `order details`,products
  where `order details`.productid = products.productid
  "; break;    
  /* 9 - inner join  */
  case "9": $sql="
  select `order details`.*, products.* from
  (`order details` inner join products on `order details`.productid = products.productid)
  "; break;  
  /* 10 - group and alias */
  case "10": $sql="
  select orderid, count(orderid) as cnt from `order details` group by orderid
  "; break;  
  /* 11 - function sum */
  case "11": $sql="
  select orderid, sum(quantity * unitprice) as total
  from `order details` group by orderid
  "; break;    
  /* 12 - inner join and where */
  case "12": $sql="
  select `order details`.*, products.*
  from (`order details` inner join products on `order details`.productid = products.productid)  
  where `order details`.unitprice > 100
  "; break;    
  /* 13 - inneer join and where to merge table */
  case "13": $sql="
  select orders.customerid, `order details`.*, products.*
  from orders, (`order details` inner join products on `order details`.productid = products.productid)
  where `order details`.unitprice > 100 and orders.orderid = `order details`.orderid
  "; break;   
  /* 14 - inner join 2 way */
  case "14": $sql="
  select orders.customerid, `order details`.*, products.*
  from (orders inner join `order details` on orders.orderid = `order details`.orderid
  inner join products on `order details`.productid = products.productid)
  where `order details`.unitprice > 100
  "; break; /* testing : [pass] in phpmyadmin but [fail] in MDBviewerplus */      
  /* 15 - function sum in group by */
  case "15": $sql="
  select orderid, sum(quantity * unitprice) as total from `order details`
  group by orderid
  having sum(quantity * unitprice) > 1000
  "; break;  
  /* 16 - subquery of select */
  case "16": $sql="
  select * from `order details`
  where productid in
  (select productid from products where unitsinstock = 0) order by productid
  "; break;      
  /* 17 - inner join to count >0 and no data of number 6 */
  case "17": $sql="
  select employees.employeeid, count(orders.orderid) as cnt_orderid
  from (employees inner join orders on employees.employeeid = orders.employeeid)
  where orders.shipcountry ='Spain'
  group by employees.employeeid
  "; break;        
  /* 18 - subquery and inner join and count >0 and no data of number 6 */
  case "18": $sql="
  select * from employees where employeeid in
  (select employees.employeeid from
  (employees inner join orders on employees.employeeid = orders.employeeid)
  where orders.shipcountry ='Spain'
  group by employees.employeeid)
  "; break;        
  /* 19 - left join and subquery get >=0 and include number 6 */
  case "19": $sql="
  select emp_left.employeeid, emp_right.cnt_order
  from employees emp_left left join
  (select orders.employeeid, count(orders.orderid) as cnt_order from orders
  where orders.shipcountry ='Spain' group by orders.employeeid) emp_right
  on emp_right.employeeid= emp_left.employeeid
  "; break;        
  }
}	
/* Section 5 : Display data */
if(isset($_GET["sql"]) && $_GET["sql"] == "show") die($sql);
if($php7) {
  $result = $connect->query($sql);
  if ($result->num_rows == 0) die("Query : failed<br/>" . $sql);
  $numField = mysqli_num_fields($result);
  if($numField < $maxField) $maxField = $numField;  
  echo $mytable . "<table class='mytable'><tr style='background-color:black;color:white;'>";
  if($linenumber) echo "<td>no.</td>";      
  $i = 0;
  while ($fieldinfo=mysqli_fetch_field($result)) {
    if ($i++ < $maxField) echo "<td style='text-align:center'>" . $fieldinfo->name . "</td>";
  }
  echo "</tr>";  
  $cntrec=1;
  $totalRec = mysqli_num_rows($result);
  while ($row = mysqli_fetch_array($result)) {
    if ($cntrec >=firstrec($totalRec,$lineperpage,$currentpage) && $cntrec <=lastrec($totalRec,$lineperpage,$currentpage)) {
      echo "<tr>";
      if($linenumber) echo "<td>$cntrec</td>";
      for ($i=0; $i<$maxField ; $i++ ) { echo "<td>$row[$i]</td>"; }
      echo "</tr>";
    }
    $cntrec++;
  }  
  echo "</table><div style='margin-left:auto;margin-right:auto;width:720px;text-align:center;background-color:#ffdddd'>";  
  for($i=1;$i<=totalpage($totalRec,$lineperpage);$i++) {
    if ($i == $currentpage)
      echo "$i : ";
    else
      echo "<a href='?t=$sql_type&p=$i'>$i</a> : ";
  }
  echo "Total $totalRec records";  
  $connect->close();
} else {  
  if (!$result=mysql_db_query($db,$sql)) die("Query : failed<br/>".$sql);
  $numField = mysql_num_fields($result);
  if($numField < $maxField) $maxField = $numField;
  echo "<style>table,th,td {border: 1px solid #dddddd;border-spacing:1px}</style>";
  echo "<table style='border-style:solid;border-width:2px;border-color:blue'><tr>";
  if($linenumber) echo "<td>no.</td>";      
  for ($i=0; $i<$maxField ; $i++ ) {
    echo "<td style='background-color:#ffffdd;text-align:center'>" . mysql_field_name($result, $i) . "</td>";
  }
  echo "</tr>";  
  $cntrec=1;
  $totalRec = mysql_num_rows($result);
  while ($row = mysql_fetch_array($result)) {
    if ($cntrec >=firstrec($totalRec,$lineperpage,$currentpage) && $cntrec <=lastrec($totalRec,$lineperpage,$currentpage)) {
      echo "<tr>";
      if($linenumber) echo "<td>$cntrec</td>";
      for ($i=0; $i<$maxField ; $i++ ) { echo "<td>$row[$i]</td>"; }
      echo "</tr>";
    }
    $cntrec++;
  }  
  /* while ($row = mysql_fetch_assoc($result)) { echo $row["CustomerID"]; } */
  /* while ($row = mysql_fetch_object($result)) { echo $row->{"CustomerID"} หรือ $row->CustomerID  } */
  echo "</table><div style='margin-left:auto;margin-right:auto;width:720px;text-align:center;background-color:#dddddd'>";  
  for($i=1;$i<=totalpage($totalRec,$lineperpage);$i++) {
    if ($i == $currentpage)
      echo "$i : ";
    else
      echo "<a href='?t=$sql_type&p=$i'>$i</a> : ";
  }
  echo "Total $totalRec records";  
  mysql_close($connect);
}
echo '<br/><a href="?t=1">Table:Orders</a> : <a href="?t=0&sql=show">SQL show</a> : <a href="?t=1&php=5">PHP5</a> : <a href="?t=1&php=7">PHP7</a></div>';
/* Section 6 : Page number control */
/*
Sample from http://www.thaiall.com/php/indexo.html#short47
$totalrec = Total record in table such as 60
$lpp = Line per page || Record per page to display such as 25
$page = Page number such as (1:1-25, 2:26-50, 3:51-60)
*/
function totalpage($totalrec,$lpp) { return ceil($totalrec / $lpp); }
function firstrec($totalrec,$lpp,$page) { return (($lpp * ($page - 1) + 1) > $totalrec ? 1 : ($lpp * ($page - 1) + 1)); }
function lastrec($totalrec,$lpp,$page) { return (($lpp * $page) > $totalrec ? $totalrec : ($lpp * $page)); }
?>
จำนวน : 243 บรรทัด
าษาเฮชทีเอ็มแอล (HTML = HyperText Markup Language) คือ ภาษาคอมพิวเตอร์ที่ออกแบบมาเพื่อใช้ในการสร้างเว็บเพจที่เรียกดูผ่านทางเว็บเบราว์เซอร์ (Web Browser) เริ่มพัฒนาโดย ทิม เบอร์เนอรส์ ลี (Tim Berners Lee) ในปัจจุบัน HTML ล่าสุดคือ รุ่น 5 เป็นมาตรฐานหนึ่งของ ISO ซึ่งจัดการโดย World Wide Web Consortium (W3C) ในปัจจุบัน ทาง W3C ผลักดัน รูปแบบของ HTML แบบใหม่ ที่เรียกว่า XHTML รุ่นแรกคือ 1.0 (ม.ค.2543) ซึ่งมีโครงสร้างเป็นแบบ XML (eXtensible Markup Language)
าษาพีเอชพี (PHP Language) คือ ภาษาคอมพิวเตอร์ประเภทโอเพนท์ซอร์ท (Open Source Computer Language) สำหรับพัฒนาเว็บเพจแบบไดนามิก เมื่อเครื่องบริการได้รับคำร้องจากผู้ใช้ก็จะส่งให้กับ ตัวแปลภาษา ทำหน้าที่ประมวลผลและส่งข้อมูลกลับไปยังเครื่องของผู้ใช้ที่ร้องขอ ในรูปเอชทีเอ็มแอล ภาพ หรือแฟ้มดิจิทอลอื่นใด ลักษณะของภาษามีรากฐานคำสั่งมาจากภาษาซี เป็นภาษาที่สามารถพัฒนาให้ใช้งานแบบโต้ตอบกับผู้ใช้ได้
าษาไพทอน (Python Language) คือ ภาษาคอมพิวเตอร์ประเภทโอเพนท์ซอร์ท (Open Source Computer Language) สำหรับพัฒนาแอพพลิเคชั่นโดยไม่ยึดติดกับแพลตฟอร์ม (Platform) และใช้ในงานได้หลายประเภท ทั้งใช้ในการประมวลผลผ่านคอมมานด์ไลน์ หรือเป็นเว็บเพจแบบไดนามิก เมื่อเครื่องบริการได้รับคำร้องจากผู้ใช้ก็จะส่งให้โค้ดให้กับตัวแปลภาษา เพื่อทำหน้าที่ประมวลผลและส่งข้อมูลกลับไปยังเครื่องของผู้ใช้ที่ร้องขอ ในรูปข้อความ เอชทีเอ็มแอล ภาพ หรือแฟ้มดิจิทอลอื่นใด ลักษณะของภาษามีรากฐานคำสั่งมาจากภาษาซี เป็นภาษาที่สามารถพัฒนาให้ใช้งานแบบโต้ตอบกับผู้ใช้ได้ จุดที่แตกต่างกับภาษาอื่น คือ การรวบรวมจุดเด่นของแต่ละภาษามารวมเข้าด้วยกัน
อสคิวแอล (SQL = Structured Query Language) คือ ภาษาสอบถามข้อมูล หรือภาษาจัดการข้อมูลอย่างมีโครงสร้าง มีการพัฒนาภาษาคอมพิวเตอร์ และโปรแกรมฐานข้อมูลที่รองรับมากมาย เพราะจัดการข้อมูลได้ง่าย เช่น MySQL, MariaDB, MsSQL, PostgreSQL หรือ MS Access เป็นต้น สำหรับโปรแกรมฐานข้อมูลที่ได้รับความนิยมคือ MySQL หรือ MariaDB เป็น Open Source ที่ใช้งานได้ทั้งใน Linux และ Windows
วัสดีชาวโลก (Hello World) คือ ผลลัพธ์ครั้งแรกที่นักพัฒนาโปรแกรมนิยมเลือกใช้แสดงผลในโปรแกรมแรกที่เขียนขึ้นเพื่อทดสอบการทำงาน ข้อความนี้ทำให้นึกถึงมนุษย์ต่างดาวที่มาเยือนโลกและกล่าวกับมนุษย์เมื่อพบกันครั้งแรกในภาพยนตร์
ตัวอย่าง Hello World
ปรับปรุงโปรแกรม source.pl : 2565-07-24
Thaiall.com