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

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

ただいまの
回答率

88.91%

DBから取り出したものとラジオボタンを結合させたい

受付中

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,773

aaaaasu

score 4

php、mysqlを使って予約ページを作っています
公開等するつもりはなく学校の授業内のサイト作りになってます

もともとDBの中に予約情報を入れていて
出発地・到着地・クラスを選択(yoyaku.php)していただくと
次の画面(yoyakukekka.php)に4つの時間と料金が抽出できるようになってます
その次の画面(yoyakucheck.php)ですべての情報を表示させます。

取り出した時間と料金の情報とラジオボタンを結合(?)して
$_POSTにいれたいのですがどうしたらいいでしょうか
$_SESSIIONにも後に入れるつもりです

ソースコード(yoyaku.php)

<form method="post" action="yoyakukekka.php">
出発地<select name="go">
<option value="" selected>ご選択ください</option>
<option value="大阪">大阪(伊丹)</option>
<option value="東京">東京(成田)</option>
<option value="沖縄">沖縄(那覇)</option>
<option value="北海道">北海道(新千歳)</option>
</select>

到着地<select name="des">
<option value="" selected>ご選択ください</option>
<option value="大阪">大阪(伊丹)</option>
<option value="東京">東京(成田)</option>
<option value="沖縄">沖縄(那覇)</option>
<option value="北海道">北海道(新千歳)</option>
</select>

クラス<select name="class">
<option value="" selected>ご選択ください</option>
<option value="エコノミー">エコノミークラス</option>
<option value="ビジネス">ビジネスクラス</option>
</select>

搭乗日
<input type="text" id="datepicker" name="day">

搭乗者等省略、、、

<input type="submit" name="next" value="次へ">
</form>

ソースコード(yoyakukekka.php)

<?php
session_start();

$dsn = "mysql:dbname=yoyaku; host=127.0.0.1";
$user = "root";
$password = "";

try{
 $dbh = new PDO($dsn, $user, $password);
 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 $dbh->query("SET NAMES utf8");

 $go    = $_POST["go"];
 $des   = $_POST["des"];
 $class = $_POST["class"];
 $day   = $_POST["day"];

 $_SESSION["GO"]    = $go;
 $_SESSION["DES"]   = $des;
 $_SESSION["CLASS"] = $class;
 $_SESSION["DAY"]   = $day;

 $sql  = 'select time,fare from plane where go=? AND des=? AND class=?';
 $stmt = $dbh->prepare($sql);
 $stmt->execute(array($go, $des, $class));

 } catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
    die();
}
?>
略、、、
<body>
<form action="yoyakucheck.php" method="submit">

<table>
<thead>
<tr>
<th>出発→到着(時間)</th>
<th>料金(1名様)</th>
<th>選択</th>
</tr>
</thead>

<tbody>
<?php while($result = $stmt->fetch()){ ?>
<tr>
<td><?= $result["time"]; ?></td>
<td><?= $result["fare"]; ?></td>
<td>ここがわかりません</td>
</tr>
<?php } ?>
</tbody>
</table>

<input type="submit" name="check" value="確認">
</body>

ソースコード(yoyakucheck.php)

<table>
<tr><td>選択した便情報をご確認ください。</td></tr>
<tr>
<td>出発地/到着地</td>
<td>搭乗日</td>
<td>搭乗時間</td>
<td>クラス</td>
<td>料金</td>
</tr>

<tr>
<td><?= $_SESSION["GO"]; ?>/<?= $SESSION["DES"]; ?></td>
<td><?= $_SESSION["DAY"]; ?></td>
<td></td> //時間を表示したい
<td><?= $_SESSION["CLASS"]; ?></td>
<td></td> //料金を表示したい
</tr>
</table>
<input type="submit" name="submit" value="お申込み">
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • kei344

    2017/01/30 12:00

    各phpのフォームにかかわる部分を追記されたほうがよいと思います。

    キャンセル

  • kei344

    2017/01/30 14:07

    課題だということですが、「php/mysqlを使用しなければならない」という指定があるのでしょうか。

    キャンセル

  • aaaaasu

    2017/01/30 15:22

    いえ、何を使っても良くて私たちのグループはphp等を使って予約サイト作ろうとなりました

    キャンセル

回答 3

+3

ようは、inputのradioを置けば良いと思います。
whileは回すとこなので、回さないとこでformタグと、最終的に送信ボタンを設置しておいて、選択して送信さたら、どこを選択されたかがわかればいいので、その値をセットさせておけば良いんじゃないですか?

とりあえず、、、
どのようにセットするかの方法とかやり方はいろいろあると思いますが、現在表示されているデータの中で「何が違うか?」なんですけど、今回の場合は出発とかは同じで時間が違うだけですよね?

// 出発とかの共通の値はhiddenで持たせて、radioには時間をぶち込む
<input type="radio" value="時間">

<input type="hidden" value="出発">


出発とかは共通なので、回す必要もなく、submitの上に書けばいいと思います。
そうすると、結局次に送られる値は共通のhiddenの値と、radioの時間になれば、その行として再度表示させれば良いんじゃないでしょうか?

// 出発とかの値はそもそもSESSIONにぶち込んでみる
// 検索のデータを
$go =
$des =
$_SESSION['search_date'] = [$go, $des];

// radioの部分は上と同じく時間を


にすると、次のページではhiddenから値をとるんじゃなく、SESSIONからとるっていうのが違うだけ。

// テーブルにIDとかがふってあるなら
<input type="radio" value="テーブルのID">

// にしておいて、次のページでもう一回データベースに接続して、IDを元にSELECTをかけて表示させる


こんな感じで、何が違ってそれをセットさせるかだと思います。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/01/30 11:58

    回答ありがとうございます。

    valueでbin1〜bin4として送信したとしても
    時間料金は確認画面にもっていくことはできなくないですか?

    勉強不足で申し訳ないです。

    キャンセル

  • 2017/01/30 12:26

    これだけだと、いろいろこの回答こそツッコミどころ満載ですけど、、、

    とりあえず、、、、

    キャンセル

  • 2017/01/30 12:43

    ソースまでありがとうございます。
    今日はもう時間がないので読んで調べて理解し、明日試してみます

    キャンセル

0

よくわからないですけど、name と value を設定してやればよいのだと。
ただ、記載されているスクリプトからの想像ですが、スキル的にインターネット上に公開して良いレベルでは無いです。
もし業務で使用するのであれば、外部に委託したほうが良いです。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/01/30 14:54

    今までのところまでは色んなとこから引っ張っては失敗して、を繰り返してようやくできたものなんですよね
    やりたくなくてもやらなくちゃいけない社会のために、、って感じで学校行きました

    キャンセル

  • 2017/01/30 15:05

    ただあったものを使ってできた!、となってたので確かに良いものは作ろうと考えていないかもですね
    nameとvalue入れたものを使ってもできなかったので質問をしたんですけど私の説明不足もあり理解できてもらえず少し馬鹿にする回答が見受けられたのでそのものがずれてしまいましたね、すみません

    入力なしのエラーメッセージ等はログインや会員登録の時もしてるので後から入れるつもりだったのですが、それ関係なしに空だった場合何か必要なのですか?
    URLありがとうございます。みてみようと思います!

    キャンセル

  • 2017/01/30 15:41

    入力がない場合、それを検証する仕組みを作っておかないと、システムとしてエラーを出してしまいます。そういったエラーが出ると、本来仕組みとして持って置かなければならないものを実装していないプログラムとして評価されます。モノによってはコスト的な観点で、ワザと実装しないようなものもありますが、今回のようなケースでは、最初から考えておくべきポイントです。

    実装には、filter_input() を使用することが推奨されています。これは私も最近こちらで回答をいただき納得しました。興味があれば見て下さい。
    https://teratail.com/questions/63786

    公にするサイトでは、システムのエラー表示は設定で抑止しますが、今回のようにそれを評価対象として見るのであれば、未入力を検出しエラーとさせないための仕組みを実装することは必須です。

    また、ここでは質問されていませんが、ログイン関係は、本来ハードルがとても高いものです。
    現時点でコードに落とし込むところまで行うのは難しいと思いますが、読み物として、以下を参照して下さい。
    http://qiita.com/ShibuyaKosuke/items/f114ffccf441edb2b745
    私のお気に入りです。

    正直、学習していない内容で卒業研究を完成させる違和感は拭えませんが、作るならちゃんとしたものを作り、評価をもらって下さい。

    キャンセル

-1

inputタグにcheckedを入れるだけなのでは?

それと $go だの $des だの変数名のつけ方が最悪すぎて意味がわからないうえに解説コメントすら無いので、回答者から見たら読み解くのが大変です。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/01/30 11:35

    回答ありがとうございます。

    説明不足ですみません。
    $goは出発地
    $desは到着地にしています
    yoyaku.phpで出発地→大阪、到着地→東京、クラス→エコノミー、日付を選んでいただき一致した時間料金をDBから取り出します

    while文で回した4つの中から1つを選択して時間料金をポストする方法がわかりません
    回さなければわたしの知識でも足りるのですが....

    キャンセル

  • 2017/01/30 11:47

    (1):ユーザに出発地などをフォームから選んでもらう
    (2):選んだ選択肢に合致する時間と料金をDBから取り出す
    (3):(2)で取り出した時間・料金をユーザに表示する

    って流れですか?
    それなら何が分からないのかが分からないのですが。
    HTMLを理解できているのならば、その時間と料金を普通に表示するだけでしょう?
    なぜDBから取り出したものをまたポストしたいと言っているのか意味がわかりません。

    キャンセル

  • 2017/01/30 11:53

    流れはその通りです

    合致した時間料金が4種類あり、そこからお客様に選んだいただく、というものを作りたいです
    出発地が大阪ではなく東京であればまた時間料金も変わるのでDBに入っている便情報を取り出しています

    キャンセル

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

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

関連した質問

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