電子書籍の厳選無料作品が豊富!

PHP + SQLite でメールフォームを作成しています。
以下の手順で、リクエスト ⇒ DB 書き込み ⇒ DB 更新までは完了しています。

---- 作成した PHP -----
リクエスト登録フォーム A.php
リクエストを検索するフォーム B.php
検索結果を表示するフォーム C.php

---- 手順 -----
1. A.php でレコードを登録する。
2. B.php で、キーワードを指定して DB からレコードを検索する。

<form name="B" action="C.php" method="post">
予約番号: <input type="text" name="search_term" size="40"><br>
<input type="submit" value="検索">
</form>

3. 検索キーワードに該当するレコードが DB から呼び出され、C.php に表示される。

$search_term = $_POST['search_term'];
print("予約番号 = $search_term<br>\n");

// 入力された予約番号で検索
$result = sqlite_query($db, "SELECT * FROM proofreq WHERE RequestNo LIKE '%$search_term%' ORDER BY RequestNo DESC");
while ($rec = sqlite_fetch_array($result, SQLITE_ASSOC)) {
$formcnt += 1;
.... 以下中略

4. B.php で、レコードを変更する。

5. 変更内容が DB に書き込まれる。


問題はこのあと ------------------

STEP 2.の検索結果だけを表示する C.php に戻りたいのですが、

header('Location: C.php');

では、DB の全レコードを表示する C.php に戻ってしまします。


質問 -----------------------------
STEP 2.の検索結果だけを表示する C.php に戻るには、どうすればいいでしょうか。


自分なりに考えたこと -----------------------
STEP 2.の検索結果だけを表示する C.php を、一意に特定できる状態にして、

header('location: C.php?search_term='.$RequestNo );

でリダイレクトとする。

...しかし、「一意に特定できる状態にする」 方法がわかりません。。

行き詰まりました。
どなたか、よろしくご教示ください。

A 回答 (2件)

補足では、location headerの記述が変わっているけどupdate.phpで作り直していると云うことでしょうか?



>header("Location: update.php?var=$RequestNo"); で送っても、if($_GET['var']); で受け取れません。

$RequestNoにデータは入っているのか?とか、送信後のアドレス欄は、以下のようになっていなければなりませんが、ちゃんとquery表示されているのか?とかもチェックしていかないと問題が特定出来ません。
http://*****/update.php?var=3

今更ですけどheaderの発行は、ちゃんと実行されているのですよね?
header発行前に何らかの出力が行われていて、ジャンプしてないとかでは無いですよね?

回避策の、D.phpも2.のformと要素名が違ってるので、ちゃんと検索出来てないのでは??

どうも、一連の作業での変数名や、form要素名が一定していないので、よけい混乱しているように見受けます。
0から、データ受け渡しのストーリーをきちんと設計し直した方が早そうな気がする。
    • good
    • 0
この回答へのお礼

はい。header の発行は実行されています。
送信後のアドレス欄もhttp://*****/update.php?var=3のように表示されます。

> 回避策の、D.phpも2.のformと要素名が違ってるので、ちゃんと検索出来てないのでは??
書き間違えました。
実際には、form 名 は 'B' にしていますので、検索はできています。

やはり、設計上、色々と問題があるのですね。
ご指摘、ありがとうございます。もっと勉強します。

現状は、上の回避策で動いているので、これで対応しようと思います。

返信いただき、ありがとうございました。心強かったです。

お礼日時:2007/08/20 11:25

>「一意に特定できる状態にする」 方法


見た限りでは、必要データ送信は出来ているように思うのだけど?
あと、リダイレクト時はget送信なので、C.phpはgetでのデータも受け取るようにしないとなりません。此処が出来てないと云うことかな?
php4.1.0以降なら、$_POSTを$_REQUESTにすれば、getもpostも同様に受け取れます。

この回答への補足

hrm_mmm様
お返事いただき、ありがとうございます。

> 此処が出来てないと云うことかな?
はい。。。
header("Location: update.php?var=$RequestNo"); で送っても、if($_GET['var']); で受け取れません。

「?var=$RequestNo」部分を記述しなければ、この (↓) 状態に戻ってしまいます。

1| ○月○日 | 山本太郎 | 東京都
2| ○月○日 | 川口太郎 | 千葉県
3| ○月○日 | 山田太郎 | 神奈川県 << 変更は反映されている
....

$RequestNo が 「3」 だとすると、この (↓) 状態に戻ってほしいのですが、


3| ○月○日 | 山田太郎 | 神奈川県 << 変更は反映されている


回避策として、今は確認ページ (D.php)に飛ばして、そこで、もう一度検索させています。

header("Location: D.php");

D.php -------------
<form name="search" action="C.php" method="post">
<p>更新が完了しました。内容を確認してください。</p>
<p><b>校正予約番号</b>:
<input type="text" name="RequestNo" value="<?php print(stripslashes($_GET['var'])); ?>">
<input type="hidden" name="rowid" value="<?php print("{$var}"); ?>">
<input type="submit" name="check" value="確認"></p>
</form>

補足日時:2007/08/16 18:52
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!