質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.50%

  • PHP

    20747questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • MySQL

    5985questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP MySQL 処理分け SELECT

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 430

Z-TALBO

score 481

はじめに

先日も同様な質問を致しました。
その際は、ページを開くとDBからのデータを表示させるというだけのものでした。
回答の中に引数を入れればいろいろ便利などとアドバイスを頂き参考になりました。

しかし、流れというか少しつかみきれていない部分がありますので、質問いたします。

やりたいこと

条件指定による検索と表示
// ページ構成
[index.php]
条件を選択し、POST送信して、抽出されたデータを表示させる

[processing.php]
条件を元にDBからデータを抽出する

[controller.php]
processingから抽出されたデータを元にtableを作成する

だいたいの基本的なコード

[index.php]
<form action="processing.php" method="POST">
<input type="text" name="name">
<input type="radio" name="sex" value="male">男
<input type="radio" name="sex" value="female">女
<input type="submit" name="serch" value="検索">
</form>

// 検索結果をここに表示
<?php serch_result(); ?>
[processing.php]
function db_serch() {
$name = $_POST['name'];
$sex = $_POST['sex'];
$dbh = connectDb();
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$sql = "SELECT * FROM test WHERE name = :name AND sex = :sex";
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':name', $name, PDO::PARAM_STR);
$stmt->bindParam(':sex', $sex, PDO::PARAM_STR);
$stmt->execute();
$rows = $stmt->fetchAll();
return $rows;
}
[controller.php]
function serch_result() {
$rows = db_serch();
$cnt = count($rows);
for ($i = 0; $i < $cnt; $i++) {
$name = $rows[$i]['name'];
$sex = $rows[$i]['sex'];
echo $name . '=' . $sex;
}
}

問題点

上記では当然処理はできておりません。
1.formから送るのはprocessingで良いのか?
もしかして、controllerに送って変数代入などをしてからがいいのか?

2.functionで関数を作ることで、isset($_POST['○○'])があったならこの関数という処理になりそうなんですが、この場合の書き方はどのようになるのか?
if () { function(){ }}ということになるのか?
function(){ if() { }}ということになるのか?

3.結局のところ、値を送る->受け取る->処理する->データを送る->データを受け取り編集するという一連の流れに関して、イマイチ理解できていない(これじゃ全部ですが、、、)です。

先日の質問での大まかな中身

[index.php]
// データ表示
<?php table_view(); ?>
function table_date() {
// DB接続
// データ抽出
$rows = $stmt->fetchAll();
return $rows;
}
function table_vie() {
$rows = table_date();
$cnt = count($rows);
// for文で回して表示させる部分を作成
}


このような流れの部分は一応やってできました。

仕様など

classなどではなく、上記のようにページで処理を分けるということでやっていきたいので、はっきり言って無駄が多い!と思われるでしょうが、あくまでもこのスタイルで考えていただければと思います。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

<form action="index.php" method="POST">だと思います。
form action=""の部分は結果を表示するphpにするのが基本かと思います。(もちろん他の方法もありますが今回のケースでは処理が煩雑になるだけなので)

あとはserch_result()が呼ばれた際にdb_serch()を実行できるPOSTデータの有無をチェックして、実行できない場合は何もせずに終了してフォームのみが表示される感じでしょうか。

serch_result()でPOSTデータのチェックをしてしまうので下記のような感じはどうでしょうか

[processing.php]
function db_serch($name,$sex) {
  ・・・
}

[controller.php]
function serch_result() {
  $name = $_POST['name'];
  $sex = $_POST['sex'];
  //ここでnameとsexの値を検証する
  if('検証結果が正'){
    $rows = db_serch($name,$sex);
    ・・・
  }
}

$name,$sexの値によって処理を分けたい場合はif('検証結果が正')の中でさらに判定して呼び出す関数を変更することができます。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/21 16:01

    回答ありがとうございます!
    functionがどこで呼ばれてそのfunctionがどのようなことをするかを順番に見ていけば、わかりやすかったです。
    全然そういうのに気づけないんです。。。

    今回の質問に関しては、思った動作ができましたので、ありがとうございました!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    processing 描画について

    processingでこれを描こうと思い size(600,600); background(0); strokeWeight(10); int p ; int a 

  • 解決済

    PHP DBから抽出データ、配列、SESSION、class

    はじめに たぶん、何やってんだろう?という質問内容かと思いますが、アドバイスをいただければと思います。 やりたいこと 漠然としてはいますが、たぶんclassを作るのに、す

  • 受付中

    processingでの画像のフェードイン・フェードアウトについて

    現在、processingでソフトを制作している、デザイン学生です。画像をフェードインしてから3秒表示させ、その後フェードアウトして次の画面を表示させる方法がわからず困っています。

  • 解決済

    processingで範囲指定してフレームの保存を行うやり方

    前提・実現したいこと processingでプログラムを組んでいます。 現在、SaveFrameを使って実行結果の画像書き出しを行い、ツールからムービーメーカーで動画にしています。

  • 解決済

    Processing captionLabel()が存在しない関数といわれます。

    Processingでボタンの作成をしており、ラベルの文字が英語での作成はできたのですが、日本語で表示する様にすると、「関数 "captionLabel()" は存在しません」と表

  • 解決済

    円柱の曲面に文字や図形を表示したい。

    いつもお世話になっています。  前提・実現したいこと 表題通りです。 円柱の曲面に文字や図形を表示したいです。 テクスチャマッピングなるもので要件を満足する方法があるのです

  • 解決済

    processngでのゲーム作りに関して

    ゲーム画面の切り替えに関して processingで弾幕ゲームを作成しています。 質問① 弾と自機、レーザーとボスの当たり判定に関して、当たったと識別する条件は書けたのですが、

  • 解決済

    Processing 画像処理(左右反転)について

    今回の質問はProcessingの画像処理についてで、下コードの実行結果のように画像ImageとImageの左右反転した画像の表示をさせるプログラムを考えているのですが、scale

同じタグがついた質問を見る

  • PHP

    20747questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • MySQL

    5985questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。