Pemungutan Suara AJAX dan PHP
- Halaman Sebelumnya Pembaca RSS AJAX
- Halaman Berikutnya Array PHP
Pungutan Suara AJAX
Dalam contoh AJAX ini, kita akan menunjukkan program voting yang dapat mengambil hasil tanpa memuat ulang halaman web.
Sampai saat ini, apakah anda menyukai PHP dan AJAX?
Contoh ini termasuk empat elemen:
- Formulir HTML
- JavaScript
- PHP 页面
- Berkas teks tempat menempatkan hasil
Formulir HTML
Ini adalah halaman HTML. Ia mengandung formulir HTML sederhana serta koneksi ke berkas JavaScript:
<html> <head> <script src="poll.js"></script> </head> <body> <div id="poll"> <h2>Do you like PHP and AJAX so far?</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() 函数
- 围绕该表单的是名为 "poll" 的 <div>。当数据从 getVote() 函数返回时,返回的数据会替代该表单。
文本文件
文本文件 (poll_result.txt) 中存储来自投票程序的数据。
它类似这样:
0||0
第一个数字表示 "Yes" 投票,第二个数字表示 "No" 投票。
注释:记得只允许您的 web 服务器来编辑该文本文件。不要让其他人获得访问权,除了 web 服务器 (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 }
Pengertian contoh:
stateChanged() 和 GetXmlHttpObject 函数与 Permintaan AJAX dan PHP 这一节中的例子相同。
getVote() 函数
当用户在 HTML 表单中选择 "yes" 或 "no" 时,该函数就会执行。
- 定义发送到服务器的 url (文件名)
- 向 url 添加参数 (vote),参数中带有输入字段的内容
- 添加一个随机数,以防止服务器使用缓存的文件
- 调用 GetXmlHttpObject 函数来创建 XMLHTTP 对象,并告知该对象当触发一个变化时执行 stateChanged 函数
- 用给定的 url 来打开 XMLHTTP 对象
- 向服务器发送 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; } //masukkan undian ke fail teks $insertvote = $yes."||".$no; $fp = fopen($filename,"w"); fputs($fp,$insertvote); fclose($fp); ?> <h2>Hasil:</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>
Pengertian contoh:
Nilai dipilih datang dari JavaScript, kemudian akan terjadi:
- Dapatkan kandungan fail "poll_result.txt"
- Masukkan kandungan fail ke dalam pembolehbelia, dan tambah 1 ke pembolehbelia dipilih
- Tulis hasil ke fail "poll_result.txt"
- Output hasil undian berbentuk grafik
- Halaman Sebelumnya Pembaca RSS AJAX
- Halaman Berikutnya Array PHP