วันพฤหัสบดีที่ 28 มกราคม พ.ศ. 2559

PHP

ประเภทข้อมูล   
การทำงานกับประเภทข้อมูลของ PHP แตกต่างจากภาษาอื่นเล็กน้อย โดย PHP เป็นภาษา richly typed ที่ตัวแปรไม่ต้องมีการประกาศเป็นประเภทข้อมูลเจาะจง เพราะ engine กำหนดประเภทที่ใช้ตามกฎ บางครั้งเรียกสิ่งนี้ว่าประเภทข้อมูลไดนามิคส์ 

PHP สนับสนุนประเภทข้อมูล
1. integer
2. float หรือ double
3. string
4. boolean
5. array
6. object
7. Integer

integer คือจำนวนเต็ม ตามปกติความแม่นยำขึ้นกับระบบปฏิบัติการ ส่วนใหญ่เป็นขนาด 32 บิต ใน PHP ไม่มี unsigned integer ดังนั้นค่ามากที่สุดของจำนวนเต็มคือ 2 พันล้าน เมื่อเกินจำนวนมากที่สุดของ integer ใน PHP จะแปลงไปเป็น float แทนที่จะไปเป็นจำนวนเต็มลบเหมือนภาษาอื่น

<?php

$large = 2147483647;
var_dump($large);

$large = $large + 1;
var_dump($large);

?>

ผลลัพธ์ คือ
Int(2147483647)                  float(2147483648)

integer ระบุในคำสั่งเป็นระบบเลขฐาน 8, ฐาน 10 หรือ ฐาน 16 ได้
           
การหารเลขจำนวนเต็มใน PHP จะไม่ให้ผลลัพธ์เป็นจำนวนเต็ม เช่น นิพจน์
5 / 2
PHP มีผลลัพธ์คือ 2.5 ด้วยประเภทข้อมูล float แทนที่จะเป็นจำนวนเต็ม 2 เหมือนกับภาษาอื่น ถ้าต้องการค่าจำนวนเต็มจากการหาร ต้องมีการแปลงค่าเป็นจำนวนเต็ม หรือใช้ฟังก์ชัน round

Float
float คือจำนวนทศนิยมหรือจำนวนจริง มีขนาด 64 บิตด้วยความแม่นยำของทศนิยม 14 ตำแหน่ง PHP ไม่ได้แบ่งออกเป็น single และ double ตามความแม่นยำเหมือนกับภาษาอื่น อย่างไรก็ตาม PHP ยอมรับคีย์เวิร์ด double เพิ่มเติมจาก float ที่มีความหมายตรงกัน

<?php

$floatvar1 = 8.457;       
$floatvar2 = 5.23e3;       // เหมือนกับ 5230.0
$floatvar3 = 7.2e+4;      // เหมือนกับ 72000.0
$floatvar4 = 1.234e-4;    // เหมือนกับ 0.0001234
$floatvar5 = 100000000000;        // ใหญ่เกินไปสำหรับ integer แปลงเป็น float
?>

ข้อควรระวัง      สำหรับ float ควรระวังความจำกัดด้านความแม่นยำ การคำนวณที่ต้องการความแม่นยำสูงอาจจะมีปัญหาได้ แต่การประยุกต์ทั่วไปควรจะเพียงพอ

String
string เป็นชุดของตัวอักษร ใน PHP ตัวอักษรมีค่า 8 บิต
ค่า string ระบุได้ 3 วิธี

Single Quoted

ข้อความ single quoted เป็นชุดตัวอักษรที่เริ่มต้นและปิดท้ายด้วย single quote(‘)
echo 'ข้อความ single quote';

ในการรวม single quote ภายในข้อความให้วาง backslash (\) ด้านหน้า ที่เรียกว่าตัวอักษร escape
echo 'การแสดง single quote \' ';

Double Quoted
ข้อความ double quoted คล้ายกับข้อความ single quoted ยกเว้น ตัวประมวลผลภาษา PHP ตัดสิ่งเหล่านี้เพื่อค้นหาและแทนที่ ชุดตัวอักษร escape และตัวแปร
นอกจากนี้ตัวอักษร escape \" ต้องการแทรก double quote ภายในข้อความ double quoted ต่อไปเป็นชุด escape ที่ PHP รู้จัก

ตาราง 1.2.1 escape
Escape
ผลลัพธ์

\n
ตัวอักษรขึ้นบรรทัดใหม่ (char(10) หรือ 0x0a/10 ใน ASCII)

\r
ตัวอักษร Carriage return (char(13) หรือ 0x0a/13 ใน ASCII)

\t
ตัวอักษรแท็บ

\\
ตัวอักษร backslash

\$
ตัวอักษรดอลลาร์

\0ตัวเลขฐานแปด
ตัวอักษรที่แสดงโดยค่าในช่วง 0-255 ด้วยการระบุเป็นเลขฐานแปด

\xตัวเลขฐานสิบ
ตัวอักษรที่แสดงโดยค่าในช่วง 0-255 ด้วยการระบุเป็นเลขฐานสิบ


        
             PHP ไม่สนับสนุนตัวอักษร escape อื่น และถ้าไม่ตรงกับชุดตัวอักษรตามตาราง 1.1 จะพิมพ์ backslash และตัวอักษรนั้น

<?php
echo "ข้อความ double quote ";
echo "<br/>";
echo "แสดงผล double quote \" - \" ";
echo "<br/>";
echo "แสดงผล double quote \042 - \042 ";
echo "<br/>";
echo "แสดงผล backslash และ ก \ก ";
echo "<br/>";
?>

Heredoc Notation

             วิธีที่ 3 สำหรับข้อความนำส่วนหัวในสคริปต์ PHP คือใช้ไวยากรณ์ heredoc ไวยากรณ์นี้เหมือนกับสคริปต์ PERL และ Bourne Shell ข้อความเริ่มต้นด้วย <<< และ identifier จนกระทั้งสิ้นสุดด้วย identifier วางชิดซ้ายและ semicolon (;)
<?php
      echo <<<TITLE
<h1 align="center">แสดงข้อความด้วย Heredoc</h1>
<p>การแสดงข้อความด้วย heredoc


             สามารถทำงานกับข้อความได้สะดวก <br/>
การเว้นบรรทัดใช้ br tag <br/>
</p>
</p>
TITLE;
?>

             ห้ามวางเครื่องหมายต่าง เช่น จุด คูณ บวก ติดกับ identifier จะมีผลต่อการกระจายของ PHP

Boolean
boolean เป็นประเภทข้อมูลง่ายที่สุดใน PHP และ แสดงเป็นค่าไบนารี TRUE หรือ FALSE, YES หรือ NO,1 หรือ 0 ค่าของตัวแปร boolean สามารถเป็นได้ทั้ง TRUE หรือ FALSE   2 คีย์เวิร์ดที่ตัวพิมพ์ไม่มีผล

<?php
$bln1 = tREu;
$bln2 = TrUE;
$bln3 = fAlsE;
$bln4 = FaLSe;
?>

Array
array เป็นวิธีความสามารถสูงในการจัดกลุ่มข้อมูลด้วยวิธียืดหยุ่นในการเข้าถึง การใช้ array สามารถใช้เป็นตัวเลขอย่างง่าย หรือการจับคู่อย่างยืดหยุ่นด้วยการเข้าถึงค่าผ่าน คีย์ประเภทหลังเรียกว่า  associative array
การประกาศ array ใช้เมธอด array เพื่อการสร้างค่าเริ่มต้นและส่งอ๊อบเจค array ที่เก็บค่าเหล่านี้

<?php
$peripheral = array("Laser Print", "Inkjet", "Modem", "CD-ROM");
$prime = array(1, 2, 3, 5, 7, 11, 13, 17);
$mixed = array(234.22, "คอมพิวเตอร์", 45, array(4, 6, 8), TRUE);
?>
ตามค่าเริ่มต้น ค่าภายใน array ได้รับการกำหนดเป็นดัชนีที่เริ่มต้นจาก 0 ในการเพิ่มหน่วยข้อมูลใหม่ด้วยไวยากรณ์นี้

<?php
$peripheral[ ] = "LAN Card";             // หน่วยข้อมูลเพิ่มใหม่ที่ดัชนี 4
$peripheral[ ] = "VGA Card";             // หน่วยข้อมูลเพิ่มใหม่ที่ดัชนี 5
?>
รวมทั้งสามารถระบุดัชนีของรายการเพิ่มใหม่ ถ้าใหญ่กว่าดัชนีสุดท้ายใน array จะมีช่องว่างลำดับตัวเลข

<?php
$peripheral[45] = "CD Writer";
?>
            การเข้าถึงหน่วยข้อมูลใน array สามารถทำโดยการให้ตัวเลขดัชนีในวงเล็บสี่เหลี่ยม
<?php
echo $peripheral[2];             // พิมพ์ผล Modem
?>
การระบุค่าด้วยข้อความแทนที่ตัวเลขเริ่มต้น การกำหนดระบุคู่ คีย์-ค่า ด้วย => operator เมื่อสร้าง array
<?php
$developer = array("software" => "PHP", "website" => "www.php.net",
"database" => "MySQL", "decription" => "Web Developer");
echo $developer["website"]               // พิมพ์ผล www.php.net
?>

             array เป็นเครื่องมือที่สำคัญใน PHP ดูเพิ่มเติมได้ในบทที่ 4 "การทำงานกับ Array"

Object
เมื่อ PHP สนับบสนุน object-oriented programming ในเวอร์ชันนี้มีการปรับปรุงและบางสิ่งอาจจะมากกว่าภาษาอื่น โดยย่อ object-oriented programming คือการใช้ประเภทข้อมูลใหม่ (เรียกว่า “object” หรือ “class”) ดังนั้นแทนที่การใช้ชุดของฟังก์ชัน แต่สามารถใช้เมธอดและตัวแปรกับข้อมูลโดยตรง ดูเพิ่มเติมบทที่ 7 “Object Oriented Programming”


             การเข้าถึงตัวแปรหรือเมธอดบนอ๊อบเจค ใช้ -> operator ใน PHP ถ้ามี Rectangular class อ่านค่าความกว้าง (width) ความยาว (length) และเมธอดคำนวณพื้นที่ คำสั่งสามารถเขียนได้ดังนี้
<?php
$shape = new Rectangular ();
$shape->width = 20;
$shape->length = 30;
echo "พื้นที่สี่เหลี่ยม คือ: ".$shape->calculateArea();
?>

Variable Expansion
ตามที่ได้กล่าวถึงข้อความ double quoted และ heredoc ใน PHP สามารถเก็บการอ้างอิงตัวแปรด้วยเครื่องหมาย  $ และ engine จะทราบว่าต้องทำอะไร


             Variable Expansion ใน PHP เป็นส่วนการทำงานความสามารถสูงที่ให้ด้านความเร็วและการผสมเนื้อหากับโปรแกรม มี 2 วิธีในการใช้ส่วนการทำงานนี้คือ แบบง่ายและแบบซับซ้อน แบบแรกสำหรับการตัวแปร ค่า array หรือคุณสมบัติอ๊อบเจค ขณะที่แบบหลังสำหรับส่วนขยายแม่นยำมากกว่า
ตัวอย่างแบบง่าย

<?php
$type = "simple";
echo "นี่เป็นตัวอย่างของส่วนขยาย '$type' ";
$type = array("แบบง่าย", "แบบซับซ้อน");
echo<<<THE_END
 เช่นกัน นี่เป็นตัวอย่างของส่วนขยาย array '$type[0]'
THE_END;
?>
เมื่อ PHP processor เห็น $ ในข้อความ double quoted หรือ heredoc จะอ่านตัวอักษรทั้งหมดจนสิ้นสุดชื่อตัวแปร, ดัชนีของ array หรือคุณสมบัติอ๊อบเจค จากนั้นจะประเมินผลลัพธ์และวางค่าในข้อความผลลัพธ์
ตามตัวอย่าง ถ้าไม่ใส่ single quoted (‘) ล้อมตัวแปร $type ไว้ PHP จะแสดงผลลัพธ์เป็นความผิดพลาด
การแก้ปัญหานี้สามารถใช้ส่วนขยายตัวแปรแบบซับซ้อน การใช้ให้หุ้มส่วนขยายด้วยวงเล็บปีก { } ในคำสั่ง PHP processor มองหาวงเล็บปีกกาทันทีต่อจาก $ ที่ระบุแหล่งส่วนขยายตัวแปร กรณีอื่นแสดงผลวงเล็บปีกและสิ่งที่ติดตามมา

<?php
$hour = 16;
$kilometres = 4;
$content = "ลูกอม";
echo "   4pm ในเวลา 24 ชั่วโมง คือ  {$hour}00 นาฬิกา<br/>\n";
echo <<<MSG
ระยะทาง {$kilometres}000 เมตร เท่ากับ {$kilometres} กม.<br/>
กระปุกอยู่ที่นี่ และเต็มไปด้วย${content}<br/>
MSG;
?>
ถ้าต้องการมีตัวอักษร {$ ในผลลัพธ์ จะต้อง escape เป็น {\$

การแปลงประเภทข้อมูล
ตามที่ได้กล่าวไว้ว่า PHP เป็นภาษา richly type และ engine สามารถแปลงระหว่างประเภทข้อมูลต่างกันในเวลาเรียกใช้

PHP สามารถแปลงหรือเจาะจงประเภทข้อมูลได้

วิธีพื้นฐาน
วิธีพื้นฐานในการแปลงประเภทข้อมูลตัวแปรมี 2 วิธีคือ   

การแปลงประเภทเชิงนัยยะ
การแปลงเชิงนัยยะ (implicit conversion) เป็นการประเภทข้อมูลที่เกิดขึ้นโดย PHP engine อย่างอัตโนมัติ เมื่อมีการประมวลผล PHP จะกำหนดประเภทข้อมูลให้ตัวแปรให้ตามความเหมาะสม

การคำนวณเลขคณิต ถ้ามี operand ที่เป็น integer กับอีกตัวเป็น float จากนั้นตัวแรกจะได้รับการประเมินเป็น float ถ้า operand เป็น string และอีกตัวเป็น integer กรณีนี้ PHP จะแปลง string เป็น integer ก่อนการคำนวณ
นิพจน์ Boolean สำหรับกรณีการประเมินนิพจน์ Boolean ผลลัพธ์ที่เกิดขึ้น PHP จะแปลงเป็น Boolean ก่อนทำงานต่อไป
เมธอดที่ต้องการ string เมธอดหรือ operator เช่น echo, print หรือ string concatenation operator (.) ต้องการอากิวเมนต์หรือ operand เป็น string ในกรณีนี้ PHP จะแปลงตัวแปรที่ไม่ใช่ข้อความให้เป็นข้อความ
การแปลงประเภทเชิงประจักษ์

ถึงแม้ว่า PHP จะแปลงตัวแปรให้อย่างอัตโนมัติ แต่ยังมีทางเลือกในการระบุประเภทข้อมูลได้เองด้วยการบังคับให้ภาษาแปลงประเภทข้อมูลโดยทำในสิ่งที่เรียกว่า type cast การกำหนดให้เติมหน้าตัวแปรด้วยประเภทข้อมูลในวงเล็บ จากนั้น PHP จะพยายามแปลงให้

(int), (integer) แปลงเป็นเลขจำนวนเต็ม integer
(float), (double), (real) แปลงเป็นเลขทศนิยม float
(string) แปลงเป็นข้อความ string
(bool), (boolean) แปลงเป็นค่า Boolean
(array) แปลงเป็น array
(object) แปลงเป็น object
<?php

$testvar = 3.7;
$result = int($testvar);               // ผลลัพธ์เป็นจำนวนเต็ม 3

?>

การเจาะจงแปลงประเภทข้อมูล
ตัวอย่างการแปลงเป็น integer

<?php

echo (int)"642";             // แสดงผล 642
echo (int)"+5678";         // แสดงผล 5678
echo (int)"84e2";            // 84 - หยุดการกระจายที่ e
echo (int)"3 ตัว";            // 3 - หยุดที่ช่องว่าง
echo (int)"หมู 3 ตัว";      // 0 - ไม่ใช่ตัวเลข
echo (int)"0642";           // 642 - เลขฐาน 10 เท่านั้น
echo (int)"0xff";            // 0 - เลขฐาน 10 เท่านั้น หยุดที่ x
echo (int)"-4321";          // -4321 - จำนวนลบ
echo (int)".324243";       // 0 - หยุดที่ .
?>

ตัวอย่างการแปลงเป็น float

<?php

$float1 = (float)"+4567";            // ค่า float : 4567.0
$float2 = (float)"-123"; // -123.0
$float3 = (float)"123.456";         // 123.456
$float4 = (float)"1.23456e2";      // 123.456
$float5 = (float)"1.234e-2";        // 0.001234
$float6 = (float)"1000000000000";           // 1e12 (หนึ่งล้านล้าน)
?>

ตัวอย่างการแปลงเป็น Boolean

<?php

// การแปลงจากค่าตัวเลข integer และ float           
$bool1 = (bool)0;           // FALSE
$bool2 = (bool)0.0;        // FALSE
$bool3 = (bool)-10;        // TRUE
$bool4 = (bool)456456e-12;        // TRUE
$bool5 = (bool)(0.3 + 0.2 - 0.5); // TRUE - เพราะไม่เท่ากับ 0 พอดี

// การแปลงจาก string

$bool6 = (bool)"happy"; // TRUE
$bool7 = (bool)"";          // FALSE
$bool8 = (bool)"0";        // FALSE
$bool9 = (bool)"TRUE"; // TRUE
$bool10 = (bool)"FALSE";          // TRUE! ไม่ใช่ค่าว่างและไม่ใช่ "0"
?>

ตัวอย่างการแปลงเป็นอ๊อบเจค

<?php

$variable = (object)234.234;
echo $variable->scalar;           // 234.234

?>

การแปลงตัวแปรหรือนิพจน์เป็น array สามารถใช้ประเภทข้อมูล (array) หรือฟังก์ชัน array โดยจะแปลงเป็น 1 หน่วยข้อมูลของค่าตัวแปรหรือนิพจน์นั้น

ส่วนอ๊อบเจคแปลงเป็น array ได้ โดย คีย์มาจากชุดของตัวแปรสมาชิกและค่ามาจากค่าของตัวแปรสมาชิกในอ๊อบเจค

ฟังก์ชันประเภทข้อมูล
ฟังก์ชันที่มีประโยชน์ในความเข้าใจกับประเภทข้อมูลและตัวแปรใน PHP

is_type
ฟังก์ชันกลุ่มนี้ใช้บอกประเภทข้อมูลของตัวแปร

is_integer
is_float
is_numeric (ส่งออก TRUE ถ้าอากิวเมนต์เป็น float, integer หรือ ข้อความตัวเลข)
is_string
is_bool
is_array
is_object
is_null
ฟังก์ชันเหล่านี้ส่งออกค่า Boolean ที่บอกค่าเป็นประเภทข้อมูลที่ระบุว่าใช่ (TRUE) หรือ ไม่ใช่ (FALSE)

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

"boolean"
"integer"
"double" (หมายเหตุ ตามเหตุผลทางประวัติศาสตร์ และไม่ส่งออกค่าเป็น float)
"string"
"array"
"object"
"resource"
"NULL"
"unknown type"
 
settype
ฟังก์ชัน settype ต้องการ 2 อากิวเมนต์คือ ตัวแปร และประเภทข้อมูลที่ต้องการแปลง ด้วยการระบุเป็นนิพจน์ข้อความ ฟังก์ชันนี้ส่งออกค่า Boolean ที่ระบุถึงความสำเร็จ ตัวแปรนั้นจะถูกปรับปรุง

<?php

$var = 743.256;
settype($var, "string");

// $var มีค่า "743.256" และประเภทเป็น string

?>

การเพิ่มเนื้อหาแบบไดนามิคส์
เหตุผลหลักในการใช้สคริปต์ด้านแม่ข่าย คือ ความสามารถในการให้เนื้อหาแบบไดนามิคส์ไปยังผู้ใช้ บทบาทที่สำคัญของการประยุกต์เพราะเนื้อหาเปลี่ยนตามความต้องการของผู้ใช้ หรือตลอดเวลา  PHP ช่วยให้ทำงานลักษณะนี้ได้ง่าย ขอเริ่มต้นด้วยตัวอย่างง่าย ๆ แทนที่ PHP ใน processorder.php ด้วยคำสั่งต่อไปนี้
                       
                <?
                        echo "<p>เวลาประมวลผลใบสั่งซื้อ";
                        echo date("H:i, jS F");
                        echo "</p>";
                ?>

ในคำสั่งนี้ใช้ฟังก์ชัน  date () ของ PHP เพื่อบอกวันที่และเวลาประมวลผลใบสั่งซื้อ ที่จะต่างกันในการทำงานของสคริปต์แต่ละครั้ง ผลลัพธ์ของการเรียกสคริปต์

การเรียกฟังก์ชัน
ให้ดูการเรียก  date() นี่คือรูปแบบทั่วไปในการเรียกฟังก์ชัน  PHP  มี ไลบรารีของฟังก์ชันให้ใช้พัฒนาโปรแกรมประยุกต์เว็บ

date("H=i,jsF")

สังเกตว่ามีการส่งผ่านข้อมูลที่เป็นข้อความ ให้กับฟังก์ชันภายในวงเล็บ ข้อความที่ส่งผ่านเรียกว่า อากิวเมนต์หรือพารามิเตอร์ของฟังก์ชัน  อากิวเมนต์เหล่านี้คือ การนำเข้าโดยฟังก์ชันเพื่อให้ผลลัพธ์ที่ต้องการฟังก์ชัน  date()

การต่อข้อความ
การต่อข้อความใช้ จุด (.) ตัวอย่างเช่น
echo   $soapqty." ก้อน <br/>";

อีกวิธีหนึ่ง  คือ
echo   "$soapqty  ก้อน <br>";

การกำหนดค่าให้กับตัวแปร
ตัวแปร PHP ไม่ต้องประกาศก่อนการใช้ ซึ่งเป็นความแตกต่างของ PHP จากภาษาอื่น ซึ่งตัวแปรใน PHP แสดงโดยเครื่องหมายดอลลาร์ ($) ตามด้วยชื่อตัวแปรที่เริ่มต้นด้วยตัวอักษรหรือเส้นใต้ (underscore) จากนั้นจึงตามด้วยตัวอักษร เส้นใต้ หรือตัวเลข รวมถึงชุดตัวอักษรส่วนขยายบางส่วน เช่น ลาติน ไทย สำหรับตัวอักษรส่วนขยายอื่น เช่น พยัญชนะ จีนและญี่ปุ่น ยังไม่ยอมรับ

<?php

$varname = "varname";       // ok
$var____Name = "oink";      // ok
$__45var = 45;         // ok
$กิน = "กิน";                 // ok
$45__var = 45;         // ไม่ได้ – ขึ้นต้นตัวเลข
// ตัวอักษรจีนและญี่ปุ่นไม่สามารถเป็นชื่อตัวแปร

?>

การทำงานกับฟอร์ม
ฟอร์มเป็นกลไกการส่งข้อมูลจาก browser กับแม่ข่าย

การส่งข้อมูล
คุณสมบัติ method มี 2 ค่าที่ควบคุมการส่งข้อมูลไปยังแม่ข่ายเมื่อส่งฟอร์ม คือ POST และ GET

เมธอด HTTP GET ส่งข้อมูลทั้งชุดด้วยการต่อท้าย URI ที่ระบุในคุณลักษณะ action บนฟอร์ม ข้อถูกจับต่อท้ายเครื่องหมายคำถาม (?) และแบ่งฟิลด์ด้วยตัวอักษร ampersand (&) ชื่อแต่ละฟิลด์แบ่งจากค่าด้วยเครื่องหมายเท่ากับ ตัวอักษรที่ทำให้ URI ไม่ทำงาน เช่น whitespace, เครื่องหมายคำถาม, เครื่องหมายเท่ากับ หรือตัวอักษรพิมพ์ไม่ได้ จะได้รับการเข้าเป็นเลขฐานสิบหก

การส่งด้วยเมธอด GET มีข้อดีคือ ทำการตรวจสอบข้อมูลได้ง่ายเพราะมองเห็นได้ใน URI แต่มีข้ออ่อนบางประการ

ถ้า URI เป็นข้อความยาวมากของฟอร์มที่ฟิลด์จำนวนมาก ถึงแม้ว่า browser ส่วนใหญ่สามารถควบคุมข้อความนำเข้า แต่การอ่าน URI ทำได้ยากและการกระจายยุ่งยาก

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

เมธอด GET ไม่สนับสนุนการอัพโหลดไฟล์กับฟอร์ม
เมธอด GET ไม่สนับสนุนตัวอักษรอื่นนอกจาก ASCII จึงต้องมีงานเพิ่มขึ้น ถ้าส่งด้วยตัวอักษรส่วนขยาย

เมธอด POST เป็นอีกวิธีในการส่งข้อมูล โดยส่งในส่วน body ของคำขอ HTTP ไปยังแม่ข่าย เมธอดนี้มีข้อได้เปรียบคือ เห็นน้อยกว่าเมธอด POST ควบคุมชุดตัวอักษรได้มากกว่า ASCII และไม่จำกัดโดย "history" ของ browser

คำแนะนำการเลือกเมธอดดังนี้
GET ใช้กับข้อมูลที่ส่งไปสำหรับการคิวรี่และไม่มีการปรับปรุงข้อมูลบนแม่ข่าย
POST ใช้กับกรณีอื่น

การเข้าถึงตัวแปรฟอร์ม
จุดรวมของการใช้ฟอร์มใบสั่งซื้อ คือ การรวบรวมใบสั่งซื้อของลูกค้า  การเก็บรายละเอียดสิ่งที่ลูกค้าป้อนลงไปทำได้ง่ายใน  PHP
ภายในสคริปต์  PHP สามารถเข้าถึงแต่ละฟิลด์ของฟอร์มในฐานะตัวแปรที่มีชื่อเดียวกับฟิลด์ของฟอร์มให้ดูตัวอย่างคำสั่งใน processorder.php

<?php
$printdate = date("H:i, jS F");

echo <<<ORDERSTR

      <p>เวลาประมวลผลใบสั่งซื้อ {$printdate}</p>
ผู้สั่งซื้อ {$_GET['name']}<br/>
<p>รายละเอียดการสั่งซื้อ:<br/>
{$_GET['shampooqty']} ขวด  แชมพู<br/>
{$_GET['conditionerqty']} ขวด  ครีมนวดผม<br/>
{$_GET['soapqty']} ก้อน  สบู่<br/>
</p>

ORDERSTR;

?>

ถ้า browser ได้รับการ refresh ผลลัพธ์ของสคริปต์ จะแสดงตามภาพ 1.1.3 ค่าแต่ละประเภทจะปรากฎออกมา

ตัวแปรฟอร์ม

            ข้อมูลจากสคริปต์จะส่งผ่าน superglobal array คือ $_GET หรือ $_POST ที่สามารถเข้าถึงได้ผ่านตัวแปร  PHP ชื่อตัวแปรนี้เริ่มต้นด้วยเครื่องหมายดอลลาร์ ($) การเข้าถึงข้อมูลของฟอร์มผ่านตัวแปรเขียนได้ 2 วิธ

วิธีที่ 1 คือ การใช้รูปแบบย่อ เช่น $soapqty

วิธีที่ 2 คือ ใช้นิพจน์แบบนี้
$$_GET["soapqty"]

เวอร์ชัน 4 รับข้อมูลจาก  $HTTP_GET_VARS และ $HTTP_POST_VARS ที่ไม่ได้เป็น superglobal array สำหรับ array นี้ยังมีอยู่และใช้ได้โดยการตั้งค่า register_long_arrays เป็น on ในไฟล์ php.ini

ถ้าตั้งค่าคำสั่ง register_globals ในไฟล์ php.ini เป็น on สามารถใช้ได้เฉพาะรูปแบบ short ค่านี้เป็นค่าเริ่มต้นปกติของไฟล์ php.ini

ถ้าตั้งค่า register_globals เป็น off สามารถใช้วิธีที่ 2 รวมถึงต้องตั้งค่าคำสั่ง track_var เป็น  on

รูปแบบเต็มจะทำงานได้เร็วและหลีกเลี่ยงการสร้างตัวแปรอย่างอัตโนมัติ  อย่างไรก็ตาม รูปแบบย่ออ่านได้ง่าย และเหมือนกับ PHP เวอร์ชันก่อน

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

nl2br
ถ้าสังเกตให้ดีจะพบว่าข้อความที่มีการเว้นบรรทัดนั้น เมื่อแสดงผลด้วย HTML จะไม่ขึ้นบรรทัดใหม่ใน browser ของผู้ใช้ เนื่องจากการตัด whitespace ดังนั้นการแสดงผลให้เว้นบรรทัด ให้เรียกฟังก์ชัน nl2br() ที่จะแปลงตัวอักษรบรรทัดใหม่ให้เป็น </br> tag ตามสคริปต์นี้

<?php

$stringval =<<<NLSTRING

นี่เป็นตัวอย่างข้อความที่
ประกอบด้วยการขึ้นบรรทัดใหม่
และต้องการดูผลลัพธ์
ให้เหมือนกับข้อความต้นทางนี้

NLSTRING;
                  echo nl2br($stringval);
?>
ผลลัพธ์คือ
นี่เป็นตัวอย่างข้อความที่
ประกอบด้วยการขึ้นบรรทัดใหม่
และต้องการดูผลลัพธ์
ให้เหมือนกับข้อความต้นทางนี้

var_dump
มีบ่อยครั้งที่อาจจะมีการทดลองหรือเขียนโปรแกรม และมีความต้องการดูเนื้อหา รวมทั้งธรรมชาติแบบไดนามิคส์และไม่มีการประกาศประเภทข้อมูลให้ตัวแปรอย่างชัดเจน หมายความว่าจะไม่ทราบประเภทข้อมูลปัจจุบันที่แน่นอน ฟังก์ชัน var_dump แสดงประเภทและค่าของตัวแปรในผลลัพธ์ สำหรับข้อความ var_dump ให้จำนวนตัวอักษรในข้อความ

<?php

$floatval = 123e-456;
$intvar = 123456;
$stringval = "Hello world";

var_dump($floatval);      echo "<br/>\n";
var_dump($intvar);        echo "<br/>\n";
var_dump($stringval);    echo "<br/>\n";
?>
ผลลัพธ์จากคำสั่งข้างบนคือ
float(0)
int(123456)
string(10) “Hello world”
print_r
ฟังก์ชัน print_r คล้ายกับ var_dump แต่สร้างผลลัพธ์ที่อ่านได้ง่าย print_r  ให้มีการเพิ่มค่าตัวเลือก(เรียกว่า พารามิเตอร์) ที่บอกให้ฟังก์ชันนี้ส่งออกผลลัพธ์เป็นข้อความแทนที่การส่งผลลัพธ์ออกไป

<?php

$stringval = "เรายินดีให้บริการสินค้าหัตถกรรมฝีมือปราณีต";

print_r ($stringval);    echo "<br/>\n";
$result = print_r ($stringval, TRUE);
echo $result;

?>
ผลลัพธ์จากคำสั่งข้างบนคือ
เรายินดีให้บริการสินค้าหัตถกรรมฝีมือปราณีต
เรายินดีให้บริการสินค้าหัตถกรรมฝีมือปราณีต

var_export
ฟังก์ชันแสดงผลสุดท้ายคือ ฟังก์ชัน var_export ที่คล้ายกับ var_dump มาก ยกเว้นผลลัพธ์ได้รับการนำเสนอค่าของข้อมูลแบบคำสั่ง PHP               

<?php

$arr = array(1, 2, 3, 4);
var_export($arr);

?>
ผลลัพธ์จากคำสั่งข้างบนคือ
array( 0 => 1, 1 => 2, 2 => 3, 3 => 4)

Quoted
ในการเขียนคำสั่งข้อความโดยเฉพาะคำสั่ง echo การใช้ quoted จะสร้างความสับสนให้กับตัวกระจาย PHP ได้ เช่น
echo "<td width="15%">";


             คำสั่งนี้สร้างความผิดพลาด ดังนั้นต้องใช้ quoted ต่างกัน
echo "<td width='15%'>";
หรือ
echo '<td width="15%">';

             

             ในการเขียนประโยคคำสั่งคิวรี่ การใช้ quoted ภายในประโยคคำสั่งจะทำตัวกระจาย MySQL เกิดความสับสน
INSERT INTO message VALUES("การสัมนาเรื่อง "การดูแลสุขภาพ" เริ่มเวลา 16.00 ");
การคำสั่งต้องใช้ slash (\) กับ quoted ที่ไม่ใช้ส่วนการห้อหุ้ม
INSERT INTO message VALUES("การสัมนาเรื่อง \"การดูแลสุขภาพ\" เริ่มเวลา 16.00 ");

ที่มา : http://www.widebase.net/internet/php/phpbasic/phpbasic0200.shtml