🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PHP

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

Q&A

解決済

2回答

726閲覧

値の取得元が二つあるphpプログラムについて

noizi.

総合スコア27

PHP

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

0グッド

0クリップ

投稿2021/02/03 13:02

編集2021/02/04 02:03

前提・実現したいこと

自分は今、下記のような動きをするプログラムを書いています。(他の質問サイトで同じ質問をしたのですが、他の方の意見も聞いてみたく質問させていただきました。)

同じ質問をした質問サイトのURL: http://oshiete.goo.ne.jp/qa/12183867.html

顧客検索画面
顧客番号を入力後、検索ボタンを押し、顧客検索画面に遷移、顧客番号は顧客検索結果画面に渡されます。

顧客検索結果画面(問題のプログラム)
顧客検索画面から渡された顧客番号で、DBから関連した値を画面に表示します。
修正ボタンは値を修正した場合に押し、次の画面に修正した値を渡します。
戻るボタンは顧客検索画面に戻る場合に押し、遷移します。

顧客情報修正確認画面
顧客検索結果から渡された値を表示します。
確定ボタンを押してDBに接続し、値を更新します。
戻るボタンを押したとき、顧客情報修正確認画面に表示されている値を遷移元に修正後の値を表示したいのですが、顧客検索画面で検索した値が表示され、修正後の値が上書きされてしまいます。

上記の問題(修正後の値の上書き)を解決するために下記のプログラムを作りました。

下記のプログラム(顧客検索結果画面)に何かおかしいところがあるのでしょうか?

該当のソースコード(顧客検索結果画面)

<?php $dsn = 'mysql:dbname=example;host=localhost'; $user = 'root'; $password = 'shapshap'; try{ if (isset($_GET['C_num'])){//顧客情報修正確認画面から得た値を処理 $get_C_nam[] = $_GET['C_name']; $get_C_nm[] = $_GET['C_num']; $get_C_phn[] = $_GET['C_phon']; $get_C_add[] = $_GET['C_add']; } else{//顧客検索画面から得た値を処理 $dbh = new PDO($dsn, $user, $password); $C_nm = $_GET['C_num']; $sql = 'select * from example where C_nm= '.$C_nm.''; foreach ($dbh->query($sql) as $row) { $get_C_nam[] = $row['C_nam']; $get_C_nm[] = $row['C_nm']; $get_C_phn[] = $row['C_phn']; $get_C_add[] = $row['C_add']; } } } catch (PDOException $e){ print('Error:'.$e->getMessage()); die(); } $dbh = null; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width"> <title>顧客検索結果</title> <link rel="stylesheet" href="ser_style.css"> </head> <body> <div class="content"> <script> function check() { txt = document.form1.C_name.value; n = txt.length; if (n > 10){ alert("顧客名は10文字以内で入力してください"); return false;} txt = document.form1.C_phon.value; n = txt.length; if (n > 11){ alert("顧客電話番号は11文字以内で入力してください"); return false;} txt = document.form1.C_sa.value; n = txt.length; if (n > 50){ alert("顧客住所は50文字以内で入力してください"); return false;} txt = document.form1.C_name.value; n = txt.length; if (n == ""){ alert("顧客名に未入力がありました"); return false;} txt = document.form1.C_phon.value; n = txt.length; if (n == ""){ alert("顧客電話番号に未入力がありました"); return false;} txt = document.form1.C_sa.value; n = txt.length; if (n == ""){ alert("顧客住所に未入力がありました"); return false;} } </script> <h1>顧客検索結果</h1> <form action="c_search_fix.php" name="form1" method="GET" onSubmit="return check();"> <div class="control"> <label for="C_num">顧客番号(修正不可)</label> <input readonly id="C_num" type="text" name="C_num" maxlength="6" value="<?php print($get_C_nm[0]); ?>" > </div> <div class="control"> <label for="C_name">顧客名(全角文字のみ入力可)</label> <input pattern="[^\x20-\x7E]*" id="C_name" type="text" name="C_name" value="<?php print($get_C_nam[0]); ?>" onkeyup = "this.value = this.value.replace(/[ -~1234567890]/g, '')"> </div> <div class="control"> <label for="C_phon">顧客電話番号(半角数字のみ入力可、11桁まで入力可,ハイフンなし)</label> <input pattern="^[0-9]+$" id="C_phon" type="tel" name="C_phon" min = "0" value="<?php print($get_C_phn[0]); ?>"> </div> <div class="control"> <label for="C_sa">顧客住所</label> <input id="C_sa" type="text" name="C_sa" value="<?php print($get_C_add[0]); ?>"> </div> <div class="control"> <input type="submit" value="修正"> </div> </form> <form action="menu.php" method="GET"> <div class="control"> <input type="submit" value="メニューへ"> </div> </form> </div> </body> </html>

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hentaiman

2021/02/03 13:27

> 他の質問サイトで同じ質問をしたのですが、他の方の意見も聞いてみたく質問させていただきました。 そちらの回答は?URL載せてください。
noizi.

2021/02/04 02:05

返信、ご指摘ありがとうございます。 同じ質問をした質問サイトのURLを載せました。 デバッグもやってみます。
guest

回答2

0

ベストアンサー

戻るボタンを History.back()な実装をしたら、キャッシュしているページをそのまま表示してしまうので、
戻ると言いつつも最新情報を改めて取得して表示するように仕向けるっていうだけだと思います。
そして、キャッシュに長々と残さないために有効期限を設定しておくのも手です。

→meta要素で期限を設定
HTMLタグ/ページ全般タグ/キャッシュの有効期限を指定する - TAG index

→HTTP応答ヘッダーに期限を設定
Expires - HTTP | MDN

投稿2021/02/04 01:40

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

もうちょっと要点を絞った質問にした方がよいとおもいますが
ブラウザバック前提の挙動の制御ということでしょうか?
sessionで管理し、更新後セッションのきれた更新完了ページに飛ばせばいい話では?

投稿2021/02/04 01:07

yambejp

総合スコア116688

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問