PHP 예제 - AJAX 설문조사
AJAX 투표
다음 예는 다시 로드하지 않고 결과가 표시되는 폴링을 보여줍니다.
지금까지 PHP와 AJAX가 마음에 드십니까?
예제 설명 - HTML 페이지
사용자가 위의 옵션을 선택하면 "getVote()"라는 함수가 실행됩니다. 함수는 "onclick" 이벤트에 의해 트리거됩니다.
<html>
<head>
<script>
function getVote(int)
{
var xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function() {
if (this.readyState==4 && this.status==200) {
document.getElementById("poll").innerHTML=this.responseText;
}
}
xmlhttp.open("GET","poll_vote.php?vote="+int,true);
xmlhttp.send();
}
</script>
</head>
<body>
<div id="poll">
<h3>Do you like PHP and AJAX so far?</h3>
<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>
getVote() 함수는 다음을 수행합니다.
- XMLHttpRequest 객체 생성
- 서버 응답이 준비되었을 때 실행할 함수 생성
- 서버의 파일로 요청 보내기
- 매개변수(투표)가 URL에 추가됩니다(예 또는 아니오 옵션 값 포함).
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" 파일의 내용 가져오기
- 파일의 내용을 변수에 넣고 선택한 변수에 하나 추가
- 결과를 "poll_result.txt" 파일에 씁니다.
- 투표 결과의 그래픽 표현 출력
텍스트 파일
텍스트 파일(poll_result.txt)은 설문조사의 데이터를 저장하는 곳입니다.
다음과 같이 저장됩니다.
0||0
첫 번째 숫자는 "예" 투표를 나타내고 두 번째 숫자는 "아니오" 투표를 나타냅니다.
참고: 웹 서버가 텍스트 파일을 편집할 수 있도록 허용해야 합니다. 모든 사람에게 액세스 권한을 부여 하지 말고 웹 서버(PHP)만 허용하십시오.