LoginSignup
55
69

More than 5 years have passed since last update.

jQueryのAjaxをPHPで使うやつ

Last updated at Posted at 2015-08-07

渡しっ放しじゃないしっかり返ってくるやり方

データベースは
テーブル名:members
カラム
int(10) :member_id
varchar(50) :member_name
です。

member_idで検索して、member_idとmember_nameを表示します。
目的が検索ならリアルタイムにしたいところですが
今回はindex.htmlからsend.phpに何かを送って
send.phpがindex.htmlに結果なりエラーなりを
返すといったところが目的です。

index.html
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>jQueryのAjaxをPHPで使うやつ</title>
</head>
<body>

  <h1>jQueryのAjaxをPHPで使うやつ</h1>
  <form method="post">
    <p><input id="request" size="10" maxlength="10"></p>
    <p><input id="send" value="送信" type="submit"></p>
  </form>

  <div id="XMLHttpRequest"></div><!-- ステータスコード -->
  <div id="textStatus"></div><!-- エラー情報 -->
  <div id="errorThrown"></div><!-- 例外情報 -->

  <div id="result"></div><!-- 返してきたデータを表示 -->


<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>
$(document).ready(function() {

  //送信ボタンをクリック
  $('#send').click(function(){

    //POSTメソッドで送るデータを定義する
    //var data = {パラメータ : 値};
    var data = {request : $('#request').val()};

    //Ajax通信メソッド
    //type : HTTP通信の種類(POSTとかGETとか)
    //url  : リクエスト送信先のURL
    //data : サーバに送信する値
    $.ajax({
      type: "POST",
      url: "send.php",
      data: data,
      //Ajax通信が成功した場合に呼び出されるメソッド
      success: function(data, dataType){
        //デバッグ用 アラートとコンソール
        alert(data);
        console.log(data);

        //出力する部分
        $('#result').html(data);
      },
      //Ajax通信が失敗した場合に呼び出されるメソッド
      error: function(XMLHttpRequest, textStatus, errorThrown){
        alert('Error : ' + errorThrown);
        $("#XMLHttpRequest").html("XMLHttpRequest : " + XMLHttpRequest.status);
        $("#textStatus").html("textStatus : " + textStatus);
        $("#errorThrown").html("errorThrown : " + errorThrown);
      }
    });
    return false;
  });
});

</script>
</body>
</html>
send.php
<?php

/*** データベースに接続するための宣言 ***/
$con = mysqli_connect('ホスト', 'ユーザ', 'パスワード') or die(mysqli_error());
mysqli_set_charset($con, "utf8");
mysqli_select_db($con,'データベース名');
mysqli_query($con,'SET NAMES UTF8');


function hsc($str){
  return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
}

//このページでechoしたものがhtmlに返されて出力される
header("Content-type: text/plain; charset=UTF-8");

//Ajaxによるリクエストかどうかの識別を行う
//strtolower()を付けるのは、XMLHttpRequestやxmlHttpRequestで返ってくる場合があるため
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'){  

  if(isset($_POST['request'])){

    //member_id(int型)で検索するためint以外を弾く
    $request= (int)filter_input(INPUT_POST, 'request');

    $sql = sprintf("SELECT * FROM members WHERE member_id LIKE '%s'",
                   mysqli_real_escape_string($con,'%'.addcslashes(hsc($request), '\_%').'%')
    );
    $res = mysqli_query($con,$sql);
    if(mysqli_num_rows($res) != 0){
      while($row = mysqli_fetch_assoc($res)){
        $memberId   = $row['member_id'];
        $memberName = $row['member_name'];

        $String .= "<p>".$memberId."</p>";
        $String .= "<h3>".$memberName."</h3>";
      }
    }else{
      //デバッグ用 データがなかった時にSQLを出力する
      echo $sql;
    }
    echo $String;
  }else{
    echo 'The parameter of "request" is not found.';
  }

}else{
  echo 'This access is not valid.';  
}
55
69
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
55
69