PHP와 AJAX 투표
- 이전 페이지 AJAX RSS 리더
- 다음 페이지 PHP 배열
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() 함수를 실행합니다
- 이 테이블 주위에는 "poll" 이름의 <div>가 있습니다. 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() 함수
사용자가 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; } //투표를 txt 파일에 삽입 $insertvote = $yes."||".$no; $fp = fopen($filename,"w"); fputs($fp,$insertvote); fclose($fp); ?> <h2>결과:</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 리더
- 다음 페이지 PHP 배열