วันจันทร์ที่ 4 มิถุนายน พ.ศ. 2555

บทที่ 1 การติดตั้ง appserv

PHP Install for Windows All Version (With Apache) ในสมัยแรก ๆ ผมยังจำได้ตอนที่ผมหัดเขียนโปรแกรมใหม่ ๆ ซึ่งในตอนนั้นWeb Server ค่อนข้างจะมีน้อยและข้อจำกัด รวมทั้งการ Config ก็ยากครับ บางครั้ง Config เสร็จแล้วก็ไม่สามารถใช้งานได้ จะต้องทำการ Remove และ Install เข้าไปใหม่ ซึ่งในตอนนั้นผมยังใช้กับ PWS ของ Windows 98 อยู่และค่อนข้างจะมีปัญหาเมื่อทำการ Config ให้สามารถใช้ PHP แต่ช่วงหลัง ๆ ผมก็ได้หันเหความสนใจ กับ Apache ซึ่งในตอนนั้นกำลังมาแรง แซงทางโค้ง ก็ว่าได้ เพราะการ Config ก็ง่ายกว่าเยอะ และคนก็เริ่มใช้กันเยอะมาก หาข้อมูลและคำปรึกษาได้เยอะกว่า แต่ก็ยังติดปัญหาอยู่ที่ว่า จะต้องทำการติดตั้งApache,PHP และ MySQL แยกในส่วนของแต่ล่ะโปรแกรม แต่ในปัจจุบันเราไม่ต้องมาเสียเวลากับการ Config อีกแล้วครับ เพราะมีPackage ที่ชื่อว่า Appserv ได้ออกมาให้ใช้กันทั่วบ้าน ทั่วเมือง หรือทั่วโลกก็ว่าได้ครับ เพราะ Appserv ได้ทำการรวบรวมApache,PHP และ MySQL ไว้พร้อมแล้วครับ และยังไม่ต้อง Config อะไรเพิ่มเลยครับ

Appserv Package

- PHP
- Apache
- MySQL


ดาวน์โหลด Version ล่าสุดได้ที่ http://www.appservnetwork.com


Appserv Install/Setup 


Appserv Install/Setup 

เลือก Next 


Appserv Install/Setup

เลือก I Agree


Appserv Install/Setup

เลือก Next 


Appserv Install/Setup

เลือก Next 


Appserv Install/Setup 





Appserv Install/Setup

เลือก Install


Appserv Install/Setup

รอการติดตั้ง 


Appserv Install/Setup

เลือก Finish


Appserv Install/Setup

รอการ Start ของ Apache


Appserv Install/Setup

ทดสอบเปิด http://localhost ถ้าได้ผลดังรูปแสดงว่าการติดตั้งสมบูรณ์

Appserv Install/Setup 

ทดสอบ phpMyAdmin ด้วยการเปิด http://localhost/phpMyAdmin กรอก User/Password ที่ได้กำหนดค่าลงไป



Appserv Install/Setup

ถ้าเปิด phpMyAdmin ขึ้นดังรูปแสดงว่าการติดตั้งสมบูรณ์และสามารถใช้ PHP & MySQL ได้แล้วครับ 

สำหรับ Path Root ของ Server จะถูกจัดเก็บไว้ที่ C:\Appserv\www โดยการเขียน Script ทุกครั้งจะต้องทำการเก็บไว้ใน Path ดังกล่าว และการ Run โปรแกรมจะ Run ด้วย 

http://localhost/file-name.php

และกรณีมี Sub Folder ก็จะต้องระบุ Sub Folder ด้วยครับ

เช่น
http://localhost/sub-folder/file-name.php


ทดสอบการเขียน PHP
ในที่นี้ผมจะสร้าง Sub Folder ชื่อ myphp ไว้ที่ C:\AppServ\www\myphp


Appserv Install/Setup


welcome.php สร้างไฟล์ชื่อ welcome และนามสกุลเป็น .php


1.<?
2.echo "Welcome to PHP";
3.?>



Test PHP


Run โดยเปิด URL นี้ http://localhost/myphp/welcome.php
Screenshot

Test PHP 

ขณะนี้พร้อมที่จะลุยกับ PHP กันเลยครับ 

เว็บสอน php basic&advance

1.   http://www.thaicreate.com/
2.   http://www.rongrean.com/
3.   http://www.bcoms.net/php/index.asp
4.   http://www.mindphp.com/
5.   http://www.webthaidd.com/php/
6.   http://www.w3schools.com/
7.   http://www.tizag.com/
8.   http://www.webub.com/
9.   http://www.iyouuu.com/
10.   http://www.thainextstep.com/php/php_article.php
11.   http://www.ban-goi.com/php-tutorial-begin.html
12.   http://www.cmssociety.com/category/php





วันศุกร์ที่ 1 มิถุนายน พ.ศ. 2555

Delete


ในบทเรียนนี้ จะแสดงการลบแถวข้อมูลในตาราง มี syntax ดังนี้
DELETE FROM table_name WHERE column_name = some_value
ตัวอย่างการแก้ไขข้อมูลในตาราง "Customers" ข้อมูลดั้งเดิม จะเป็นดังนี้

FirstnameLastnameAge
JackieChan20
TonyJa28
เขียนสคริปต์ลบข้อมูล โดยจะลบข้อมูลของ Tony

<?php
$con = mysql_connect("localhost","joey","abc123");
if (!$con)
  {
  die('ติดต่อฐานข้อมูลไม่ได้: ' . mysql_error());
  }

mysql_select_db("my_data", $con);

mysql_query("DELETE FROM Customers
WHERE FirstName = 'Tony'");

?>
หลังจากลบข้อมูลแล้ว จะเป็นดังนี้

FirstnameLastnameAge
JackieChan20

Update


ในบทเรียนนี้ จะแสดงการแก้ไขข้อมูลในตาราง มี syntax ดังนี้
UPDATE table_name SET column_name = new_value
WHERE column_name = some_value
ตัวอย่างการแก้ไขข้อมูลในตาราง "Customers" ข้อมูลดั้งเดิม จะเป็นดังนี้

FirstnameLastnameAge
JackieChan20
TonyJa28
เขียนสคริปต์แก้ไขข้อมูล โดยเปลี่ยนข้อมูลอายุของ Tony ให้เป็น 35

<?php
$con = mysql_connect("localhost","joey","abc123");
if (!$con)
  {
  die('ติดต่อฐานข้อมูลไม่ได้: ' . mysql_error());
  }

mysql_select_db("my_data", $con);

mysql_query("UPDATE Customers SET Age = '35'
WHERE FirstName = 'Tony'");

?>
หลังจากแก้ไขข้อมูลแล้ว จะเป็นดังนี้

FirstnameLastnameAge
JackieChan20
TonyJa35

Order By


ในบทเรียนนี้ จะแสดงการเรียกข้อมูลมา โดยมีการเรียงลำดับตามคอลัมน์ที่เราต้องการ มี syntax ดังนี้
SELECT column_name(s) FROM table_name ORDER BY column_name
ตัวอย่างการเรียงลำดับข้อมูล จากตาราง "Customers" เรียงโดย Age

<?php
$con = mysql_connect("localhost","joey","abc123");
if (!$con)
  {
  die('ติดต่อฐานข้อมูลไม่ได้: ' . mysql_error());
  }

mysql_select_db("my_data", $con);

$result = mysql_query("SELECT * FROM Customers ORDER BY Age");

while($row = mysql_fetch_array($result))
  {
  echo $row['FirstName'];
  echo "<br />";
  echo $row['LastName'];
  echo "<br />";
  echo $row['Age'];
  echo "<br />";
  }

?>
ผลลัพธ์ที่ได้จะแสดง ดังนี้

Jackie
Chan
20
Tony
Ja
28

Ascending or Descending

คุณสามารถเรียงลำดับได้มากกว่า 1 คอลัมน์ หรือ ถ้าต้องการเรียงจากน้อยไปหามาก หรือ จากมากไปหาน้อยก็ได้

การเรียงมากกว่า 1 คอลัมน์

การเรียงที่มีเงื่อนไขมากกว่า 1 คอลัมน์ ในคอลัมน์ที่ 2 จะถูกใช้ก็ต่อเมื่อ คอลัมน์แรกมีค่าเหมือนกัน

SELECT column_name(s) FROM table_name
ORDER BY column_name, column_name
การเรียงจากน้อยไปหามาก และจากมากไปหาน้อย

SELECT column_name(s) FROM table_name
ORDER BY column_name DESC|ASC

การแสดงผลในรูปแบบตาราง

<?php
$con = mysql_connect("localhost","joey","abc123");
if (!$con)
  {
  die('ติดต่อฐานข้อมูลไม่ได้: ' . mysql_error());
  }

mysql_select_db("my_data", $con);

$result = mysql_query("SELECT * FROM Customers ORDER BY Age");

echo "<table>";
echo "<tr> <th>Firstname</th>
<th>Lastname</th>
<th>Age</th> </tr>";
while($row = mysql_fetch_array( $result ))
  {
  echo "<tr><td>";
  echo $row['FirstName'];
  echo "</td><td>";
  echo $row['LastName'];
  echo "</td><td>";
  echo $row['Age'];
  echo "</td></tr>";
  }
echo "</table>";

?>
ผลลัพธ์ที่ได้จะแสดง ดังนี้

FirstnameLastnameAge
JackieChan20
TonyJa28

Where


ในบทเรียนนี้ จะแสดงการเรียกข้อมูลที่ต้องการเท่านั้นจากฐานข้อมูล โดยใช้เงื่อนไข WHERE เพิ่มต่อเข้าไปในคำสั่ง SELECT ซึ่งมี syntax ดังนี้
SELECT column FROM table WHERE column operator value
ด้วยเงื่อนไข WHERE โอเปอร์เรเตอร์ตามนี้จะถูกใช้

OperatorDescription
=เท่ากับ
!= หรือ <>ไม่เท่ากับ
>มากกว่า
<น้อยกว่า
>=มากกว่า หรือเท่ากับ
<=น้อยกว่า หรือเท่ากับ
BETWEENระหว่าง ช่วง ถึงช่วง
LIKEค้นหาคำเหมือน
NOT LIKEค้นหาคำไม่เหมือน

ตัวอย่างการเลือกแถวทั้งหมดของตาราง "Customers" ที่มีเงื่อนไขว่า FirstName เป็น Tony

เราใช้เครื่องหมาย * แทนที่ชื่อคอลัมน์ทั้งหมด เพราะว่าเราต้องการตรวจสอบข้อมูลในตารางทั้งหมด

<?php
$con = mysql_connect("localhost","joey","abc123");
if (!$con)
  {
  die('ติดต่อฐานข้อมูลไม่ได้: ' . mysql_error());
  }

mysql_select_db("my_data", $con);

$result = mysql_query("SELECT * FROM Customers WHERE FirstName='Tony'");

while($row = mysql_fetch_array($result))
  {
  echo $row['FirstName'];
  echo "<br />";
  echo $row['LastName'];
  echo "<br />";
  }

?>
ผลลัพธ์ที่ได้จะแสดง ดังนี้

Tony
Ja

การเลือกข้อมูลด้วยเงื่อนไข LIKE

คำสั่ง "LIKE" มีประโยชน์มากกว่าเครื่องหมายเท่ากับ "=" ถ้าคุณต้องการค้นหาคำที่มีรูปแบบตรงตามที่ต้องการเพียงบางส่วน คุณสามารถใช้เครื่อง "_" (underscore) แทนอักษรใดๆ เพียง 1 ตัว และ เครื่องหมายเปอร์เซ็นต์ "%" แทนอักษรใดๆ กี่ตัวก็ได้หรือไม่มีอักษรใดเลยก็ได้ ตามตัวอย่าง:

"SELECT * FROM Customers WHERE FirstName LIKE 'Ja%'"
ผลลัพธ์ที่ได้จะแสดง ดังนี้

Jackie Chan

Select


ในบทเรียนนี้ จะทำการดึงข้อมูลจากตารางในฐานข้อมูลออกมาแสดง
การเลือกข้อมูลจากฐานข้อมูล

การเลือกข้อมูลจากฐานข้อมูลใน MySQL มี syntax ดังนี้

SELECT column_name(s) FROM table_name
ตัวอย่างการเลือกข้อมูลที่เก็บอยู่ในตาราง "Customers" มาแสดง ในที่นี้เราจะใช้เครื่องหมายดอกจันทร์ * แทนที่ชื่อคอลัมน์ ในกรณีที่ต้องการเลือกคอลัมน์ทั้งหมด

<?php
$con = mysql_connect("localhost","joey","abc123");
if (!$con)
  {
  die('ติดต่อฐานข้อมูลไม่ได้: ' . mysql_error());
  }

mysql_select_db("my_data", $con);

$result = mysql_query("SELECT * FROM Customers");

while($row = mysql_fetch_array($result))
  {
  echo $row['FirstName'];
  echo "<br />";
  echo $row['LastName'];
  echo "<br />";
  }

?>
ผลลัพธ์ที่ได้จะแสดง ดังนี้

Tony
Ja
Jackie
Chan
เราจะใช้ฟังก์ชั่น mysql_query() ส่งคำสั่งไปเรียกข้อมูลมาเก็บไว้ที่ตัวแปร $result ก่อน แล้วใช้ฟังก์ชั่น mysql_fetch_array เรียกข้อมูลทีละแถว ในอะเรย์จากตัวแปร $result

เราใช้วิธีวนลูป (while) เพื่อเรียกข้อมูลถัดไปเรื่อยๆ จนกระทั่งสิ้นสุด ในลูปจะแสดงข้อมูลแต่ละแถวออกมา โดยใช้ตัวแปร $row['FirstName'] และ $row['LastName']

Insert


ในบทเรียนนี้ จะนำเสนอเกี่ยวกับการป้อนข้อมูลเข้าไปในตารางที่สร้างขึ้น แสดงการป้อนข้อมูลผ่านฟอร์มอีกด้วย และเหมือนกับการสร้างตาราง จะใช้ฟังก์ชั่น mysql_query() เพื่อส่งคำสั่งไปยังเซิร์ปเวอร์
การป้อนข้อมูลเข้าฐานข้อมูล

ในบทนี้เป็นการสร้างตารางชื่อว่า "Customers" ฐานข้อมูลชื่อเดียวกันกับบทที่แล้ว แต่มีเพียง 3 คอลัมน์ FirstName, LastName, Age การป้อนข้อมูลเข้าฐานข้อมูลใน MySQL มี syntax ดังนี้

INSERT INTO table_name VALUES (value1, value2,....)
ในกรณีที่ต้องการป้อนข้อมูลไม่ครบทุกฟิลด์ คุณสามารถระบุคอลัมน์ที่ต้องการป้อนข้อมูลเท่านั้นเพิ่มไปด้วยได้ตาม syntax ข้างล่างนี้

INSERT INTO table_name (column1, column2,...) VALUES (value1, value2,....)
ตอนนี้ ก็ต้องใช้ฟังก์ชั่น mysql_query() ควบคู่กัน มาดูตัวอย่างกัน

<?php
$con = mysql_connect("localhost","mysql_user","mysql_pwd");
if (!$con)
  {
  die('ติดต่อฐานข้อมูลไม่ได้: ' . mysql_error());
  }
mysql_select_db("my_data", $con);

mysql_query("INSERT INTO Customers(FirstName, LastName, Age) 
VALUES('Tony', 'Ja', 28)");

mysql_query("INSERT INTO Customers(FirstName, LastName, Age) 
VALUES('Jackie', 'Chan', 20)");
?>

การป้อนข้อมูลผ่านฟอร์มเข้าฐานข้อมูล

เริ่มแรก ต้องสร้างแบบฟอร์มก่อน

<form action="insert_data.php" method="POST">
Enter your Firstname: <input type="text" name="firstname" />
Enter your Lastname: <input type="text" name="lastname" />
Enter your Age: <input type="text" name="age" />
<input type="submit" />
</form>
แล้วสร้างไฟล์ชื่อว่า "insert_data.php"

$con = mysql_connect("localhost","mysql_user","mysql_pwd");
if (!$con)
  {
  die('ติดต่อฐานข้อมูลไม่ได้: ' . mysql_error());
  }
mysql_select_db("my_data", $con);
$sql="mysql_query("INSERT INTO Customers(FirstName, LastName, Age) 
VALUES('$_POST[firstname]','$_POST[lastname]',$_POST[age])";
if (!mysql_query($sql,$con)
  {
  die('Error: ' . mysql_error());
  } 
  else
  {
  echo "ป้อนสำเร็จ!";
  }
จากตัวอย่างข้างบน แบบฟอร์มจะส่งข้อมูลไปที่ไฟล์ "insert_data.php" ด้วยวิธี POST เมื่อคลิ้ก submit

ไฟล์ "insert_data.php" จะติดต่อฐานข้อมูล แล้วรับค่าตัวแปร POST จากฟอร์ม

แล้วใช้ฟังก์ชั่น mysql_query() เพื่อใช้คำสั่งป้อนข้อมูลเข้าฐานข้อมูล

Create


ในบทเรียนนี้ จะนำเสนอเกี่ยวกับการสร้างฐานข้อมูล และตาราง โดยฟังก์ชั่นที่สำคัญ คือ mysql_query()
การสร้างฐานข้อมูล

การสร้างฐานข้อมูลใน MySQL มี syntax ดังนี้

CREATE DATABASE database_name
คุณต้องใช้ MySQL syntax ข้างบนนี้ ควบคู่ไปกับฟังก์ชั่น mysql_query() มาดูตัวอย่างกัน ในที่นี้จะสร้างฐานข้อมูลชื่อว่า "my_data"

<?php
$con = mysql_connect("localhost","joey","abc123");
if (!$con)
  {
  die('ติดต่อฐานข้อมูลไม่ได้ เนื่องจาก: ' . mysql_error());
  }
$sql = "CREATE DATABASE my_data";
if (mysql_query($sql,$con))
  {
  echo "ฐานข้อมูล my_data สร้างแล้ว";
  }
else
  {
  echo "เกิดความผิดพลาด: " . mysql_error();
  }
?>

การสร้างตาราง

การสร้างตารางใน MySQL มี syntax ดังนี้

CREATE TABLE table_name
(
column_name1 data_type,
column_name2 data_type,
.......
)
ตัวอย่างการสร้างตารางข้างล่างนี้จะแสดงการสร้างตารางชื่อว่า "Customers" ที่มี 3 คอลัมน์ คือ FirstName, LastName และ Age

mysql_select_db("my_data", $con);
$sql = "CREATE TABLE Customers 
(
FirstName varchar(15),
LastName varchar(15),
Age int
)";
mysql_query($sql,$con);
จากตัวอย่าง ต้องทำการเลือกฐานข้อมูลซะก่อนในบรรทัดที่หนึ่ง แล้วจึงจะทำการสร้างตารางได้

ถ้า data type เป็น varchar จะต้องระบุค่าพารามิเตอร์ลงไปด้วย ในที่นี้ คือ 15 ตัวอักษร
ตารางของชนิดข้อมูล (Data Type)

ชนิดของข้อมูลอาจแบ่งได้ 3 กลุ่มหลักๆ คือ ตัวเลข, วันที่และเวลา และ ข้อความ (String) สำหรับค่าตัวเลขสามารถกำหนดความยาวของตัวเลขและจำนวนหลังจุดทศนิยมได้ ขึ้นอยู่กับเป็นข้อมูลชนิดใด ในที่นี้ค่าความยาวของตัวเลขและข้อความ รวมจุดทศนิยมจะแทนด้วยตัว M และจำนวนตัวเลขหลังจุดทศนิยมจะแทนด้วยตัว D

ข้อมูลชนิดตัวเลข (Numeric)

TypeBytesDescription
TINYINT(M)1-128 ถึง 127 หรือ 0 ถึง 255
SMALLINT(M)2-32768 ถึง 32767 หรือ 0 ถึง 65535
MEDIUMINT(M)3-8388608 ถึง 8388607 หรือ 0 ถึง 16777215
INT(M), INTEGER(M)4-231 ถึง 231-1 หรือ 0 ถึง 232-1
BIGINT(M)8-263 ถึง 263-1 หรือ 0 ถึง 264-1
FLOAT(M,D)4+-1.175494351E-38
+-3.402823466E+38
DOUBLE(M,D)8+-1.7976931348623157E+308
+-2.2250738585072014E-308
DECIMAL(M,D)M+2เปลี่ยนแปลงได้ ขึ้นอยู่กับความยาวของตัวเลข (M)

ข้อมูลชนิดวันที่และเวลา (Date and Time)

TypeFormDescription
DATEYYYY-MM-DDแสดงวันที่
TIMEHH:MM:SSแสดงเวลา
DATETIMEYYYY-MM-DD HH:MM:SSแวดงวันที่และเวลา
TIMESTAMP[(M)]YYYYMMDDHHMMSSแสดงวันที่และเวลาตามรูปแบบที่กำหนด ขึ้นอยู่กับ M ว่ายาวเท่าไรด้วย
YEAR[(2|4)]YYYYแสดงปี ได้ทั้ง 2 หลัก หรือ 4 หลัก

ข้อมูลชนิดสตริง (String)

TypeDescription
CHAR(M)มีค่า 1 ถึง 255
VARCHAR(M)มีค่า 1 ถึง 255
TINYTEXTมีค่า 1 ถึง 255
TEXT
BLOB
มีค่า 1 ถึง 65535
MEDIUMTEXT
MEDIUMBLOB
มีค่า 1 ถึง 16777215
LONGTEXT
LONGBLOB
มีค่า 1 ถึง 4294967295

ข้อมูลชนิด SET และ ENUM

TypeDescription
ENUM(value1,value2,...)เป็นการเก็บข้อมูลสตริงเข้าไว้เป็นรายการไว้ก่อน โดยค่าแรกถูกแทนด้วยค่า 1 หากรายการไม่ตรงกับรายการใดเลย จะแทนด้วยค่า 0 หรือจะใส่เป็นค่าตรงๆเลยก็ได้ ข้อมูลชนิดนี้จะช่วยลดพื้นที่การจัดเก็บได้อย่างมาก เหมาะกับการเลือกแบบลิสต์บ็อกซ์ เพราะเลือกได้เพียง 1 ตัวเลือกเท่านั้น

ENUM เก็บค่ารายการได้สูงถึง 65535 ตัวเลือก
SET(value1,value2,...)คล้ายกับ ENUM แต่เลือกรายการได้มากกว่าหนึ่งตัวเลือก จะใช้เลขฐานสองเก็บค่าตัวเลือก โดยรายการแรกมีค่า 1, 2, 4, 8, 16, 32,... ไปเรื่อยๆ ถ้าเลือกรายการไหนก็เอามาบวกกันจะได้ค่าที่จะเก็บบันทึก เหมาะกับการเลือกแบบเช็คบ็อกซ์ เพื่อให้ผู้ตอบเลือกได้มากกว่า 1 ตัวเลือก

SET เก็บค่ารายการได้เพียง 64 ตัวเลือก

Primary Key และ Auto increment

แต่ละตารางควรจะมีค่าที่ไม่ซ้ำกันในแต่ละเรคอร์ด เพื่อแยกข้อมูลได้ชัดเจน ฟิลด์แบบนี้เรียกว่า primary key ส่วนใหญ่จะเป็นฟิลด์ที่ระบุค่า ID และมักจะใช้ AUTO_INCREMENT เพื่อให้ตัวเลขรันเรียงไปเรื่อยๆ ทีละหนึ่ง เพื่อไม่ให้ฟิลด์นั้นไม่ซ้ำกันเลย และเพื่อไม่ให้เป็นค่าว่าง ต้องเพิ่ม NOT NULL ลงไปด้วย

ตัวอย่างข้างล่างนี้จะเพิ่มฟิลด์ id เป็น primary key ซึ่งจะไม่มีค่าซ้ำกันได้เลย

$sql = "CREATE TABLE Customers 
(
id int NOT NULL AUTO_INCREMENT, 
PRIMARY KEY(id),
FirstName varchar(15),
LastName varchar(15),
Age int
)";
mysql_query($sql,$con);

Connect


การติดต่อฐานข้อมูล MySQL

ก่อนจะเข้าถึงฐานข้อมูล MySQL คุณต้องทำการติดต่อฐานข้อมูลซะก่อน ด้วยฟังก์ชั่น mysql_connect() ซึ่งมี syntax ดังนี้

mysql_connect(server,user,password);

  • server ระบุชื่อเซิร์ปเวอร์ อาจจะมีหมายเลข port พ่วงท้ายด้วยก็ได้ ปกติจะเป็น localhost:3306
  • user ระบุชื่อผู้ใช้ ที่จะล็อคอิน
  • password ระบุรหัสผ่านของผู้ใช้นั้นๆ

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

    ข้อดีของการเชื่อมต่อแบบนี้ คือ จะเร็วขึ้นมาอีกนิดหน่อย เพราะไม่ต้องไปเปิดการเชื่อมต่ออีก แต่ข้อเสียก็มี คือ จะทำให้เครื่องรันหนักขึ้น ถ้าหากมีการใช้มาก

    เพื่อให้ใช้ฟังก์ชั่นนี้ได้ ต้องแก้ไขไฟล์ php.ini ก่อนดังนี้ (-1 หมายถึง ไม่จำกัด)

    mysql.allow_persistent = On
    mysql.max_persistent = -1
    mysql.max_links = -1

    ตัวอย่าง

    ตัวอย่างนี้ จะทำการเชื่อมต่อฐานข้อมูล ถ้าเชื่อมต่อไม่ได้ จะใช้คำสั่ง die เพื่อแสดงข้อความที่กำหนดไว้แทน และจะแสดงข้อความ error ว่าเกิดจากอะไรอีกด้วย เนื่องจากมีคำสั่ง mysql_error() ต่อท้าย

    <?php
    $con = mysql_connect("localhost","joey","abc123");
    if (!$con)
      {
      die('ติดต่อฐานข้อมูลไม่ได้ เนื่องจาก: ' . mysql_error());
      }
    // some code
    ?>

    การปิดการเชื่อมต่อฐานข้อมูล

    การเชื่อมต่อฐานข้อมูลจะปิดเมื่อสคริปต์รันจบ แต่จะปิดก่อนได้ ด้วยฟังก์ชั่น mysql_close()

    Introduction


    MySQL เป็นโปรแกรมฐานข้อมูล Open Source ที่นิยมมากที่สุด

    ในฐานข้อมูล จะแบ่งเป็นหลายกลุ่ม แต่ละกลุ่มจะเรียกว่าตาราง และในตารางจะมี แถว (rows), คอลัมน์ (columns) และเซลล์ (cells)

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

    ในบทเรียนของเราจะสอนการใช้หลักๆ เท่านั้น ท่านควรหาหนังสือเกี่ยวกับคำสั่ง SQL มาศึกษาเพิ่มเติมอีก

    ตารางฐานข้อมูล (Database Tables)

    ในหนึ่งฐานข้อมูลอาจจะมีหนึ่ง หรือมากกว่าหนึ่งตารางก็ได้ แต่ละตารางจะมีข้อมูลอยู่ ข้อมูล 1 เรคอร์ด ก็คือ 1 แถว (rows)

    ข้างล่างนี้เป็นตัวอย่างของตารางชื่อว่า "Customers" ซึ่งบรรจุ 3 เรคอร์ด กับ 4 คอลัมน์

    FirstNameLastNameAddressCity
    AndrewBiggSukhumvitBangkok
    DavidBeckhamTachangChiangmai
    MichealOwenPakkretNonthaburi

    คิวรี่ (Queries)

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

    SELECT LastName FROM Customers


    ผลที่ได้รับจะแสดงแบบนี้

    LastName
    Bigg
    Beckham
    Owen

    MySQL Database

    Secure Mail


    การอัดส่งอีเมล์ (Email Injections)

    มาดูที่โค้ดส่งเมล์จากบทก่อน:

    <html>
    <body>
    <?php
    if (isset($_REQUEST['email']))
      {
      $email = $_REQUEST['email'] ; 
      $subject = $_REQUEST['subject'] ;
      $message = $_REQUEST['message'] ;
      mail( "webmaster@domain.com", $subject,
      $message, "From: $email" );
    
      echo "ขอบคุณที่ใช้ฟอร์มเมล์ของเรา";
      }
    else
      {
      echo "<form method='post' action=''>
      Email: <input name='email' type='text'><br>
      Subject: <input name='subject' type='text'><br>
      Message:<br>
      <textarea name='message' rows='15' cols='40'></textarea><br>
      <input type='submit'>
      </form>";
      }
    ?>
    </body>
    </html>
    ปัญหาจากโค้ดข้างบนคือ ผู้ใช้ที่ไม่มีสิทธิ์สามารถใส่ชื่ออีเมล์ไปไว้ที่ส่วนของ headers ผ่านแบบฟอร์มนี้ได้

    จะเกิดอะไรขึ้น ถ้าผู้ใช้ใส่ข้อมูลรายชื่ออีเมล์เข้าไปในฟอร์ม

    someone@example.com%0ACc:person2@example.com
    %0ABcc:person3@example.com,person3@example.com,
    anotherperson4@example.com,person5@example.com
    %0ABTo:person6@example.com
    เมื่อผู้ใช้ใส่ข้อมูลเหล่านี้ลงไปแล้วคลิ้ก submit ล่ะ อีเมล์จะถูกส่งไปตามอีเมล์เหล่านี้ทั้งหมด

    การหยุดอัดส่งอีเมล์

    ทางที่ดีที่สุดในการหยุดอัดส่งอีเมล์ คือ พิสูจน์ค่าที่ส่งมาจากฟอร์ม

    โค้ดข้างล่างนี้ เหมือนกับโค้ดก่อน แต่จะเพิ่มส่วนที่พิสูจน์ค่าที่ส่งมาจากฟอร์ม ในฟิลด์อีเมล์

    <html>
    <body>
    <?php
    function spamcheck($field)
      {
    //eregi() จะถือว่าตัวอักษรเล็กหรือใหญ่เหมือนกัน
      if(eregi("to:",$field) || eregi("cc:",$field)) 
        {
        return TRUE;
        }
      else
        {
        return FALSE;
        }
      }
    //if "email" is filled out, send email
    if (isset($_REQUEST['email']))
      {
      //check if the email address is invalid
      $mailcheck = spamcheck($_REQUEST['email']);
      if ($mailcheck==TRUE)
        {
        echo "Invalid input";
        }
      else
        { 
        //send email
        $email = $_REQUEST['email'] ; 
        $subject = $_REQUEST['subject'] ;
        $message = $_REQUEST['message'] ;
     
        mail("webmaster@domain.com", "Subject: $subject",
        $message, "From: $email" );
     
        echo "ขอบคุณที่ใช้ฟอร์มเมล์ของเรา";
        }
      }
    else
    //if "email" is not filled out, display the form
      {
      echo "<form method='post' action='mailform.php'>
      Email: <input name='email' type='text'><br>
      Subject: <input name='subject' type='text'><br>
      Message:<br>
      <textarea name='message' rows='15' cols='40'></textarea><br>
      
      <input type='submit'>
      </form>";
      }
    ?>
    </body>
    </html>

    Mail


    คุณสามารถส่งเมล์โดยตรง ผ่านสคริปต์ PHP ได้เลย ด้วยฟังก์ชั่นข้างล่างนี้

    mail(to,subject,message,headers)

  • to คือ อีเมล์ของผู้รับ
  • subject คือ หัวจดหมาย
  • message คือ ข้อความ
  • headers คือ ส่วนเพิ่มเติมจะมีหรือไม่มีก็ได้ เช่น Cc และ Bcc แต่ละส่วนจะแยกด้วย (\r\n)

    การส่งอีเมล์แบบง่ายๆ

    วิธีการส่งเมล์ที่ง่ายที่สุด คือส่งแบบ text ธรรมดา ดูตัวอย่างข้างล่างนี้

    <?php
    $to = "webmaster@phpstreet.com";
    $subject = "ทดสอบส่งอีเมล์";
    $message = "สวัสดีครับ นี่เป็นการลองส่งอีเมล์แบบ text";
    $from = "webmaster@domain.com";
    $cc = "info@domain.com";
    $bcc = "help@domain.com";
    
    $headers = "From: $from\r\n";
    $headers .= "Cc: $cc\r\n";
    $headers .= "Bcc: $bcc\r\n"; 
    
    mail($to,$subject,$message,$headers);
    echo "ส่งเมล์แล้ว";
    ?>

    ฟอร์มเมล์

    มาสร้างแบบฟอร์มส่งเมล์กัน โดยใช้ฟอร์ม html ทั่วไปคู่กับ PHP ตัวอย่างนี้จะสร้างแบบฟอร์มส่งค่าที่สำคัญไปเพื่อส่งเมล์ที่ไฟล์เดียวกัน

    ถ้ามีค่าจากฟอร์มส่งมา สคริปต์จะเช็คก่อนว่ามีค่าอีเมล์หรือไม่ ถ้ามี สคริปต์จะทำการส่งเมล์ให้ทันที แต่ถ้าไม่มีจะแสดงหน้าแบบฟอร์มแทน

    <html>
    <body>
    <?php
    if (isset($_REQUEST['email']))
      {
      $email = $_REQUEST['email'] ; 
      $subject = $_REQUEST['subject'] ;
      $message = $_REQUEST['message'] ;
      @mail( "webmaster@domain.com", $subject,
      $message, "From: $email" );
    
      echo "ขอบคุณที่ใช้ฟอร์มเมล์ของเรา";
      }
    else
      {
      echo "<form method='post' action=''>
      Email: <input name='email' type='text'><br>
      Subject: <input name='subject' type='text'><br>
      Message:<br>
      <textarea name='message' rows='15' cols='40'></textarea><br>
      <input type='submit'>
      </form>";
      }
    ?>
    </body>
    </html>
    TIP: ป้องกันความผิดพลาด เพื่อไม่ให้โชว์ข้อความ error ให้ใส่เครื่องหมาย "@" ไว้ที่หน้าบรรทัดนั้นๆ

    Sessions


    ตัวแปร sessions

    ตัวแปร sessions ถูกใช้สำหรับเก็บข้อมูลของหนึ่งผู้ใช้ และจะคงอยู่ทุกหน้าเว็ปเพจที่เราใช้

    session มันเหมือนกับคุณใช้ application ตัวหนึ่งอยู่คุณเปิด แก้ไข และปิด แต่เพราะว่าเว็ปเซิร์ปเวอร์ในอินเตอร์เน็ตไม่เหมือนกับคอมพิวเตอร์ที่จะรู้ว่าคุณกำลังทำอะไรอยู่ ดังนั้นคุณจึงต้องสร้างตัวแปร sessions ขึ้นมาแก้ไขปัญหานี้

    อย่างไรก็ตาม ข้อมูลในตัวแปร sessions มีระยะเวลาชั่วคราวเท่านั้น และจะถูกลบทิ้งหลังจากเราออกจากเว็ปไซต์ ถ้าคุณต้องการเก็บข้อมูลเพื่อใช้ต่อไป คุณอาจต้องเก็บในฐานข้อมูล เช่น mysql

    Sessions จะทำงานโดยการสร้าง unique id (UID) สำหรับแต่ละผู้ใช้ และเก็บข้อมูลไว้ใน UID นี้

    การเริ่มใช้ sessions

    ก่อนที่คุณจะใช้ตัวแปร sessions ได้นั้น คุณต้องใส่ฟังก์ชั่น session_start() ไว้ก่อนแท็ก HTML

    <?php session_start(); ?>
    <html>
    <body>
    </body>
    </html>

    การเก็บค่าตัวแปร sessions

    คุณสามารถเก็บและเรียกข้อมูลของตัวแปร sessions มาใช้ได้ดังตัวอย่าง:

    <?php
    session_start();
    // การเก็บข้อมูล session
    $_SESSION['views']=1;
    ?>
    <html>
    <body>
    <?php
    // การเรียกข้อมูล session
    echo "Pageviews=". $_SESSION['views'];
    ?>
    </body>
    </html>
    ผลลัพธ์ที่ได้:

    Pageviews=1
    มาดูตัวอย่างกันอีกแบบ เราจะสร้าง counter เรียกจำนวนหน้าของผู้ใช้นั้น ฟังก์ชั่น isset() จะตรวจสอบว่าตัวแปร views มีการถูกเซ็ทแล้วหรือยัง ถ้าถูกเซ็ทแล้วจะทำการเพิ่ม counter ขึ้นมาหนึ่ง แต่ถ้าตัวแปรยังไม่คงอยู่ก็จะเซ็ทใหม่และตั้งค่าไว้ที่ 1

    <?php
    
    session_start();
    if(isset($_SESSION['views']))
      
    $_SESSION['views']=$_SESSION['views']+1;
    
    else
    $_SESSION['views']=1;
    
    
    echo "Views=". $_SESSION['views']; 
    ?>

    การทำลายตัวแปร sessions

    ถ้าคุณอยากทำลายข้อมูลตัวแปร sessions คุณอาจจะใช้ฟังก์ชั่น unset() หรือ session_destroy() ก็ได้

    ฟังก์ชั่น unset() ถูกใช้ลบตัวแปร sessions บางตัวเท่านั้น

    <?php
    unset($_SESSION['views']);
    ?>
    ถ้าคุณต้องการทำลายตัวแปร sessions ทั้งหมดทุกตัวไม่เหลือเลยให้ใช้ฟังก์ชั่น session_destroy() ข้อมูลทั้งหมดจะสูญหายทันที

    <?php
    session_destroy();
    ?>

    Cookies


    คุ๊กกี้ (cookie) คืออะไร ?

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

    คุณสามารถสร้าง cookie ได้ด้วยฟังก์ชั่น setcookie() จำไว้ด้วยว่า ฟังก์ชั่นนี้ต้องใช้ก่อนแท็กเปิด <HTML> มาดูรูปแบบกัน
    setcookie(name, value, expire, path, domain);
    nameหมายถึง ชื่อของ cookie
    valueหมายถึง ค่าของ cookie
    expireหมายถึง วันที่หมดอายุของ cookie
    pathหมายถึง path directory ที่สามารถเรียกใช้ cookie
    domainหมายถึง ชื่อของเว็ปเซิร์ปเวอร์ที่สามารถใช้ cookie
    มาดูตัวอย่างกัน ในที่นี้ ชื่อ cookie คือ ck มีค่าคือ "hello" มีอายุใช้งาน 1 ชั่วโมง หรือ 3600 วินาที

    <?php 
    setcookie("ck", "hello", time()+3600);
    ?>
    <html>
    <body>
    <p>
    cookie ถูกเซ็ทแล้ว
    </p>
    </body>
    </html>

    การเรียก cookie มาใช้งาน

    เมื่อ cookie ถูกเซ็ทแล้ว คุณสามารถเรียก cookie มาใช้งานได้ เหมือนเป็นตัวแปร มาดูตัวอย่างกัน

    Tip: ใช้ฟังก์ชั่น isset() ตรวจสอบว่า cookie มีการเซ็ทแล้วหรือยัง
    <html>
    <body>
    <?php
    if (isset($_COOKIE["ck"]))
    echo "ยินดีต้อนรับ " . $_COOKIE["ck"] . "!<br />";
    else
    echo "cookie ยังไม่ถูกเซ็ท!<br />";
    ?>
    </body>
    </html>

    การลบ cookie

    เมื่อไรที่คุณจะทำการลบ cookies คุณต้องแน่ใจก่อนว่าเวลาหมดอายุต้องน้อยกว่าเวลาที่เซ็ทใหม่

    <?php 
    // set the expiration date to one hour ago
    setcookie("ck", "", time()-3600);
    ?>

    File Upload


    การสร้างแบบฟอร์มส่งไฟล์

    เราจะสร้างแบบฟอร์ม HTML ง่ายๆ ตามนี้:
    <html>
    <body>
    <form action="upload_file.php" method="post" enctype="multipart/form-data">
    <label for="file">Filename:</label>
    <input type="file" name="file" id="file"> 
    <br>
    <input type="submit" name="submit" value="Submit">
    </form>
    </body>
    </html>
    จากแบบฟอร์ม HTML ข้างบนนี้อธิบายได้ว่า:

  • แท็ก form ต้องใส่ enctype = "multipart/form-data" เพื่ออัพโหลดข้อมูลเป็นแบบไบนารี่ (binary)
  • แท็ก input ต้องเลือก type = "file" เพราะจะมีปุ่มให้ browse file ได้
    Note: การปล่อยให้ใครก็ตามสามารถอัพโหลดไฟล์ได้เป็นความเสี่ยงในด้านความปลอดภัยอย่างมาก ดังนั้นควรอนุญาติให้คนที่ไว้ใจได้เท่านั้นทำการอัพโหลดไฟล์

    การสร้างสคริปต์อัพโหลด

    ไฟล์ชื่อ upload_file.php เขียนสคริปต์เพื่ออัพโหลดไฟล์ตามนี้:
    <?php
    if ($_FILES["file"]["error"] > 0)
      {
      echo "Error: " . $_FILES["file"]["error"] . "<br>";
      }
    else
      {
      echo "Upload: " . $_FILES["file"]["name"] . "<br>";
      echo "Type: " . $_FILES["file"]["type"] . "<br>";
      echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br>";
      echo "Stored in: " . $_FILES["file"]["tmp_name"];
      }
    ?>
    ใช้ $_FILES array แยกแยะค่าพารามิเตอร์ต่างๆ ของไฟล์ ดังนี้:

  • $_FILES["file"]["name"] - ชื่อของไฟล์
  • $_FILES["file"]["type"] - ชนิดของไฟล์ เช่น image/gif
  • $_FILES["file"]["size"] - ขนาดเป็นไบต์ (bytes) ของไฟล์
  • $_FILES["file"]["tmp_name"] - ไฟล์ชั่วคราวเพื่อรอไปเก็บไว้บนเซิร์ปเวอร์
  • $_FILES["file"]["error"] - โค้ดแสดงข้อผิดพลาดจากไฟล์ที่อัพโหลด
    นี่เป็นแค่การแสดงข้อมูลไฟล์ที่อัพโหลดเท่านั้น เพื่อเพิ่มความปลอดภัยแก่เซิร์ปเวอร์ คุณต้องเพิ่มเงื่อนไขเข้าไปอีก

    ข้อจำกัดในการอัพโหลด

    ในสคริปต์นี้ เราจะจำกัดผู้ใช้ให้อัพโหลดได้เฉพาะไฟล์รูปภาพ .gif กับ .jpeg เท่านั้น และขนาดไฟล์ต้องไม่เกิน 20 kb ด้วย:

    <?php
    if ((($_FILES["file"]["type"] == "image/gif")
    || ($_FILES["file"]["type"] == "image/pjpeg"))
    && ($_FILES["file"]["size"] < 20000))
      {
      if ($_FILES["file"]["error"] > 0)
        {
        echo "Error: " . $_FILES["file"]["error"] . "<br>";
        }
      else
        {
        echo "Upload: " . $_FILES["file"]["name"] . "<br>";
        echo "Type: " . $_FILES["file"]["type"] . "<br>";
        echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br>";
        echo "Stored in: " . $_FILES["file"]["tmp_name"];
        }
      }
    else
      {
      echo "Invalid file";
      }
    ?>

    การเซฟไฟล์

    จากสคริปต์ข้างบน ไฟล์ได้ถูกส่งไปเก็บไว้ที่โฟลเดอร์ชั่วคราวบนเซิร์ปเวอร์แล้ว

    แต่ไฟล์ชั่วคราวนั้นจะถูกลบทิ้งหลังจากสคริปต์สิ้นสุด ดังนั้นเราต้องก็อปปี้ไฟล์ชั่วคราวนั้นไปเก็บไว้ที่เราต้องการ

    <?php
    if (($_FILES["file"]["type"] == "image/gif")
    || ($_FILES["file"]["type"] == "image/pjpeg")
    && ($_FILES["file"]["size"] < 20000))
      {
      if ($_FILES["file"]["error"] > 0)
        {
        echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
        }
      else
        {
        echo "Upload: " . $_FILES["file"]["name"] . "<br>";
        echo "Type: " . $_FILES["file"]["type"] . "<br>";
        echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br>";
        echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";
        if (file_exists("upload/" , $_FILES["file"]["name"]))
          {
          echo $_FILES["file"]["name"] . " already exists. ";
          }
        else
          {
          move_uploaded_file($_FILES["file"]["tmp_name"],
          "upload/" , $_FILES["file"]["name"]);
          echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
          }
        }
      }
    else
      {
      echo "Invalid file";
      }
    ?>
    สคริปต์ข้างบนจะตรวจสอบว่ามีไฟล์ชื่อนี้อยู่แล้วหรือไม่ ด้วยฟังก์ชั่น file_exists() ถ้าไฟล์ชื่อนี้ไม่มีอยู่ก็จะก็อปปี้ไฟล์ ไปไว้โฟลเดอร์ที่ระบุในที่นี้คือโฟลเดอร์ชื่อ "Upload/" ด้วยฟังก์ชั่น move_uploaded_file()

    คุณสามารถตั้งชื่อไฟล์ได้เอง โดยการเปลี่ยน "upload/" , $_FILES["file"]["name"] ในฟังก์ชั่น move_uploaded_file() ไปเป็น "upload/ชื่อไฟล์พร้อมนามสกุล"

    File


    บทเรียนนี้จะอธิบายคร่าวๆ เกี่ยวกับการใช้ฟังก์ชั่นหลักๆ ของไฟล์เท่านั้น

    การเปิดไฟล์

    ในการอ่านข้อมูลจากไฟล์ หรือบันทึกข้อมูลลงไฟล์ ต้องเริ่มจากการเปิดไฟล์ขึ้นมาก่อน โดยใช้ฟังก์ชั่น fopen()

    ฟังก์ชั่นนี้บรรจุพารามิเตอร์ 2 ตัว ตัวแรก คือ ชื่อไฟล์ ส่วนตัวที่สอง คือ โหมดที่ใช้ในการเปิดไฟล์
    <html>
    <body>
    <?php
    $f=fopen("welcome.txt","r");
    ?>
    </body>
    </html>
    ไฟล์สามารถเปิดได้หลายโหมด ดังนี้

    File ModeDescription
    rอ่านได้อย่างเดียว ตัวชี้จะอยู่ที่ตำแหน่งเริ่มต้นของไฟล์
    r+อ่านและเขียนไฟล์ ตัวชี้จะอยู่ที่ตำแหน่งเริ่มต้นของไฟล์
    wเขียนได้อย่างเดียว ตัวชี้จะอยู่ที่ตำแหน่งเริ่มต้นของไฟล์ ถ้าไฟล์มีอยู่แล้วจะตัดข้อมูลเดิมทั้งทั้งหมด แต่ถ้าไม่มีไฟล์นี้อยู่จะสร้างไฟล์ขึ้นมาใหม่
    w+อ่านและเขียนไฟล์ ตัวชี้จะอยู่ที่ตำแหน่งเริ่มต้นของไฟล์ ถ้าไฟล์มีอยู่แล้วจะตัดข้อมูลเดิมทั้งทั้งหมด แต่ถ้าไม่มีไฟล์นี้อยู่จะสร้างไฟล์ขึ้นมาใหม่
    aเขียนได้อย่างเดียว ตัวชี้จะอยู่ที่ตำแหน่งสิ้นสุดของไฟล์ ถ้าไม่มีไฟล์นี้อยู่จะสร้างไฟล์ขึ้นมาใหม่
    a+อ่านและเขียนไฟล์ ตัวชี้จะอยู่ที่ตำแหน่งสิ้นสุดของไฟล์ ถ้าไม่มีไฟล์นี้อยู่จะสร้างไฟล์ขึ้นมาใหม่
    xสร้างและเปิดไฟล์ขึ้นมาเพื่อเขียน ตัวชี้จะอยู่ที่ตำแหน่งเริ่มต้นของไฟล์ ถ้าไฟล์มีอยู่แล้วจะเกิด error แต่ถ้าไม่มีไฟล์นี้อยู่จะสร้างไฟล์ขึ้นมาใหม่
    x+สร้างและเปิดไฟล์ขึ้นมาเพื่ออ่านกับเขียน ตัวชี้จะอยู่ที่ตำแหน่งเริ่มต้นของไฟล์ ถ้าไฟล์มีอยู่แล้วจะเกิด error แต่ถ้าไม่มีไฟล์นี้อยู่จะสร้างไฟล์ขึ้นมาใหม่
    ถ้าฟังก์ชั่น fopen() ไม่สามารถเปิดไฟล์ที่ต้องการขึ้นมากได้ มันจะให้ค่ากลับมาเป็น 0 หรือ false ดูตัวอย่างเพื่อป้องกันการเกิดข้อผิดพลาด
    <html>
    <body>
    <?php
    $f=fopen("welcome.txt","r") or exit("ไม่สามารถเปิดไฟล์ได้ !");
    ?>
    </body>
    </html>

    การปิดไฟล์
    การปิดไฟล์จะใช้ฟังก์ชั้น fclose() จะมีพารามิเตอร์เดียว คือ ชื่อไฟล์

    fclose($f);

    การอ่านไฟล์
    หลังจากเปิดไฟล์ขึ้นมาแล้ว เรามักจะใช้ฟังก์ชั่น feof() เพื่อตรวจสอบข้อมูลในไฟล์ที่จะอ่านว่าหมดแล้วหรือยัง

    ฟังก์ชั่นนี้ไม่สามารถใช้ได้กับโหมด w, a และ x

    if (feof($f))
    echo "สิ้นสุดไฟล์แล้ว";
    การอ่านไฟล์ทีละตัวอักษร
    ฟังก์ชั่น fgetc() จะใช้อ่านทีละตัวอักษรจากไฟล์ หลังจากเรียกใช้ฟังก์ชั่นนี้ ตัวชี้จะเลื่อนตัวอักษรไปตัวถัดไป มาดูตัวอย่างกัน

    <?php
    $f=fopen("welcome.txt","r") or exit("ไม่สามารถเปิดไฟล์ได้ !");
    while (!feof($f)) 
    { 
    $x=fgetc($f); 
    echo $x;
    }
    fclose($f);
    ?>

    Include File


    Server Side Includes (SSI) เป็นการใช้ไฟล์แทรกไฟล์ เพื่อประหยัดเวลาในการเขียนสคริปต์ที่ซ้ำๆกัน

    คุณสามารถแทรกเนื้อหาของไฟล์เข้าไปในไฟล์อื่นๆ ก่อนที่เซิร์ปเวอร์จะประมวลผลด้วยฟังก์ชั่น include() หรือ require() ทั้ง 2 ฟังก์ชั่นนี้ใช้เหมือนกันทุกอย่าง ยกเว้นอย่างเดียว เมื่อมีความผิดพลาดเกิดขึ้น โดยฟังก์ชั่น include() จะแสดงคำเตือนแต่สคริปต์อื่นๆ ยังดำเนินการต่อไป ขณะที่ฟังก์ชั่น require() จะเกิด fatal error และจะหยุดสคริปต์ทำงานทันที

    ฟังก์ชั่นนี้ถูกใช้สร้างทั้งฟังก์ชั่น, headers, footers, อีลิเมนต์ ที่จะใช้เหมือนกันหลายๆ หน้า

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

    ตัวอย่างข้างล่างนี้ สมมุติคุณมีไฟล์ส่วนของ header ชื่อว่า header.htm ที่จะรวมไฟล์ส่วนของ header ที่เหมือนกัน ที่ใช้กับทุกๆ หน้ากับไฟล์หน้าหลัก
    <html>
    <body>
    <?php include("header.htm"); ?>
    <p>
    เนื้อหาเว็ป
    </p>
    <p>
    เนื้อหาเว็ป
    </p>
    </body>
    </html>

    ในกรณีที่เกิดข้อผิดพลาดขึ้น เนื่องจากไม่มีไฟล์ที่รวมเข้าไป หรือพิมพ์ path ผิด จะแสดง error ดังนี้

    สำหรับฟังก์ชั่น include()

    Warning: include(header.htm) [function.include]:
    failed to open stream:
    No such file or directory in C:\home\website\test.php on line 5
    
    Warning: include() [function.include]:
    Failed opening 'header.htm' for inclusion
    (include_path='.;C:\php5\pear')
    in C:\home\website\test.php on line 5
    
    รันสคริปต์ต่อไป
    
    สำหรับฟังก์ชั่น require()

    Warning: require(header.htm) [function.require]:
    failed to open stream:
    No such file or directory in C:\home\website\test.php on line 5
    
    Fatal error: require() [function.require]:
    Failed opening required 'header.htm'
    (include_path='.;C:\php5\pear')
    in C:\home\website\test.php on line 5
    ถ้าคุณไม่ต้องการให้สคริปต์รันต่อไปก็ใช้ฟังก์ชั่น require() แทนที่ฟังก์ชั่น include() เพราะว่าถ้ารันต่อไปอาจจะมี error เกิดขึ้นอีกตามมา

    Date


    ฟังก์ชั่น Date() ถูกใช้จัดรูปแบบเวลา หรือวันที่ จากค่า Timestamp ซึ่มี syntax ดังนี้
    date(format,timestamp)

  • format คือ การระบุรูปแบบจาก timestamp เพื่อแสดงข้อมูลออกมา
  • timestamp คือ ค่าตัวเลขของจำนวนวินาที เริ่มตั้งแต่วันที่ 1 มกราคม ค.ศ. 1970 เวลา 00:00:00 น. ถ้าไม่ระบุจะเป็นค่าเวลาปัจจุบัน

    รูปแบบของ Date()

    ค่าแรกของฟังก์ชั่น date() มีรูปแบบต่างๆ มากมาย เราจะแสดงให้ดูตัวอย่างบางตัว:

  • d คือ แสดงวันของเเดือน มีค่า 01-31
  • m คือ แสดงเดือน มีค่า 01-12
  • Y คือ แสดงปี มีค่าเป็น ค.ศ. 4 หลัก
    ค่าในรูปแบบต่างๆ สามารถดูได้จาก php date function

    ส่วนตัวอักขระ เช่น "/" , "." , "-" สามารถจะเพิ่มเข้าไประหว่างตัวอักษรของรูปแบบเวลาได้
    <?php
    echo date("Y/m/d");
    echo "<br />";
    echo date("Y.m.d");
    echo "<br />";
    echo date("Y-m-d");
    ?> 
    
    ค่าที่ได้จะเป็น

    2006/07/11
    2006.07.11
    2006-07-11

    การสร้าง timestamp

    การสร้าง timestamp เป็นเวลาปัจจุบันจะใช้ฟังก์ชั่น time() จะได้ค่าตัวเลข 10 หลักแบบนี้ 1338560231 ซึ่งถ้าเราไม่ใส่ค่า timestamp จะได้ค่าเดียวกันกับ time()

    ค่า timestamp เป็นค่าที่จะใส่หรือไม่ก็ได้ในฟังก์ชั่น date() ถ้าไม่ใส่จะเป็นเวลาปัจจุบัน แต่ถ้าเราต้องการระบุเวลาที่แน่นอนล่ะ จะต้องใช้ฟังก์ชั่น mktime() โดยมี syntax ดังนี้:

    mktime(hour,minute,second,month,day,year)
    ตัวอย่างถ้าเราต้องการให้แสดงวันที่ อีก 2 วันข้างหน้าจะเขียนดังนี้

    <?php
    $tomorrow = mktime(0,0,0,date("m"),date("d")+2,date("Y"));
    echo "วันอีก 2 วันข้างหน้า คือ ".date("d/m/Y", $tomorrow);
    ?> 
    
    ค่าที่ได้จะเป็น

    วันอีก 2 วันข้างหน้า คือ 03/06/2012

    PHP Advanced