別画面から遷移してきた場合の処理方法

このQ&Aのポイント
  • 別画面から遷移してきた場合は、DBを読み込んでプロセスを経てMySQLから読み込んだ$nameを表示する。
  • PHP_SELFでなく別画面から遷移してきた場合の判断方法についての解説がありません。
  • 冒頭の#3さんのサンプルのvalue="{$_POST["name"]}"を分岐させて処理する方法についての説明がありません。
回答を見る
  • ベストアンサー

別画面から遷移してきた時はDBを読み、それ以外のときはPHP_SELFを使いたい

http://oshiete1.goo.ne.jp/kotaeru_thanks.php3?a=7486449 の#3さんにご提示いただいたサンプル(→update.phpとします)を 組み込んでみたのですが、 投稿者名<input type="text" name="name" value="{$_POST["name"]}">{$errStr["name"]}<br> の「value=""」の値について、 update.phpに遷移してきた際は、↓みたいなプロセスを経てMySQLから 読み込んだ$col["name"]を直に表示させたいです。 $myID = GetmyID(); $con = mysql_connect(localhost, root, pw); $selectdb = mysql_select_db(serv, $con); $sql = "SELECT * FROM MyTab WHERE ID = '$myID'"; $rst = mysql_query($sql, $con); $col = mysql_fetch_array($rst); $name = $col["name"]; その場合、冒頭の#3さんのサンプルの value="{$_POST["name"]}" …を、 value="if (PHP_SELFでなく別画面から遷移してきて表示する場合) {   {$_POST["name"]} } else {   {$_POST["name"]} }" みたいに分岐すればいいのではないかと思いますが、 「PHP_SELFでなく別画面から遷移してきて表示する場合」の判断は どのようにしたらできますでしょうか。

  • PHP
  • 回答数2
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

今回の場合はとりあえず$_POST["reg"]の値を見て 判断するのが妥当かと思います。 別の画面から来た場合はregの値がヌルになるはず。 まぁ簡易的にregを振ってとんでくるような人がいても そんなに気にするようなもんでもないですし。 またリンク元のページを見る場合にはよくリファラーを 見ますね。 $_SERVER["HTTP_REFERER"]の値を拾ってみてください。 一部リファラーを返さない場合もありますので注意が 必要です。 またまたこれも偽装しようと思えばできるのであまり 信頼しすぎるのは禁物ですが、そこは運用面でカバー してください。

litton101
質問者

お礼

<td valign="top"><input type="text" size="55" name="name" value="{$_POST["name"]}">{$errStr["name"]}</td> の「value="{$_POST["name"]}"」のところを value="( $_POST["reg"] == "" ? $name : {$_POST["name"]} )"  や、 value="( is_null ($_POST["reg"]) ? $name : {$_POST["name"]} )"  などと としましたが、 Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in とエラーになります。「print <<<eof ~ eof;」の中では 分岐ができないのかなと、一旦これをやめてみましたが、関係ないみたいです。 ええっと・・対策ありますでしょうか・・ それと、 開発環境はXP(SP2)+IIS5.1 本番環境はFreeBSD4.7+Apache1.3.37、と異なりますが、 ソースの冒頭に echo $_SERVER["HTTP_REFERER"]; と記述してみたら、飛んでくる前のページのURLを返してきました。

litton101
質問者

補足

すみません、身勝手に用件だけ書いて御礼を書いてませんでした、 度々のアドバイス、本当にありがとうございます。

その他の回答 (1)

noname#185101
noname#185101
回答No.2

元質問者です。とりあえず、 print <<< eofをやめてPHPを閉じて、 タグ混在型にしたら動きました・・・ 大変お騒がせいたしました。 <input type="text" size="55" name="name" value="<?php if($_POST["reg"]=="") { echo $db_name; } else { echo $_POST["name"]; } ?>"></td> yamabejpさん、ありがとうございました。

関連するQ&A

  • セッションを使わずに遷移先画面に変数の値を渡すには?

    <input type="hidden" value="myID">みたいな隠しフォームで 行く先々の画面に値をPOSTで渡してきました。 他方、 header("Location: mypage.php") のように画面を遷移させる場合、遷移先の画面に $_POST["myID"]のように値を渡すことはできませんか? この場合session_start();を使って、$_SESSION["myID"]のように値を 渡す(保持する)のが王道なのでしょうか? セッションと聞くと何かとトラブルになりやすそうなイメージがあり、 できれば使いたくないのです。 具体的に説明しますと、前にこの掲示板で教えていただいた、次の例を使っています。 入力文字チェックをかけたいのでPHP_SELFで同じ画面を呼び出して、 問題なければmypage.phpにリダイレクトさせる枠組みですが、 header("Location: mypage.php");という風に遷移した場合は、 遷移先のmypage.phpでは、$_POST["myID"]はPOSTされてきませんよね (値を受け取れませんよね)?? 妙案あればご教示下さい。 <?php if ($_POST["reg"] == "" ) $errFlg = true; if (!$errFlg) {     if (strlen($_POST["myName"]) > 30) {       $errFlg = true;       $errStr["myName"] = "30字以下";     }   $errMsg = "エラー!!"; } if ($errFlg) { ?> <html>   <body>     <form method="post" action="<?php $_SERVER["PHP_SELF"] ?>">       氏名 <input type="text" name="myName" value="<?= $_POST["myName"] ?>"><?= $errStr["myName"] ?>       <input type="hidden" name="myID" value="<?= $_POST["myID"] ?>">     </form>     <input type="submit" name="reg" value="登録">   </body> </html> <?php } else {     $sql = "update mytable set myID = 'xxxx'";     $rst = mysql_query($sql, $con);     header("Location: mypage.php"); } ?>

    • ベストアンサー
    • PHP
  • リストから詳細画面に遷移するためのリンク作成と詳細画面の表示

    PHP5とMySQL4.0の組み合わせで、初歩的なことがわかりません。 例えば、(1)社員IDと、(2)年齢、(3)名前をリストアップする画面があるとして、 IDのところをハイパーリンクにして、それを押すとその社員の レコード内容を更新する画面を出す、みたいなことをしたいのですが、 これって method="POST" でなく、GETでやるのですよね? 「IDのリンク」とは、<a href="syain_detail.php?id=100">みたいなカタチに なるのでしょうが、具体的なスクリプトでご教示いただけないでしょうか。 単純に(IDへのリンクを考えずに)DBのレコードをPOSTでざーっと リストアップするHTMLまではできるのですが、 IDをハイパーリンクにして次の画面を構成するPHPがさっぱり わからないのです。下記、DBのサンプルと、わたしにわかるスクリプトです。 --------syainmaster---------- id   age  name ---------------------- 100   20   suzuki 200   24   sato 300   30   tanaka ----------------------- <?php   $con = mysql_connect(localhost, root, mypass);   $selectdb = mysql_select_db(mydb, $con);   $sql = "select * from syainmaster";   $rst = mysql_query($sql, $con);   $recmax = mysql_num_rows($rst);   $body = "<TABLE>";   for ($recnum = 0; $recnum < $recmax; $recnum++) {     $col = mysql_fetch_array($rst);     $body .= "<TR>";     $body .= "<TD>" . $col["id"] . "</TD>";     $body .= "<TD>" . $col["age"] . "</TD>";     $body .= "<TD>" . $col["name"] . "</TD>";     $body .= "</TR>";   }   $body .= "</TABLE>";   $con = mysql_close($con); ?> <HTML> <BODY> <?= $body ?> </BODY> </HTML>

    • ベストアンサー
    • PHP
  • PHP+MySQL データが無い時のみ追加したい

    PHP+MySQLで簡単なページカウンタを作っていますが、どうも正常に動いてくれません。 カウントを取りたいページに <IMG src="count.php?pagename=サンプルページ"> としてページネームを渡してあります。 count.phpの主要部分は //ページネームを取得(例:サンプルページ) $pagename = $_GET["pagename"]; とし、データベースに接続したあと // データ取り出し $sql = "SELECT name, count FROM shukei ORDER BY count;"; $rst = mysql_query($sql, $con); //データをループで読み込み while ($col = mysql_fetch_array($rst)) { $name = $col[name]; //渡されたページ名がDB内にあればカウント1増 if($name == $pagename){ $sql = "update shukei set count = count + 1 where name = '$name'"; } //渡されたページ名がDB内に無ければ新規追加 elseif($name != $pagename){ $sql = "INSERT INTO shukei(name,count) values(\"$pagename\",1)"; } } mysql_query($sql, $con); //接続解除 mysql_free_result($rst); $con = mysql_close($conn); としています、どんどん新規で追加されていってしまいます。 DB内にページ名が存在するならカウントアップをし、無い時はカウント1として新規追加をさせたいのですが…。 テーブル名はshukeiで id,name,count としております。 何か根本が間違っているのでしょうか。 どうぞ宜しくお願い致します。

    • ベストアンサー
    • PHP
  • PHPプログラミングについて、ホームページの画面表示方法を教えてくださ

    PHPプログラミングについて、ホームページの画面表示方法を教えてください。 (テーブルのid順以外に並べる方法) ・MySQLのテーブル名:category、フィールド2つ:idとname 1)すべてのカテゴリを読み込むSQLを組み立て $sql = "SELECT * FROM category"; 2)結果セットを取得し $rst = mysql_query($sql, $con); 3)オプションメニューを組み立て $stroption = ""; while ($col = mysql_fetch_array($rst)) { $stroption .= "<OPTION value='$col[id]'>$col[name]</OPTION>"; } 4) <SELECT name="categoryid"> <OPTION value="0" selected>--カテゴリ--</OPTION> <?=$stroption?> </SELECT> 結果→id順になる これをnameのABC順に並ぶようにする方法を ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 教えていただけないでしょうか? 是非よろしくお願いしたします。

    • ベストアンサー
    • PHP
  • ウィザード形式のアンケートを作りたい

    HTML_QuickForm_Controllerみたいに,ウィザード形式で 進めるアンケートを作りたいです. まず,http://oshiete1.goo.ne.jp/qa2419133.htmlのNo3さんの 回答を元に1枚アンケートを作りました. アンケート回答を記入後,「送信」ボタンを押すと データベースをUpdateして,同じPHPファイルを読み込み(PHP_SELF) 記入にエラーがあればメッセージを, DB更新に成功したら更新成功,失敗したら失敗と表示するもの. ここで,更新がうまくいったら成功と表示するのではなく, 別のPHPファイルを読み込みたい(次のページに遷移したい)です. (無論.記入漏れやDB更新に失敗しら遷移せずにエラーが必要です) 骨組みだけ示すと,下記のような感じですが, 次のページに飛ばすには,どうしたらいいでしょうか. <?php $myID = getMyID(); $errFlg=false; if ( $_POST["reg"] == "" ) $errFlg = true; if ( !$errFlg ) $errmsg = "エラーあり"; if ( $errFlg ) { ?> <html> <body> <?php echo $errmsg; ?> <form method="post" action="<?php $_SERVER["PHP_SELF"] ?>"> <input type="text" name="email" value="<?php if($_POST["reg"]=="") { echo $db_email; } else { echo $_POST["email"]; } ?>"><?= $errStr["email"] ?> <input type="submit" name="reg" value=" 送信 "> </form> </body> </html> <?php } else { $email = $_POST["email"]; $con = mysql_connect(localhost, root, pass); $selectdb = mysql_select_db(mydb, $con); $sql = "UPDATE mytable SET email = '$email', WHERE myID = '$myID'"; $rst = mysql_query($sql, $con); if ($rst) { $body = "更新成功"; } else { $body = "更新失敗"; } print "$body<br><a href='menu.php'>戻る</a>"; } ?>

    • ベストアンサー
    • PHP
  • DBからの値をリストアップするとき目印別にテーブルを組みたい

    ■ 環境 PHP 5.0.4 Win、MySQL mysql 4.0.14b Win ■知識レベル HTMLタグ打ち、初歩SQLは理解可、PHP他プログラミング知識なし 文末のソースで以下のようなリストを作ることはできたのですが: n冊みつかりました。 ―――――― 価格 書名 ―――――― 1000 ○○○ 2000 △△△   : ―――――― テーブルに含まれるpublisherというフィールドを目印に出版社別にテーブルを 組んで表示したいのですが、どのように書き換えたらよいでしょうか。 n冊みつかりました。出版社が n社 ありますので出版社別に分けて表示します。 ×社 ―――――― 価格 書名 ―――――― 1000 ○○   : ―――――― □出版 ―――――― 価格 書名 ―――――― 2000 △△   : ―――――― : <?php $con = mysql_connect(SERVER, USER, PASS); $selectdb = mysql_select_db(MYDB, $con); $sql = "select * from book"; $rst = mysql_query($sql, $con); $recmax = mysql_num_rows($rst); $body = "<B>$recmax 冊みつかりました。</B>"; $body .= "<TABLE> <TR> <TD>価格</TD> <TD>書名</TD> <TR>\n"; while($col = mysql_fetch_array($rst)) { $body .= "<TR>\n"; $body .= "<TD>" . $col["price"] . "</TD>\n"; $body .= "<TD>" . $col["title"] . "</TD>\n"; $body .= "</TR>\n"; } $body .= "</TABLE>\n"; mysql_free_result($rst); $con = mysql_close($con); ?> <HTML><BODY> <?= $body ?> </BODY></HTML>

    • ベストアンサー
    • PHP
  • 検索結果の表示をもっと早くしたい

    次のように、200人の「MYID」諸氏に対応する登録年月(6桁)を リストアップしたところ、SQLを人数分解釈するためか、 表示までに異常に時間がかかってしまうのですが、 改善案をご教示いただけますと幸いです。 リストアップのイメージ (1001氏) 200409 200410 200411 (1002氏) 200501 200402   :(略) <?php $con = mysql_connect(SERV, USR, PASS); $selectdb = mysql_select_db(MYDV, $con); $numfrom = "1001"; $numto = "1200"; for ($i = $numfrom ; $i <= $numto; $i++) { $sql = "SELECT * FROM MYTABLE"; $sql .= "WHERE MYID = " . $i; $rst = mysql_query($sql, $con); $recmax = mysql_num_rows($rst); $body .= "<table border='1'>\n"; for ($recnum = 0; $recnum < $recmax; $recnum++) { $col = mysql_fetch_array($rst); $body .= "<tr>\n"; $body .= "<td>" . $col["YYMM"] . "</td>\n"; $body .= "</tr>\n"; } $body .= "</table><br>\n"; } mysql_free_result($rst); $con = mysql_close($con); ?> <html><body> <?= $body ?> </body></html>

    • ベストアンサー
    • PHP
  • テーブルの最後のレコードしか表示されない

    すごく初歩的な質問だと思い申し訳ないのですがご教授下さい。 タイトル通り、テーブルの最後のレコードしか表示されないのです。 この前までは全て表示できていたのですが、 どこをどういじったのか、このようなことになってしまいました。 itemというテーブルには53個登録があり、53番目のものしか表示されません… $sql = "select * from item order by id"; $rst = mysql_query($sql, $con); while($col = mysql_fetch_array($rst)) { $dbt = "<tr bgcolor='#FFFFFF'> <td align='center'><a href='use.php?key=".$col["name"]."'>".$col["name"]."</a></td> <td align='center'>".$col["name1"]."</td> <td align='center'>".$col["name2"]."</td> <td align='center'>".$col["name3"]."</td> <td align='center'>".$col["name4"]."</td> <td>".nl2br($col["name5"])."</td> <td align='center'>".$col["name6"]."</td> </tr>"; } mysql_free_result($rst); $con = mysql_close($con); それと、もう一つ解決したいことがあるのですが、 <a href='use.php?key=".$col["name"]."'>".$col["name"]."</a> のようにアンカーを張り、次のページに変数を渡す方法で、use.php?key=*****のように、表示させないことは可能でしょうか? 見た目にも悪いですし、セキュリティ上も好ましくないかと思いまして方法があればと思いました。

    • ベストアンサー
    • MySQL
  • チェックボックスでチェックした配列の値をDBに。

    チェックボックスでチェックした配列の値を データベースのカラム名と照らし合わせて 一致する所に「1」を入れたいのですが、うまくいきません。 PHP Version 5.1.6 MySQL - 5.0.45 で運用しています。 どうしたら、入れることができるでしょうか? ご教授、よろしくお願いいたします。 1 送るページ $sql = "select * from `class_tbl`"; $rest = mysql_query($sql, $con); while($col = mysql_fetch_array($rest)) { $classID = $col["classID"]; $class_name = $col["class_name"]; $sql = "select * from `member_sub_tbl` where `ID` ='$ID'"; $rst = mysql_query($sql, $con); while($col = mysql_fetch_array($rst)) { $kekka = $col["$classID"]; if($kekka==1) { echo <<<EOF <input type="checkbox" name="classID[]" value="$classID" checked/> $class_name EOF; } else{ echo <<<EOF <input type="checkbox" name="classID[]" value="$classID" /> $class_name EOF; } } } echo <<<EOF <input name="ID" type="hidden" value="$ID" /> EOF; 2 受けるページ $ID=$POST["ID"]; $classID=$POST["classID"]; var_dump($_REQUEST); 以下のように表示しています。 array(3) { ["classID"]=> array(10) { [0]=> string(4) "1010" [1]=> string(4) "1050" [2]=> string(4) "1110" [3]=> string(4) "1182" } ["sn"]=> string(2) "45" ["PHPSESSID"]=> string(32) "********************" } 「ID」の行に、配列の「1010」「1050」と 「member_sub_tbl(テーブル)」の「カラム名」を比較して、一致する所に「1」を入れたいのですがうまくいきません。 ※update をしたいのです。 試行錯誤していますが、方法が分かりません。 ご教授、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • WHERE文の中で、MYSQLにINSERTが出来ない。

    メールを指定した時間に送信しようとしています。 手順はMYSQLに送信したい時間とメールの色々を入れて、 CRONで現在時間を調べて、合致したものを送信する。 このような手順で実現しようとしていますが、 最初でつまずいています。 送信先メールアドレスを while で抽出しながら MYSQLへインサートするつもりですが 一度しかインサートしてくれません。 インサートのsqlを[print $sql;]で、表示したものをphpMyAdminで SQL を実行すると キチンと挿入できます。 **3回分まとめてSQL を実行してもうまく挿入できます。 前のページから送ったものは全て[print] で、思い通りの結果が表示します。 どなたか、ご教授お願いいたします。 $sql = "select count(*) as cnt from customer WHERE customerID IN (1,2,3,5,8)"; $rst = mysql_query($sql, $con); $col = mysql_fetch_array($rst); $tcnt = $col["cnt"]; mysql_free_result($rst); print $tcnt."通送信<br />"; $subject ="これはPOSTで送りました"; $honbun ="これはPOSTで送りました"; $from = '送信元メールアドレス'; $jikan = "これはPOSTで送りました"; $sql ="select * from customer WHERE customerID IN (1,2,3,5,8)"; $rst = mysql_query($sql, $con); while($col = mysql_fetch_array($rst)) { $customerID= $col['customerID']; $name = $col['name']; $mail = $col['mail']; i++ $sql = "INSERT INTO mail_queue_timer (timermailID,customerID, jikan ,sender , recipient ,headers, body ) VALUES ($timermailID, $customerID,$jikan , \"$from\" , \"$mail\" ,\"$subject\" , \"$honbun\" ) "; $rst = mysql_query($sql, $con); }

    • ベストアンサー
    • PHP

専門家に質問してみよう