2011-07-26 9 views
0

ユーザーがフォームを使用して電子メールを送信するシステムがあります(シンプル)。同じページでシステムが正常に機能していない(具体的には具体的ではない)

HTMLフォーム

<form method="post" action="process.php"> 

      <label class="fieldLabel">Your email:</label><label class="errorLabel"><?php echo $form->error("email"); ?></label> 
      <input type="text" name="email" maxlength="100" class="email" value="<?php echo $form->value("email"); ?>" /> 

      <label class="fieldLabel">Your enquiry:</label><label class="errorLabel"><?php echo $form->error("body"); ?></label> 
      <textarea name="body" class="enquiry"><?php echo $form->value("body"); ?></textarea>  

      <input type="submit" name="enquiry" class="button" value="Send Message"/> 

     </form> 

声明

if(isset($_SESSION['enq'])){ 
     if($_SESSION['enq']){ 
      echo "<h2>Your message has successfully been sent to Alan Slough.</h2>"; 
     } 
     else{ 
      echo"<h2>Oops, something went wrong. Please try again.</h2>"; 
     } 
     unset($_SESSION['enq']); 
    } 

フォームが

class Process{ 
//class constructor 
function Process(){ 
    if(isset($_POST['enquiry'])){ 
     $this->enquiry(); 
    } 
} 

function enquiry(){ 
    global $session, $form; 
    //Registration attempt 
    $retval = $session->enquiry($_POST['email'], $_POST['body']); 

    //Successful 
    if($retval == 0){ 
     $_SESSION['enq'] = true; 
     header("Location: contact-us.php"); 
    } 
    //Error found with form 
    else if($retval == 1){ 
     $_SESSION['value_array'] = $_POST; 
     $_SESSION['error_array'] = $form->getErrorArray(); 
     header("Location: contact-us.php"); 
    } 
    //Failed 
    else if($retval == 2){ 
     $_SESSION['enq'] = false; 
     header("Location: contact-us.php"); 
    } 
} 

}に指示process.phpファイルならば、私はこれを持っています。

そして今、すべてが

//enquiry being made 
function enquiry($email, $body){ 
    global $form; 

    //check email entered 
    $field = "email"; 
    if(!$email || strlen($email = trim($email)) == 0){ 
     $form->setError($field, "* Not entered"); 
    } 

    //check body(s) entered 
    $field = "body"; 
    if(!$body || strlen($body = trim($body)) == 0){ 
     $form->setError($field, "* Not entered"); 
    } 

    //if errors exist, send them back to the user 
    if($form->num_errors > 0){ 
     return 1; //errors with form 
    } 
    else if($form->num_errors == 0){ 
     $this->customerEnquiry($email, $body); 
      return 0; //successful 
    } 
    else{ 
     return 2; //failed 
    } 
} 

//send the enquiry to the account email 
function customerEnquiry($email, $body){ 

    $from = "From: ".$email." <".$email.">"; 
    $to = "[email protected]"; 
    $subject = "Website enquiry from ".$email.""; 
    return mail($to,$subject,$body,$from); 
} 

起こるセッションページ[OK]を私の問題は、私は、フォームに記入していない場合は、エラーが戻って来ていないということです。また、成功したテキストは表示されません。

誰かがこのフローの流れに問題がありますか? 私はちょうど何かを逃したことを望んでいます!

ありがとうございます!

+0

セッションは有効ですか?例えば。 'session.autostart = Off'または' start_session() 'を呼び出さない – Nemoden

答えて

2

私はこのコードを気付きました。 $ _SESSION [「ENQが」]に設定されていない場合

if(isset($_SESSION['enq'])){ // <---This... 
    if($_SESSION['enq']){ // <---And This 
     echo "<h2>Your message has successfully been sent to Alan Slough.</h2>"; 
    } 
    else{ 
     echo"<h2>Oops, something went wrong. Please try again.</h2>"; 
    } 
    unset($_SESSION['enq']); 
} 

することは、その内部にIF文を使用すると、成功も失敗もないメッセージが表示されますつまり、実行することはありません。

また、ページの任意の場所でセッションを開始していますか?セッションを開始しないと、$ _SESSION ['enq']は決して設定されません。

http://www.php.net/manual/en/function.session-start.php

+0

コンストラクタをオフにするだけです。今すぐ動作します。ありがとう。 – sark9012

1

これはこれについては非常に奇妙な方法です。たとえば、電子メールが送信される前に成功/失敗のメッセージを表示しているとします。

これをコピーして貼り付けましたか?

これを行う通常の方法は、論理をprocess.phpにすることだけです。これは検証(エラーが発生した場合にユーザーにメッセージを返します)し、最終的に電子メールを送信する場所です。

長期的には、私は現在、それを追いかけようとしているので、流れを変更する方が良いと思います。

+0

あなたの言っていることを理解しています。ちょっと面倒です。私はそれをきれいにするつもりです。それが今働いているので、それがうまくいくように整頓されます。ありがとう! – sark9012

+0

嬉しいことに:-) –

関連する問題