PHP และ AJAX การลงคะแนน
- หน้าก่อน AJAX RSS Reader
- หน้าต่อไป PHP Array
AJAX การลงคะแนนเสียง
ในตัวอย่าง AJAX นี้ เราจะแสดงโปรแกรมการลงคะแนนเสียง ที่หน้าเว็บไซต์สามารถได้รับผลลัพธ์โดยไม่ต้องโหลดเว็บไซต์อีกครั้ง:
จนถึงขณะนี้ คุณชื่นชอบ PHP และ AJAX ไหม?
ตัวอย่างนี้ประกอบด้วยส่วนประกอบสี่อย่าง:
- ฟอร์ม HTML
- JavaScript
- PHP หน้า
- เอกสารข้อความเก็บผลลัพธ์
ฟอร์ม HTML
นี่คือหน้า HTML นี้.มันประกอบด้วยฟอร์ม HTML ขั้นต้นและการเชื่อมโยงกับไฟล์ JavaScript:
<html> <head> <script src="poll.js"></script> </head> <body> <div id="poll"> <h2>คุณชื่นชอบ PHP และ AJAX จนถึงขณะนี้หรือไม่?</h2> <form> Yes: <input type="radio" name="vote" value="0" onclick="getVote(this.value)"> <br /> No: <input type="radio" name="vote" value="1" onclick="getVote(this.value)"> </form> </div> </body> </html>
ตัวอย่างที่ชี้แจง - แบบฟอร์ม HTML
เหมือนที่คุณเห็นได้ หน้า HTML ที่สูงขึ้นมีแบบฟอร์ม HTML ที่เรียบง่าย ซึ่งมีองค์ประกอบ <div> ที่มีโปรงการเลือกเดียวกัน
แบบฟอร์มทำงานนี้:
- เมื่อผู้ใช้เลือก "yes" หรือ "no" จะเกิดเหตุการณ์
- เมื่อเกิดเหตุการณ์ จะทำฟังก์ชัน getVote()
- ฝั่งตัวแบบฟอร์มนี้มี <div> ที่มีชื่อว่า "poll" ขณะที่ข้อมูลจากฟังก์ชัน getVote() กลับมา ข้อมูลที่กลับมาจะทดแทนแบบฟอร์มนี้
ไฟล์ข้อความ
ไฟล์ข้อความ (poll_result.txt) จะเก็บข้อมูลจากโปรแกรมการลงคะแนน
มันเหมือนนี้เช่นนี้:
0||0
ตัวเลขแรกแสดงถึงการลงคะแนน "Yes" ตัวเลขที่สองแสดงถึงการลงคะแนน "No"。
หมายเหตุ:จงระวังเฉยๆให้เซิร์ฟเวอร์เว็บของคุณเท่านั้นที่จะแก้ไขไฟล์ข้อความนี้ และไม่ให้ใครคนอื่นเข้าถึงสิทธิ์การเข้าถึง ยกเว้นเซิร์ฟเวอร์ (PHP)。
JavaScript
JavaScript 代码存储在 "poll.js" 中,并于 HTML 文档相连接:
var xmlHttp function getVote(int) { xmlHttp=GetXmlHttpObject() if (xmlHttp==null) { alert ("Browser does not support HTTP Request") return } var url="poll_vote.php" url=url+"?vote="+int url=url+"&sid="+Math.random() xmlHttp.onreadystatechange=stateChanged xmlHttp.open("GET",url,true) xmlHttp.send(null) } function stateChanged() { if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") { document.getElementById("poll"). innerHTML=xmlHttp.responseText; } } function GetXmlHttpObject() { var objXMLHttp=null if (window.XMLHttpRequest) { objXMLHttp=new XMLHttpRequest() } else if (window.ActiveXObject) { objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP") } return objXMLHttp }
ตัวอย่างที่ชี้แจง:
ฟังก์ชัน stateChanged() และ GetXmlHttpObject คือ PHP และ AJAX คำขอ ตัวอย่างในนี้เหมือนกัน
ฟังก์ชัน getVote()
ฟังก์ชันนี้จะทำงานเมื่อผู้ใช้เลือก "yes" หรือ "no" ในฟอร์ม HTML
- กำหนด URL ที่ส่งไปยังเซิร์ฟเวอร์ (ชื่อไฟล์)
- เพิ่มประมาณการ (vote) ใน URL ที่มีเนื้อหาของช่องบันทึก
- เพิ่มตัวเลขสุ่มเพื่อป้องกันเซิร์ฟเวอร์ใช้แฟ้มที่มีอยู่ในคลาย
- เรียกฟังก์ชัน GetXmlHttpObject ในการสร้าง XMLHTTP โอบเจ็กต์ และบอกให้โอบเจ็กต์นี้ทำงานเมื่อมีการเปลี่ยนแปลง
- เปิด XMLHTTP โอบเจ็กต์ด้วย URL ที่ให้
- ส่งคำขอ HTTP ไปยังเซิร์ฟเวอร์
PHP หน้า
โดย JavaScript โค้ดเรียกหน้าบริการเซิร์ฟเวอร์ที่มีชื่อว่า "poll_vote.php" คือไฟล์ PHP ง่ายๆ
<?php $vote = $_REQUEST['vote']; //get content of textfile $filename = "poll_result.txt"; $content = file($filename); //put content in array $array = explode("||", $content[0]); $yes = $array[0]; $no = $array[1]; if ($vote == 0) { $yes = $yes + 1; } if ($vote == 1) { $no = $no + 1; } //insert votes to txt file $insertvote = $yes."||".$no; $fp = fopen($filename,"w"); fputs($fp,$insertvote); fclose($fp); ?> <h2>Result:</h2> <table> <tr> <td>Yes:</td> <td> <img src="poll.gif" width='<?php echo(100*round($yes/($no+$yes),2)); ?>' height='20'> <?php echo(100*round($yes/($no+$yes),2)); ?>% </td> </tr> <tr> <td>No:</td> <td> <img src="poll.gif" width='<?php echo(100*round($no/($no+$yes),2)); ?>' height='20'> <?php echo(100*round($no/($no+$yes),2)); ?>% </td> </tr> </table>
ตัวอย่างที่ชี้แจง:
ค่าที่เลือกมาจาก JavaScript จะมีการเกิดขึ้นดังนี้:
- ดึงเนื้อหาของแฟ้ม "poll_result.txt"
- จัดเก็บเนื้อหาของแฟ้มไปยังตัวแปร และเพิ่มค่าตัวแปรที่ถูกเลือกด้วย 1
- เขียนผลลัพธ์ไปยังแฟ้ม "poll_result.txt"
- ออกผลลัพธ์การเลือกของผู้ลงคะแนนเป็นรูปภาพ
- หน้าก่อน AJAX RSS Reader
- หน้าต่อไป PHP Array