PHP 개발 기본 튜토리얼 ...LOGIN

PHP 개발 기본 튜토리얼 AJAX 투표

AJAX 투표

다음 예에서는 웹 페이지를 새로 고치지 않고 투표 결과를 표시하는 투표 프로그램을 보여줍니다.

오른쪽에 페이지가 표시됩니다.

위 옵션 중 하나를 사용자가 선택하면 "getVote()"라는 함수가 실행됩니다. 이 함수는 "onclick" 이벤트에 의해 트리거됩니다.

이 예는 세 부분으로 구성됩니다

  • HTML 양식

  • PHP 파일

  • TXT 파일


HTML 파일:

1.php 참조 소스 코드

<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
<script>
function getVote(int) {
  //创建 XMLHttpRequest 对象
  if (window.XMLHttpRequest) {
    // IE7+, Firefox, Chrome, Opera, Safari 执行代码
    xmlhttp=new XMLHttpRequest();
  } else {
    // IE6, IE5 执行代码
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  //创建在服务器响应就绪时执行的函数
  xmlhttp.onreadystatechange=function() {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
      document.getElementById("poll").innerHTML=xmlhttp.responseText;
    }
  }
  //向服务器上的文件发送请求
  xmlhttp.open("GET","2.php?vote="+int,true);
  xmlhttp.send();
}
</script>
</head>
<body>

<div id="poll">
<h3>你喜欢 PHP 和 AJAX 吗?</h3>
<!-- 用户选择一个选项,触发onclick事件,执行getVote()函数 -->
<form>
是:
<input type="radio" name="vote" value="0" onclick="getVote(this.value)">
<br>否:
<input type="radio" name="vote" value="1" onclick="getVote(this.value)">
</form>
</div>

</body>
</html>

위 HTML 페이지에는 <div> 요소에 두 개의 라디오 버튼이 있는 간단한 HTML 양식이 포함되어 있습니다.

양식은 다음과 같이 작동합니다.

  • 사용자가 "예" 또는 "아니요"를 선택하면 이벤트가 트리거됩니다.

  • 이벤트가 트리거되면 getVote() 함수가 실행됩니다.

  • 양식 주변에는 "poll"이라는 <div> getVote() 함수에서 데이터가 반환되면 반환된 데이터가 양식을 대체합니다.

getVote() 함수는 다음 단계를 수행합니다.

  • XMLHttpRequest 객체 생성

  • 생성됨 in 서버 응답이 준비되었을 때 실행되는 함수

  • 서버에 있는 파일에 요청 보내기

  • 추가된 매개변수(q)를 참고하세요 URL 끝까지(드롭다운 목록의 내용 포함)


PHP 파일:

위 단락에서 JavaScript가 호출한 서버 페이지는 "2.php"라는 PHP 파일입니다.

<?php
//过滤浏览器传过来的数据
$vote = htmlspecialchars($_REQUEST['vote']);

// 获取文件中存储的数据
$filename = "3.txt";
$content = file($filename);

// 将数据分割到数组中
$array = explode("||", $content[0]);
$yes = $array[0];
$no = $array[1];

if ($vote == 0)
{
  $yes = $yes + 1;
}

if ($vote == 1)
{
  $no = $no + 1;
}

// 插入投票数据
$insertvote = $yes."||".$no;
$fp = fopen($filename,"w");//写入方式打开
fputs($fp,$insertvote);//将$insertvote写入文件中
fclose($fp);//关闭打开文件
?>

<h2>结果:</h2>
<table>
  <tr>
  <td>是:</td>
  <td>
  <span style="display: inline-block; background-color:green;
      width:<?php echo(100*round($yes/($no+$yes),2)); ?>px;
      height:20px;" ></span>
  <?php echo(100*round($yes/($no+$yes),2)); ?>%
  </td>
  </tr>
  <tr>
  <td>否:</td>
  <td>
  <span style="display: inline-block; background-color:red;
      width:<?php echo(100*round($no/($no+$yes),2)); ?>px;
      height:20px;"></span>
  <?php echo(100*round($no/($no+$yes),2)); ?>%
  </td>
  </tr>
</table>

선택한 값이 JavaScript에서 PHP 파일로 전송되면 어떻게 되나요?

  • Get" poll_result.txt" 파일 내용

  • 파일 내용을 변수에 넣고 선택한 변수에 1을 더합니다

  • 결과 "poll_result.txt" 파일 쓰기

  • 그래픽 투표 결과 출력


TXT 파일

텍스트 파일(3.txt)은 투표 프로그램의 데이터를 저장합니다.

다음과 같습니다:

0||0

첫 번째 숫자는 '찬성' 투표를 나타내고 두 번째 숫자는 '반대' 투표를 나타냅니다.

참고: 웹 서버에서만 이 텍스트 파일을 편집할 수 있도록 허용해야 합니다. 웹 서버(PHP) 외에는 다른 사람이 액세스하도록 허용하지 마세요.




학습경험

이 예시에는 주로 다음 지식 포인트가 포함되어 있습니다.

  • 양식 기본 사항: 라디오 버튼

  • onclick 이벤트: 개체를 클릭할 때 발생

  • 함수 호출, 함수 값 전달

  • AJAX XMLHttpRequest 객체 생성, 서버가 응답할 때 실행되는 함수, 서버의 파일에 요청 보내기: 참조 학습 경험용 1-5

  • HTML DOM getElementById() 메소드: 지정된 ID를 가진 첫 번째 객체에 대한 참조를 반환합니다.

PHP 관련 파일에 대한 작업:

  • file(): 전체 파일을 배열로 읽습니다.

  • fopen(): 파일 또는 URL을 엽니다

  • fputs(): 파일에 쓰기

  • fclose(): 열려 있는 파일 닫기

관련 함수:

  • htmlspecialchars(): 미리 정의된 문자를 HTML 엔터티로 변환

  • 폭발(): 배열의 경우 문자열 분할

다음 섹션
<html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> <script> function getVote(int) { //创建 XMLHttpRequest 对象 if (window.XMLHttpRequest) { // IE7+, Firefox, Chrome, Opera, Safari 执行代码 xmlhttp=new XMLHttpRequest(); } else { // IE6, IE5 执行代码 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } //创建在服务器响应就绪时执行的函数 xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("poll").innerHTML=xmlhttp.responseText; } } //向服务器上的文件发送请求 xmlhttp.open("GET","2.php?vote="+int,true); xmlhttp.send(); } </script> </head> <body> <div id="poll"> <h3>你喜欢 PHP 和 AJAX 吗?</h3> <!-- 用户选择一个选项,触发onclick事件,执行getVote()函数 --> <form> 是: <input type="radio" name="vote" value="0" onclick="getVote(this.value)"> <br>否: <input type="radio" name="vote" value="1" onclick="getVote(this.value)"> </form> </div> </body> </html>
코스웨어