みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

サーバのデータを動的に取得するスクリプト

PHPにて、テキスト欄に、生徒番号を入力すると、
サーバのDBに問い合わせして、
詳細情報を、生徒番号のテキスト欄の下に、
同様なテキスト欄に、
名前とか、性別、生年月日などが
表示されるようにするには、
どのようなコードを書けば良いのでしょうか?

投稿日時 - 2014-05-10 11:06:46

QNo.8588895

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(7)

ANo.7

一番かんたんな方法は、PHPとサーバを諦め、FileMakerProでカード型データベースを作ることです。
これなら、ド素人でも3日あればできます。

どうしてもサーバを使いたいということであれば、MSアクセスでSQLを勉強すると良いです。
SQLの使い方を覚えたら、PHP経由でサーバにSQLで問合せ、目的の項目を表示します。
HTML、フォーム、CGIくらいはご存知なのですよね?

投稿日時 - 2014-05-20 16:27:38

ANo.6

ページ遷移を伴わないアクションを実装するには、サーバー側で実行して結果だけを返すPHP言語だけは実現できません。Webブラウザ上で実行される言語であるJavaScriptとの連携が不可欠です。PHPで実行結果を「JSON」というフォーマットで出力し、JavaScript側でそれを読み取らせて処理をさせます。

(PHP側の実装例)
http://pastebin.com/ShiZfTS5

以下に出力結果例を示します。実際の出力は(エスケープされるため)少し異なりますが、ここでは分かりやすく日本語をそのまま書きます。

【検索に成功したとき】 (ステータスコード: 200 OK)
{
 "result" :
 {
  "no" : 1,
  "name" : "田中太郎",
  "gender" : "男",
  "birthday" : "1980-01-01"
 }
}

【番号に対応する生徒が見つからなかったとき】 (ステータスコード: 404 Not Found)
{
 "error" : "番号に一致する生徒は見つかりませんでした"
}

【番号を指定しなかったとき】 (ステータスコード: 400 Bad Request)
{
 "error" : "生徒番号が指定されていません"
}

【データベースに不備があったとき】 (ステータスコード: 500 Internal Server Error)
{
 "error" : "データベースでエラーが発生しました"
}

あとはこの結果をHTMLに適用させるわけですが…あんまりJavaScript関連は詳しくないので、参考リンクだけ貼らせていただきます。不十分であればPHPカテゴリではなくJavaScriptカテゴリで再質問していただき、その際にこの質問のURLを貼ってください。

Google検索 - 「ajax json php」
https://www.google.co.jp/search?q=ajax+json+php

jQuery Manual - jQuery.ajax()
http://api.jquery.com/jQuery.ajax/

あと一応PHP側でのデータベースの扱いに関してのまとめも掲載しておきます。

Qiita - PHPでデータベースに接続するときのまとめ
http://qiita.com/mpyw/items/b00b72c5c95aac573b71

投稿日時 - 2014-05-10 18:31:31

ANo.5

仕様が不明瞭すぎます。

>> PHPにて、テキスト欄に、生徒番号を入力すると、

ということなので、検索条件に用いるのは生徒番号だけかと思っていましたが

>> 生徒番号、氏名、性別、生年月日の
>> テキストボックスが
>> すでにある場合は、
>> どのようにしたら、
>> 良いのでしょうか?

他の条件も検索に使うという事でしょうか?
その場合複合条件はANDかORかどちらですか?
また、完全一致でなく部分一致でもヒットさせるのですか?

それとも、単に既に表示されているテキストボックスの中に
「Webブラウザのリロードを伴わずに」結果を取得して表示させたい
ということでしょうか?

作りたいものを明確に言葉で表す作業ってとても大事ですよ。

投稿日時 - 2014-05-10 16:44:51

補足

ブラウザのリロードを伴わずに、
結果を表示させたいです。

投稿日時 - 2014-05-10 16:58:41

ANo.4

訂正

$stmt->bindValue($no, PDO::PARAM_INT);

$stmt->bindValue(1, $no, PDO::PARAM_INT);

投稿日時 - 2014-05-10 13:00:31

補足

生徒番号、氏名、性別、生年月日の
テキストボックスが
すでにある場合は、
どのようにしたら、
良いのでしょうか?

投稿日時 - 2014-05-10 16:05:16

ANo.3

【参考リンク】

Qiita - $_GET, $_POSTなどを受け取る際の処理
http://qiita.com/mpyw/items/2f9955db1c02eeef43ea

Qiita - PHPでデータベースに接続するときのまとめ
http://qiita.com/mpyw/items/b00b72c5c95aac573b71

【実装例】

OS: Linux系
PHPバージョン: 5.3.5以降
データベース製品: MySQL
データベース名: student
ユーザー名: username
パスワード: password
テーブル名: student
id (int PRIMARY KEY) … 生徒番号
name (varchar) … 名前
gender (varchar) … 性別
birthday (date) … 生年月日

であると仮定します。

(定義通りに作れば多分コピペで動きます)
http://pastebin.com/S4r9qxPV

投稿日時 - 2014-05-10 12:58:59

ANo.2

こういうのは、データベース設計が明確になってないと回答のしようがないものです。データベースの種類、データベース名、データベースサーバーアドレス、テーブル名、テーブルに用意されたコラム名とその型、プライマリキー情報、そしてアクセスする利用者名とパスワードなどの情報を正確に記述しないとアクセスできません。

とりあえず、それらをすべて仮に考えて、ごくおおまかに整理すると、こんな感じでしょうか。(これはPDOが利用可能という前提で書いてます)

$query = "select * from テーブル where 検索条件";
$result = "<table>";
try {
$pdo = new PDO("データベースの指定","ユーザー名","パスワード");
$statement = $pdo->query($query);
while($record = $statement->fetch(PDO::FETCH_ASSOC)){
$result .= "<tr>";
foreach($record as $column){
$result .= "<td>" . $column . "</td>";
}
$result .= "</tr>";
}
$result .= "</table>";
} catch(PDOException $e){
$result = "#ERR:" . $e->getMessage();
}
$pdo = null;

// 後は、$resultをどこかに出力する

これは、検索条件に合致したレコードをすべて取得し、その全データをテーブルにまとめるものです。これのひらがなで書いてあるところを、全部あなたの利用するデータベースの設定に書き換えて下さい。で、この後に$resultを適当な場所に出力して下さい。

これ以上の細かい話は、データベース設計について詳しくわからないと回答のしようがありません。

投稿日時 - 2014-05-10 12:04:32

ANo.1

>>どのようなコードを書けば良いのでしょうか?

そういう動作をするようなフローチャートを考えて、適切なDB設計を行い、HTML,CSS,PHP,SQLやJavascriptでロジックを組み立てて、コーディングすればいいです。
判らない部分があれば、ネットや書籍等で勉強しましょう。

投稿日時 - 2014-05-10 11:26:28

あなたにオススメの質問