2011-11-10 6 views
-1

私は失敗したサブミットやページの更新時にデータが保存されるHTMLフォームを作成しています。PHPでフォームデータを保存しています。

私たちは、このデータを保存するためにPHPのセッションを使用しており、必要なときに我々は戻っ要素を投稿してください。

問題は機能していないということです。フォームデータは、エラーのある送信またはページリフレッシュで保存する必要があります。現在、失敗したサブミットまたはページリフレッシュでは、セッションにデータが格納されていません。

は、私はPHPにかなり新たなんだ、このコードのほとんどは私のものではないので、私に簡単に行きます。

使用されているPHP Sumbitコードは次のとおりです。

Software: PHPMailer - PHP email class          
Version: 5.0.2               
Contact: via sourceforge.net support pages (also www.codeworxtech.com) 
Info: http://phpmailer.sourceforge.net        
Support: http://sourceforge.net/projects/phpmailer/ 

はSESSION:

<?php 

session_name("fancyform"); 
session_start(); 

$str=''; 
if($_SESSION['errStr']) 
{ 
$str='<div class="error">'.$_SESSION['errStr'].'</div>'; 
unset($_SESSION['errStr']); 
} 

$success=''; 
if($_SESSION['sent']) 
{ 
$success='<div class="message-sent"><p>Message was sent successfully. Thank you! </p></div>'; 

$css='<style type="text/css">#contact-form{display:none;}</style>'; 

unset($_SESSION['sent']); 
} 
?> 

FORM:

<form id="contact-form" name="contact-form" method="post" action="submit.php"> 
<p><input type="text" name="name" id="name" class="validate[required]"  placeholder="Enter your first and last name here" value="<?=$_SESSION['post']['name']?>" /></p> 
<p><input type="text" name="email" id="email" class="validate[required,custom[email]]" placeholder="Enter your email address here" value="<?=$_SESSION['post']['email']?>" /></p> 
<p><input type="text" name="phone" id="phone" placeholder="Enter your phone number here" value="<?=$_SESSION['post']['phone']?>" /></p> 
<p> 
<select name="subject" id="subject"> 
<option>What event service are you primarily interested in?</option> 
<option>Event Creation</option> 
<option>Project Management</option> 
<option>Promotion</option> 
</select> 
</p> 
<textarea name="message" id="message" class="validate[required]" placeholder="Please  include some details about your project or event..."><?=$_SESSION['post']['message']?> </textarea> 
<input type="submit" value="" /> 
</form> 
+1

Er ... PHPの初心者であれば、問題の説明を免除するわけではありません。 –

+0

申し訳ありません、私の問題を編集して更新しました... – robabby

+0

ちょっとしたメモ...このデータにアクセスするためにセッションを使用する必要はありません。私はなぜあなたが$ _SESSION [ポスト] [電話]の代わりに$ _POST [電話]を使うことができなかったのか分かりません –

答えて

0

私が間違っているかもしれないが、私はあなたが取得する必要があると思いますフォームから値を投稿しました。

if ($_POST['errStr']) { 
    $_SESSION['errStr'] = $POST['errStr']; 
} 

私はあなたはそれがポストとして設定フォームのMETHOD属性を見れば、フォーム

を掲示した後、変数にアクセスしようとしているので、これは値を返す必要があり、その方法右だ場合ページ間を渡りたい

これはあなたが尋ねていたものではないかもしれませんが、私は少し問題があるのか​​どうか不明です。私はそのフォームから値を取り、次のページでそれらを取得すると仮定しています。

ページが更新されたときにそれを実行したい場合は/あなたはおそらく、アクションが発生する前にそれを試してみて、キャッチするいくつかのJavaScriptクライアント側を使用する必要があるだろう終了しました。

これが可能かどうかわかりません。 PHPは実行されたサーバー側としてそれを手伝ってくれませんし、クライアントは終了/再ロード時に何か(有用)をサーバーに提出することはありません。

これはおそらく、window.onclose(明らかにsafariやfirefox 2では動作しませんが)のようなjavascriptリスナーを使用し、サーバーにデータを送信するためのajax xmlhttprequestを使用する必要があります。失敗した(に無効なデータを持つすなわちキャプチャフォームを?)を提出そのほぼ同じケースで働いていた提出フォームとしてのために

。データを処理しているときに相手側のデータを再確認するだけです。

+0

これはページリロードを処理しません。 –

+0

なぜこれでリロードが処理されないのですか? –

+0

私の間違い。問題は、クライアントが送信をクリックするか、ページを更新するときに、フォームデータが失われることです。フォームデータを保存したいと考えています。 – robabby

0

HTTPはステートレスで、そしてあなたは、クライアント側のアプローチ(webstorage、など)を使用しない限り、提出されていないデータは残りません。

+0

mmkay、 残念ながら、私はこのために非常に締め切り期限があります。約1時間ほどで完了する必要があります。プロジェクトが予算を超過したために契約を結びました。締め切りは今日のCST午後3時です。 セッションのクッキーを実現可能なルートに設定するのか、それとも私が利用できるjQueryプラグインですか? – robabby

+0

私は彼が永続的なローカルストレージを探していたとは思わないが、失敗したサブミットでフォームフィールドを再設定するだけです(つまり、不正な検証) –

+0

@David - Correct – robabby

0

あなたは今、あなたは$ _SESSIONを参照している、ポスト変数を解析して、セッションのスーパーグローバルに追加する必要があり[「ポスト」] [「電話」]これは期待どおり動作しません。

// Assuming same file, this is session section 
if (array_key_exists('submit', $_REQUEST)) { 

    if (array_key_exists('phone', $_REQUEST)) { 
     $_SESSION['phone'] = $_REQUEST['phone']; 
    } 
} 

// Form section 
<?php $phone = (array_key_exists('phone', $_SESSION)) ? $_SESSION['phone'] : null;?> 
<input type="text" name="phone" id="phone" placeholder="Enter your phone number here" value="<?php echo $phone ?>" /> 
+0

ありがとうございます。うまく行かなかった。 – robabby

+0

フォーム提出後、$ phoneはまだnullでしたか? –

+0

フィールドセットは、依頼したものであれば、失敗した投稿に対して空として返されました。 – robabby

0

あなたはsubmit.phpためのコードが含まれていないか、あなたがした場合、問題がクリアされている次のいずれかのあなたは、セッションの値を設定することはありませんしています。そのためには、あなたはsubmit.php

session_start(); 

// etc... 

$_SESSION['post']['name'] = $_POST['name']; 
$_SESSION['post']['email'] = $_POST['email']; 
$_SESSION['post']['phone'] = $_POST['phone']; 

// etc... 

を使用すると思いますし、フォームのページ(おそらく別のページには?)そして、それらの値が

.. value="<?php if (isset($_SESSION['post']['name'])) echo $_SESSION['post']['name']; ?>" .. 
+0

ありがとうございますが、私はこれを試しましたが、これも私にとってはうまくいきませんでした... – robabby

1

に設定されている場合は、$_SESSION['post']['form_element']を出力しているチェックすることができますあなたのテンプレートに上記のPHPコードでは、そのデータを設定する言及はありません。これを行うには、$ _POST配列をループし、各キーペアを$ _SESSION ['post']に割り当てる必要があります。

その時点で、セッションから以前に送信したフォームデータにアクセスできるはずですあなたが上にコーディングしたように。

あなたsubmit.phpにこれを追加します。

session_start();  
foreach ($_POST AS $key => $value) { 
$_SESSION['post'][$key] = $value; 
} 

これは、テンプレート内の将来の使用のために$ _POSTに$ _SESSION [「ポスト」]からすべてのデータを移動し、あなたがする必要があるすべてでなければなりませんそれを働かせてください。

+0

私はこれをphpmailer.phpのオープニング<?phpの直後に追加しましたが、送信に失敗した後もデータは流れません。 – robabby

+0

遅れて申し訳ありませんが、このケースでは何かが壊れているようです。あなたはphpmailer.phpとsubmit.phpには言いませんでした。私はちょうど一方がもう一方から呼び出されていることを確認したいと思います。私はそう思っていますが、知る方法はありません。また、print_r($ _ SESSION);とすることもできます。テンプレートのどこかで配列のプリントアウトを見て、セッションデータが保存されていることを確認してください。これを$ _POSTにして、POSTデータが正しいかどうかを調べることもできます。 –

関連する問題