定期更新ゲームの作り方(宣言画面編)

html編で作ったhtmlにphpを追加します。

まずはファイル名を.htmlから.phpに変更します。

ファイル内の.htmlも忘れずに変更します。

.htmlでphpは使えませんが、.phpでhtmlは使えるので安心してください。

 

データベースの内容もしれっと入れているけど、次やるのでとりあえず無視して進めてください。

先にデータベース編を見るのもいいです。

 

送信済み情報

前回作したhtmlだけでは足りない部分を追記します。

<form>の中に以下の一行を追加します。

どこでもいいですが、どこにあるかわからなくなるので私はボタンの上に書いてます。

<input type="hidden" name="hid" value="1">

input type=”hidden”はブラウザ上には特に表示させない時に使います。

今回は送信した時に value=”1″ で1という数字を送るようにします。

 

php宣言

ここからここまでphpですよと宣言します。

書き方は違うけどhtmlのタグみたいに考えてください。

この後説明するものはphpなのでこの中に入れてください。

<?php
 /* ここに書かれたものはphpとして認識されます */
?>

ちなみにphpではコメントの書き方が違って、こうなってます。

// この行だけコメント扱い

/* アスタリスク間は
  改行しても
  ずっと
  コメント扱い */

 

データベース接続宣言

ここはとりあえずそんなもんなんだと思ってコピペしてください。

ユーザー名、パスワード、データベース名、データベースサーバー(○○○のところ)は自分のやつを入れましょう。

// データベース情報
$db['user'] = "ユーザー名"; // ユーザー名
$db['pass'] = "パスワード"; // パスワード
$dsn = 'mysql:host=mysql○○○.db.sakura.ne.jp; dbname=ユーザー名_データベース名; charset=utf8';
$pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));

 

データ送信

ついにプログラミングっぽくなってきました。

聞いた話によると今までのはプログラミングではなかったらしいです。

// 宣言データ送信 全文
if ($_POST['hid'] == 1) {
  $text = "宣言失敗";
  try {
    $stmt = $pdo->prepare('SELECT * FROM SampleTable WHERE id = ?');
    $stmt->execute(array($_POST['id']));
    $row = $stmt->fetch(PDO::FETCH_ASSOC);
  } catch (PDOException $e) {echo 'データベースエラー';}

  if ($row['pass'] == $_POST['pass']) {
    try {
      $stmt = $pdo->prepare('UPDATE SampleTable SET hand = ? WHERE id = ?');
      $stmt->execute(array($_POST['hand'] ,$_POST['id']));
      $text = "宣言送信成功";
    } catch (PDOException $e) {echo 'データベースエラー';}
  } else {
   $text = "パスワードが違います";
  }
}

データを送信してるんですが、一つずつ解説します。

if ($_POST['hid'] == 1) {
 /* ()内の条件が満たされたら
    {}内の内容を実行する    */
}

$_POST[‘hid’] はPOST方式で送られた、name=’hid’のところで書いた内容です。

今回はPOST(なんのこと?って人はhtml編の下の方をチェック)で送りましたが、GET方式の時はここがGETになります。

name=’hid’は今回最初に追加したやつです。

そこの値、value=”1″なので、送信ボタンが押された時に1が送られます。

送信ボタンを押してない時は入っていない(実質0が入っている)のでif文の内容は実行されない仕組みです。

==は比較演算子で、同じ、数学でいう=の意味です。

ちょいちょい出てきてる=は、右の値を左に代入するという意味です。

ちなみに!=が同じでない、数学でいう≠です。

他は使う時にググってください。

$text = "宣言失敗";

一番シンプルな形です。

先ほど言った、右の値を左に代入するという意味です。

左側の$textは変数、値の入った入れ物です。

$で変数ですよと宣言し、そのすぐ次にある文字が変数の名前で、好きな名前をつけられます。

わかりやすい名前にしましょう。

右側には文字が入っていますが、文字の場合はアルファベットでも日本語でも””でくくる必要があります。”でもいいです。

違いは今回は関係ないので全部終わったら調べてください。今回私が両方使ってることに意味はないです。ただの癖です。

最後に、phpは文の最後は;で締める必要があるのでつけてあげます。

()内の文とか、{}で終わる文には必要ありません。

try {

} catch (PDOException $e) {echo 'エラー';}

try{}内のプログラムを実行し、失敗したらcatch{}内を実行します。

今回はデータベース接続に失敗したらブラウザに「エラー」と表示させます。

$stmt = $pdo->prepare('SELECT * FROM SampleTable WHERE id = ?');
$stmt->execute(array($_POST['id']));
$row = $stmt->fetch(PDO::FETCH_ASSOC);

データベースから情報を読み込んでいます。

SELECTでデータ読み込み、SampleTable のところにテーブル名を入力、WHERE id = ? でid検索。

二行目のarray()内に検索する内容を変数などで入れる。

三行目で変数$rowに読み込んだデータを格納。

if ($row['pass'] == $_POST['pass']) {

} else {
  $text = "パスワードが違います";
}

ifは先述の通り、else{}はif()の内容が満たされなかった場合にif{}の内容の代わりに実行されます。

今回はパスワードが間違っている場合に変数$textにその旨のメッセージを入れます。

先ほど取得したデータの内パスワードが $row[‘pass’] に入っているので、送信されたパスワードとデータベース内のパスワードを比較します。

$stmt = $pdo->prepare('UPDATE SampleTable SET hand = ? WHERE id = ?');
$stmt->execute(array($_POST['hand'] ,$_POST['id']));
$text = "宣言送信成功";

UPDATEでデータベース内の情報を更新します。

handには次の手を何にするかの情報を入れておき、今回は指定したidの人のhandを更新します。

array()内にはprepare()内の?の数と同じ順序、個数のデータを入れます。

全て順調に完了したら$textにメモしておきます。

 

送信成功

リアクションがないとわからないので何か出します。

echo $text."<br><br>";

ちょいちょい進捗をメモしていた$textを表示させ、改行しておきます。

.で繋ぐことで複数のものを同時に表示させられます。

 

完成したものがこちら

<?php

// データベース情報
$db['user'] = "ユーザー名"; // ユーザー名
$db['pass'] = "パスワード"; // パスワード
$dsn = 'mysql:host=mysql○○○.db.sakura.ne.jp; dbname=ユーザー名_データベース名; charset=utf8';
$pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE=&gt;PDO::ERRMODE_EXCEPTION));

// 宣言データ送信 全文
if ($_POST['hid'] == 1) {
  $text = "宣言失敗";
  try {
    $stmt = $pdo->prepare('SELECT * FROM SampleTable WHERE id = ?');
    $stmt->execute(array($_POST['id']));
    $row = $stmt->fetch(PDO::FETCH_ASSOC);
  } catch (PDOException $e) {echo 'データベースエラー';}

  if ($row['pass'] == $_POST['pass']) {
    try {
      $stmt = $pdo->prepare('UPDATE SampleTable SET hand = ? WHERE id = ?');
      $stmt->execute(array($_POST['hand'] ,$_POST['id']));
      $text = "宣言送信成功";
    } catch (PDOException $e) {echo 'データベースエラー';}
  } else {
   $text = "パスワードが違います";
  }
}

// 宣言成功・失敗表示
echo $text."<br><br>";

?>

<html>

 <!-- 前回作ったhtml -->

</html>

 

これもアップロードすれば使えます。(まだデータベースが設置されていないけど)

phpが使えないサーバーもあるので確認しましょう。

また、自分のPCでphpを動かすこともできます。

基本的に自分のPCでやばいエラーが出てないか確認してからアップロードするようにしましょう。

windowsならXAMPP、macならMAMPとかいうのをダウンロードして起動するだけです。

詳しくはググって。

 

次はデータベースを作ります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です