บทความ

กำลังแสดงโพสต์ที่มีป้ายกำกับ php

php session กับ domain name ที่มี www และ ไม่มี www

รูปภาพ
ปวดหัวอยู่หลายวัน กับเรื่อง Session ของ PHP เรื่องก็มีอยู่ว่า ใช้ Session ของ PHP ในหน้ารายวิชา เพื่อจำเลขประจำตัวของผู้ใช้ เพื่อนำมาใช้หาข้อมูลหรือเก็บข้อมูลของผู้ใช้ ในหน้าอื่น ๆ เช่น เก็บคะแนนในหน้า Pretest, Posttest, และการแสดงผลการเรียน เป็นต้น ปัญหาคือ ใช้กับ Chrome แล้ว ปรากฏว่า Session หาย เมื่อคลิกกลับไปหน้าเมนูหลัก คือ พออยู่หน้ารายวิชา มี Session แจ้งบอกว่า ใคร กำลัง login อยู่ แต่พอคลิกกลับไปหน้าเมนูหลัก และคลิกกลับมาที่หน้าวิชาเดิม ปรากฏว่า ไม่เห็นมีชื่อคนที่ login ทั้ง ๆ ที่ยังไม่ได้ logout ใช้กับ Browser อื่น ๆ เช่น IE กลับไม่มีปัญหาอะไร ใช้ได้ตามปกติ สาเหตุ Server ที่ใช้งาน กำหนด Domain โดยไม่ต้องมี www นำหน้า เช่น elearning-xyz.net ก็เข้าไปที่เว็บได้เลย การลิงค์จากหน้าเมนูหลัก ไปยังหน้าวิชา ใช้การลิงค์แบบไม่มี www เช่น elearning-xyz.para.htmlดูเหมือนว่า Chrome จะไม่เติม www นำหน้าให้ แต่  Browse เติมให้ เป็น www.elearning-xyz.net/para.html จึงทำให้ Session ยังคงอยู่ ผมก็ไปแก้ลิงค์ใหม่ ให้เป็น www.elearning-xyx.net/para.html ทั้งหมด ดูเหมือนว่า จะแก้ปัญห

การส่งข้อมูล จาก jQuery ไปยัง PHP

รูปภาพ
jQuery เป็น Javascript Library ที่ช่วยให้การใช้งาน Javascript สะดวก รวดเร็วขึ้น เช่น ตัดปัญหาเรื่อง Browser ว่าจะใช้ได้หรือไม่ และอื่น ๆ อีกมากมาย และที่สำคัญ ในตัวอย่างนี้ จะเป็นการใช้ jQuery เพื่อส่งข้อมูลไปยัง PHP เพื่อเก็บลงฐานข้อมูลต่อไป แต่ในตัวอย่างนี้ จะเป็นการส่งข้อมูลไปยัง PHP และให้ PHP ส่งกลับมาที่ JQuery  และแสดงผ่านหน้าจอ Popup ของ JQuery การใช้งานตามตัวอย่างนี้ จำเป็นที่ต้องทำเครื่องคอมให้เป็น Server หรือถ้าใครมี Server ที่ใช้งานได้ เช่นเดียวกัน โดยสร้างห้องบน Server และบันทึกไฟล์ต่าง ๆ ให้อยู่ในห้องเดียวกัน เพื่อความสะดวก จะได้ไม่ต้องอ้างอิงยืดยาว ในตัวอย่างนี้ ใช้ XAMPP เพื่อจำลองเครื่อง Notebook ให้เป็น Server ไฟล์ที่จะใช้งาน มี 3 ไฟล์ คือ index.html คือไฟล์หลัก ใช้เป็นแบบฟอร์มกรอกข้อมูล เพื่อส่งข้อมูลผ่าน jQuery ไปยัง PHP jquery-2.2.2.min.js คือไฟล์ jquery ที่ดาวน์โหลดมา เพื่อใช้งาน welcome.php คือไฟล์ PHP สำหรับรับข้อมูล และส่งกลับ ไฟล์ทั้งหมด อยู่ในห้องเดียวกันบน Server ก่อนอื่น ต้องไปดาวน์โหลด jQuery มาก่อน ที่ http://www.jquery.com การดาวน์โ

การส่งค่าตัวแปรข้ามไฟล์ ระหว่าง Javascript และไฟล์ php

รูปภาพ
โดยปกติการอ้างอิงไฟล์ภายนอกของ Javascript จะเรียกใช้ไฟล์ นามสกุล .js แต่น้อยคนที่จะทราบว่า Javascript สามารถเรียกใช้งาน และรับค่ามาจากไฟล์ php ได้ นี่เป็นการเปิดโลกทางเลือกใหม่ที่ทำให้ Javascript ซึ่งเป็น Client-side สามารถสื่อสารกับ PHP ซึ่งเป็น Server-side ได้ ทำให้เพิ่มศักยภาพของ Javascript ได้อย่างมหาศาล รูปแบบ การอ้างอิงถึง(เรียกใช้งาน)ไฟล์ myscript.php ของ Javascript (ในไฟล์ HTML)           <script type="text/javascript" src="myscript.php"></script> ถ้าต้องการส่งค่าไปยังไฟล์ PHP ก็สามารถทำได้ ผ่านทาง Query string ดังนี้           <script type="text/javascript" src="myscript.php?id=3&name=george"></script> ไฟล์ PHP จะรับค่าที่ส่งเข้ามา ผ่านทาง global variable  $HTTP_GET_VARS[]   ประเด็นหลัก ก็คือว่า เนื่องจากเราใช้ Javascript เรียก PHP ดังนั้น ผลลัพธ์ที่ออกมาก จะต้องอยู่ในรูปแบบของ Javascript หรือเป็นไปตาม syntax ของ Javascript เท่านั้น ข้างล่างนี้ คือตัวอย่างไฟล์ ip.php ที่อ่านค่า IP และนำมาแสดงผ

ภาษาต่างดาว php UTF-8 TIS-620

รูปภาพ
สำหรับผู้ที่ทำเว็บ เคยหรือไม่ที่หน้าเว็บออกมาเป็นแบบข้างล่างนี้ ปัญหาก็คือ เรื่องของ Encoding หรือ charset นั่นเอง มีอยู่ 2 จุด คือ ในส่วนหัวของ HTML กำหนด charset ไม่ตรงกับเครื่องมือที่ใช้เขียน HTML เช่น ใน EditPlus ตรวจสอบ Encoding ได้ที่ Document > File Encoding > Change File Encoding จะมีตัวเลือกให้เปลี่ยน เป็น UTF-8 หรือ ถ้ากำหนด charset ในส่วนหัวของ HTML เป็น tis-620 ต้องกำหนดให้เป็น ANSI ถ้ากำหนดเป็น UTF-8 แต่ส่วนหัวของ HTML กำหนด charset เป็น tis-620 ก็จะเห็นเป็นตัว ภาษาต่างดาว เหมือนในตัวอย่างข้างบน ซึ่งกำหนด charset ในส่วนหัว HTML เป็น UTF-8  แต่ที่ EditPlus กำหนด Encoding เป็น ANSI เมื่อแก้ไขให้ตรงกัน โดยกำหนด Encoding เป็น tis-620 ปัญหาต่าง ๆ ก็จะหายไป เว็บก็จะอ่านได้ การค้นหาข้อมูลในฐานข้อมูลก็จะทำได้ตามปกติ ปัญหาไม่ได้อยู่แค่นั้น สมมติว่า เว็บอ่านออก แต่ถ้ามีการต้องไปค้นหาข้อมูลในฐานข้อมูล และถ้า Encoding ไม่ตรงกัน ระหว่างหน้าเว็บ HTML หรือ PHP กับ Encoding ของ ฐานข้อมูลบน Server เช่น MySQL การค้นหาก็จะล้มเหลว หาไม่พบ การแก้ไขง่าย ๆ ก็คือ แป

การสร้างข้อสอบออนไลน์ และตรวจข้อสอบ ด้วย PHP

รูปภาพ
ครั้งก่อน เคยพูดเรื่อง การใช้ตัวแปรในตัวแปร ของ PHP และ การส่งค่า Array ของ PHP ซึ่งทำให้การทำงานสะดวก รวดเร็ว ไม่ต้องเขียนโค้ดยาว คราวนี้ จะเป็นการนำมาใช้เรื่องการตรวจข้อสอบ ในตัวอย่างนี้ ประกอบด้วยไฟล์ 2 ไฟล์ คือ ไฟล์ข้อสอบ ชื่อ quiz.php และไฟล์ตรวจข้อสอบ ชื่อ checkit.php ไฟล์ข้อสอบ (quiz.php) มีการส่งค่าเฉลยคำตอบที่ถูก ชื่อวิชา เกณฑ์การสอบผ่าน และให้ผู้เข้าสอบกรอกชื่อตัวเอง การส่งค่าเฉลยคำตอบ ชื่อวิชา และเกณฑ์การสอบผ่าน ส่งแบบ hidden โดยผู้ออกข้อสอบเป็นผู้กำหนด ส่วนชื่อผู้เข้าสอบ ให้ผู้เข้าสอบพิมพ์เองผ่านหน้าจอ ไฟล์ตรวจข้อสอบ(checkit.php) รับค่าจากไฟล์ quiz.php และนำมาตรวจคำตอบ พร้อมทั้งพิจารณาผลสอบว่าสอบผ่านหรือไม่ แล้วแจ้งผลทางหน้าจอ ไฟล์ตรวจข้อสอบ สามารถใช้ตรวจข้อสอบได้หลายวิชา แต่ละวิชามีจำนวนข้อไม่จำกัด โค้ดตัวอย่างไฟล์ข้อสอบ (quiz.php) <?php $subjectName = "ความรู้ทั่วไป"; //เฉลยข้อที่ถูก -- ไม่จำกัดจำนวนข้อ $correctAns=array("ข","ก","ค","ง","ค","ง");  //เกณฑ์การผ่านขั้นต่ำ $cutpoin

การสร้างฟอร์ม และ PHP อยู่ในหน้าเดียวกัน

รูปภาพ
โดยปกติเมื่อมีการสร้างฟอร์มเพื่อเก็บข้อมูลโดยใช้ PHP มักจะมี 2 ไฟล์ คือ ไฟล์ HTML สำหรับสร้างฟอร์มเพื่อเก็บข้อมูล และ เมื่อกดปุ่มส่งข้อมูล จะไปเรียกใช้งานไฟล์ PHP เราสามารถ รวมไฟล์ทั้งสองเข้าด้วยกัน เหลือไฟล์เดียว โดยใช้หลักการดังนี้ สร้างไฟล์ PHP ที่ประกอบด้วย ฟอร์มและโค้ดของ PHP ครั้งแรกให้ตรวจสอบว่ามีการคลิกปุ่มส่ง แล้วหรือยัง โดยใช้ฟังก์ชัน isset() ถ้ามีการคลิกปุ่มแล้ว ให้ไปที่โค้ด PHP ถ้ายังไม่มี ให้ไปที่ฟอร์ม ที่ฟอร์ม Action ให้เรียกชื่อไฟล์ตัวเอง คือ $_SERVER['PHP_SELF'] การใช้ PHP_SELF มีจุดอ่อน Hacker สามารถใช้ Query String ส่ง script พ่วงเข้ามาอาศัยให้ทำงานอื่น ๆ ได้ จึงควรป้องกันไว้ก่อน โดยใช้ฟังก์ชัน htmlentities() เพื่อไม่ให้สามารถพ่วงโค้ดเข้ามาได้ ในกรณีที่ เราใช้ Query String ส่งค่าเข้ามา เช่น ส่งค่า thisid ดังนี้ http://localhost/temp/phpFormDemo.php?thisid=12345 ให้รับค่า thisid ไว้ก่อน (กรณีนี้ใช้ GET แต่สามารถส่งมาทาง POST ก็ได้) และส่งค่าจากฟอร์ม ไปที่โค้ด PHP ผ่านทาง hidden input type ตัวอย่างโค้ด ฟอร์ม และ PHP ในหน้าเดียวกัน <?php $id = $_G

การแบ่งหน้าแสดงผลข้อมูล ด้วย PHP

รูปภาพ
การค้นหาข้อมูลและนำข้อมูลการแสดง ถ้าข้อมูลมีจำนวนมากไม่สะดวกในการดู จำเป็นต้องแบ่งหน้าออกเป็นหน้า ๆ เพื่อให้ดูได้สะดวก ลักษณะเดียวกับที่ Google นำผลการค้นหามาแสดงให้ดู หลักการ กำหนดข้อมูลของ limit โดยคำนวณจาก จำนวนที่ต้องการให้แสดงข้อมูลในแต่ละหน้า เพื่อนำไปใช้หาข้อมูลในฐานข้อมูลด้วยคำสั่ง SELECT จากนั้นนำผลที่ได้ไปใส่ไว้ในตัวแปร Array เพื่อนำไปแสดงในแต่ละหน้า ตัวอย่างโค้ด <?php $host= "  "; //ข้อมูลฐานข้อมูลของท่าน $usr= "  "; $pwd= "  "; $db= "  "; //ติดต่อฐานข้อมูล $cid = mysql_connect($host,$usr,$pwd);  mysql_select_db($db);  if (!$cid) { echo "ERROR: " . mysql_error() . "\n"; };  $query = "SELECT * FROM socialMedia ORDER BY fname, subject DESC";  $result = mysql_query($query) or die("Couldn't execute query" . mysql_error());  // student table  $numrows=mysql_num_rows($result);  if ($numrows == 0)   {  echo "<table>";  echo "<tr valign=\"top\"><td&g

การสร้างฟอร์มค้นหา และให้แสดงผลการค้นหาในหน้าเดียวกัน ด้วย PHP

รูปภาพ
เมื่อครั้งที่แล้ว พูดถึงเรื่อง การใช้ javascript สร้างฟอร์มอัตโนมัติ แล้วส่งค่าไปยัง PHP  คราวนี้จะเป็นการนำค่าที่ส่งมาตรวจสอบ และถ้าถูกต้องให้แสดงช่องสำหรับให้พิมพ์คำค้นหา และให้แสดงผลการค้นหาในหน้าเดียวกัน ในตัวอย่างนี้ ไม่ได้แสดงวิธีการค้นหาคำในฐานข้อมูล แต่แสดงคำค้นหาเท่านั้น การค้นหาในฐานข้อมูลเป็นเรื่องพื้นฐานที่ควรรู้อีกเรื่องหนึ่ง โค้ด PHP การตรวจสอบคำ การแสดงฟอร์มการค้นหา และแสดงผลในหน้าเดียวกัน <?php  if ($isPwdOK == ""){ $thisPwd = $_POST["myText"];  } if($thisPwd == "นฤมล" || $isPwdOK == "yes"){  echo "<H2>ยินดีต้อนรับ คุณ$thisPwd</H2>";  ?> <h2>ค้นหา</h2>  <form name="search" method="post" action="<?=$PHP_SELF?>">  ข้อมูลที่ต้องการค้นหา: <input type="text" name="find" />  <input type="hidden" name="searching" value="yes" />  <input type="hidden" name="isPwdO

การใช้ javascript สร้างฟอร์มอัตโนมัติ แล้วส่งค่าไปยัง PHP

รูปภาพ
ถ้าต้องการคลิกปุ่ม แล้วให้เกิดฟอร์มรับค่าโดยอัตโนมัติ (on the fly) เพื่อส่งค่าไปยัง PHP จะทำอย่างไร หลักการ ใช้สร้างปุ่มที่มีลักษณะเป็น Button และเมื่อคลิกปุ่ม ให้ไปเรียกใช้งานฟังก์ชันที่ใช้ javascript สร้างแบบฟอร์ม และส่งข้อมูลไปยังไฟล์ PHP วิธีการ สร้างไฟล์ html ดังนี้ (ไฟล์ jsFormDemo.html) <HTML>  <HEAD>  <meta http-equiv="Content-Type" content="text/html; charset=tis-620"> <script language="javascript" type="text/javascript"> function displayForm(){  var d=document;  var test_div = document.getElementById('pwdForm');  document.getElementById('pwdForm').innerHTML="รหัสเข้าใช้งาน";  var f = test_div.appendChild(d.createElement('form'));  var i=d.createElement('input');  var i2=i.cloneNode(false);  var br=d.createElement('br');  f.action='adminPage.php';  f.method='POST';  f.name='f';  i.type='text';  i.name='

การส่งค่า Array ผ่านแบบฟอร์มของ PHP

รูปภาพ
โจทย์: ต้องการส่งรายชื่อบุคคลซึ่งเก็บอยู่ในตัวแปร Array ของ PHP โดยส่งผ่านฟอร์ม จะทำอย่างไร ตัวแปรที่มีรายชื่อบุคคลคือ  $nameArray = array("ประสงค์","ประสิทธิ์","ประสาท"); หลักการ นำค่าที่อยู่ใน Array ไปใส่ในลง form element โดยให้อยู่ในรูปของ PHP Array แล้วส่งออกไปยังไฟล์ PHP ที่รับค่า วิธีการ ไฟล์แบบฟอร์ม (ไฟล์ myform.php) <html><body> <form method="POST" action="showarray.php"> <?php $nameArray = array("ประสงค์","ประสิทธิ์","ประสาท"); foreach($nameArray as $names){ //นำค่าไปใส่ form element   echo '<input type="hidden" name="members[]" value="'. $names. '">'; } ?> คลิกเพื่อส่งข้อมูล<br> <input type="submit" value=" ส่ง "> </body></html> แสดงผล   ในกรณีที่เราสร้างแบบฟอร์มสำหรับกรอกข้อมูล ก็สามารถรับค่าเข้ามาเป็น Array และส่งออกได้ทันที เช่น (ไฟล์ myform.h

ชื่อตัวแปรของ PHP ที่ประกอบด้วย ข้อความและตัวแปร

รูปภาพ
ชื่อตัวแปรใน PHP สามารถกำหนดให้มีตัวแปร ร่วมกับข้อความได้ ทำให้มีความยืดหยุ่น และนำไปประยุกต์ใช้ได้ในหลายกรณี ทำให้การเขียนโค้ดสั้นเข้า และมีประสิทธิภาพมากขึ้น รูปแบบที่ใช้คือ  ${"ข้อความ" . $ชื่อตัวแปร} ตัวอย่าง  ${"stAns" . $i} แนวทางการใช้งาน โค้ดต่อไปนี้ ให้พิมพ์ค่าตัวแปรที่กำหนด ผลที่ได้คือ คำตอบข้อที่ 1 คือ 20 คำตอบข้อที่ 2 คือ 10 คำตอบข้อที่ 3 คือ 30 คำตอบข้อที่ 4 คือ 10 คำตอบข้อที่ 5 คือ 50 โค้ดต่อไปนี้ รับข้อมูลจากแบบทดสอบ และนำมาตรวจกับเฉลย พร้อมแสดงคะแนน

แปลง utf-8 เป็น tis-620 ด้วย PHP

ฟังก์ชั่นแปลง UTF-8 เป็น tis-620 ในฐานข้อมูล เก็บข้อมูลแบบ tis-620 พอจะเอาข้อความจาก Google ซึ่งเป็น UTF-8 เพื่อนำมาค้นหาคำในฐานข้อมูล ปรากฏว่า ไม่เจอ เพราะ อ่านกันไม่รู้เรื่อง ดังนั้น ต้องแปลง ให้เป็น tis-620 ก่อนที่จะนำไปค้น ฟังก์ชั่นที่ได้แปลง ต่อไปนี้ ได้มาจาก http://www.howforge.com/convert-utf-8-to-tis-620-in-php function utf8_to_tis620($string) {   $str = $string;   $res = "";   for ($i = 0; $i < strlen($str); $i++) {     if (ord($str[$i]) == 224) {       $unicode = ord($str[$i+2]) & 0x3F;       $unicode |= (ord($str[$i+1]) & 0x3F) << 6;       $unicode |= (ord($str[$i]) & 0x0F) << 12;       $res .= chr($unicode-0x0E00+0xA0);       $i += 2;     } else {       $res .= $str[$i];     }   }   return $res; } ตัวอย่างการใช้งาน $subject = utf8_to_tis620(($_GET["subject"]));  // รับข้อมูลเข้ามา แล้วแปลงเป็น tis-620