WebプログラミングV

 目次へ 前へ 次へ

2013/11/12 久米

T.XMLとJSONとAPI

4.アプリケーション ログインAPI

4.1 クライアント側

名前とパスワードを送り、結果をjsonでもらう。

post送信

<?php
//POSTデータ
$data = http_build_query(
  array(
    "name" => "test01",
    "pass" => "771"
  )
);

$opts = array(
  "http" => array(
    "method"  => "POST",
    "header"  => "Content-type: application/x-www-form-urlencoded",
    "content" => $data
  )
);

$url = "http://localhost/web3/api/login.php";
print file_get_contents($url, false, stream_context_create($opts));
?>

get送信

<?php
$name=urlencode("test01"); $pass=urlencode("771"); $url = "http://localhost/web3/api/login.php?name={$name}&pass={$pass}"; print file_get_contents($url); ?>

jsonで受け取った後は適切にデザインする。

演習1 form投稿で、名前とパスをAPIに送り、結果を表示するログインphpファイルを作成せよ。

 

4.2 API側

POSTを受け、DBを検索、挿入し、結果をjson形式で出力するスクリプト例

下記はプリペアードステートメントで作っている。

<?php

if (!isset($_REQUEST["name"])) {
    printResult("NO_NAME","");
    exit();
}
if (!isset($_REQUEST["pass"])) {
    printResult("NO_PASS","");
    exit();
}

$name = $_REQUEST["name"];
$pass = $_REQUEST["pass"];

$link = mysqli_connect("localhost", "loginapi", "771", "loginapi");

if (!$link) {/* 接続状況をチェック */
    printResult(mysqli_connect_error(), "");
    exit();
}

$stmt = mysqli_prepare($link, "SELECT name FROM users WHERE lower(name)=lower(?) AND pass=?");
mysqli_stmt_bind_param($stmt, 'ss', $name, $pass);

mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $hontono_name);
mysqli_stmt_fetch($stmt);
mysqli_stmt_close($stmt);
mysqli_close($link);

$rst = "";
if($hontono_name==null){
    $rst = "NO_USER";
}else{
    $rst = "OK";
}

printResult($rst, $hontono_name);

function printResult($r, $n) {
    $arr["result"] = $r;
    $arr["name"] = $n;
    printJson($arr);
}

function printJson($a) {
    $json = json_encode($a);
    header('Content-Type: text/javascript; charset=utf-8');
    print $json;
}

?>

 

result 意味
OK 成功
NO_NAME 失敗:名前を入力してください
NO_PASS 失敗:パスワードを入力してください
NO_USER 失敗:名前かパスワードが間違えています