セッション変数が保存されないという問題をすべて調べましたが、問題が見つからないので、質問します。
一度送信すると、データベースでその名前を検索するフォームがあります。最初のフォームはページ 1 にあります。ページ 2 では、ページ 1 から変数を取得し、次のように保存します。
$searchTerm = $_POST['find'];
これはデータベースの検索として使用され、完全に機能します。その下にSQLステートメントがあり、これを配置しました
//initialize the session
if (!isset($_SESSION)) {
session_start();
}
$_SESSION['searchTerm'] = $searchTerm;
次に、2 ページ目の $_SESSION['searchTerm'] をテストして、正しく保存されていることを確認しました。2ページ目からフォームの確認ページである3ページ目に移動しようとすると、問題が発生します.3ページ目の上部にセッション開始句があり、挿入さえしました
ini_set('display_errors',1);
error_reporting(E_ALL);
エラーを確認しましたが、エラーは表示されませんでした。したがって、次のステップは、セッション自体をテストして、セッション ID が更新されているかどうかを確認することでした。このサイト www.webassist.com/forums/posts.php?id=5735 でスクリプトを見つけて、サーバーが問題を引き起こしている可能性があるかどうかをテストしました。スクリプトは問題なく正常に動作し、サーバーに問題がないことを示しています。ただし、2番目と3番目のページをサーバーにアップロードして入れると
<?php echo session_id(); ?>
ページ 2 とページ 3 の数値がまったく異なるため、変数が null になります。私はさらに調査を行い、session_destroy または session_unset があったためではないかと考えましたが、どちらのページにもこれらのいずれも配置しませんでした。ローカル マシンでこれを試したところ、同じセッション ID が得られましたが、設定したセッション変数は空白のままでした。
これがどのように、またはなぜ起こるかについて、他に考えがある人はいますか?
** * ** * ****編集** * ** * ** * ** * ** * ** * ** *
ページ1にはこのフォームがあります
<form name="search" method="post" action="page2.php">
<div>
<!-- Search-->
<label>Search by Last Name:</label>
<div>
<table width="100%">
<tr>
<td><input type="text" id="" name="find" placeholder=""></td>
<td><button id="submit" type="submit"><span>Search</span></button></td>
</tr>
</table>
</div>
</div>
</form>
ページ2
$searchTerm = $_POST['find'];
if(!empty($searchTerm ) && ctype_alpha($searchTerm ))
{
$whereclause = "WHERE mytable.lastName = '".$searchTerm ."'";
}
else {
$whereclause = "";
}
// sql query is here this one searches it is long and just used the $whereclause above.
// second sql query that is only submitted if button from the form below is hit is here.
$insertGoTo = "confirmPage3.php";
if (isset($_SERVER['QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'] ;
}
header(sprintf("Location: %s", $insertGoTo));
//initialize the session
if (session_id() == '') {
session_start();
}
$_SESSION['searchTerm'] = $searchTerm;
// then the form is listed below that with the rest of the html
3ページ
<?php if(session_id() == '') session_start(); ?>
if(!empty($_SESSION['searchTerm']) && ctype_alpha($_SESSION['searchTerm']))
{
$whereclause = "WHERE myTable.lastName = '".$_SESSION['searchTerm'] ."'";
}
else {
$whereclause = "";
}
// More sql statement here for this one it is only selecting not updating or changing anything.
// Table below this that is used to hold the items retrieved from the database.
** * ** * ** * ** edit 2 と私の修正* ** * ** * ** *
それで、何人かの返信の後、アーロン・ゴングは、空白のページから始めて、そこから始めることを提案しました。私はこれを行い、最終的に問題を診断しました。それは私が考えていなかったもので、私が持っているべきものでした。私は Dreamweaver を使うのが好きではありませんが、その理由を思い出しました。最初にページ 2 を作成したとき、dreamweavers 挿入コードを使用して SQL ステートメントを挿入し、更新を行いました。これらのコード行をコードに配置しました。
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
ユーザーを別のページに送ってエントリを確認しようとしている場合、これは完全に混乱します。私はそれをコメントアウトし、$editFormAction を自分のページに設定し、それをヘッダー文字列とビオラで使用して、すぐに問題を修正しました。私が気付いていなかったのは、ページを更新しているときに $_POST 変数を空にしていて、Aaron が示唆する空のページで最終的にそのエラーを発見したことです。
これが他の誰かの役に立てば幸いです。dreamweaver のコードを二度と信用することはありません。私は手でコーディングすることを学びましたが、もっとよく知っているべきですが、急いでいたので、害はないと思いました。
すべての提案に感謝します。