开发者

System not acting as should (can't really be more specific)

I have a system where the user sends an email using a form (simple).

HTML form

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

            &l开发者_如何学Ct;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>

On the same page, I have this if statement

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']);
    }

Now the process.php file the form directs to

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");
    }
} 

};

And now the session page where everything happens

//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 = "random@email.com";
    $subject = "Website enquiry from ".$email."";
    return mail($to,$subject,$body,$from);
}

Ok my problem is that the errors aren't coming back if I don't fill in the form. Also, the success text isn't being displayed if I don't?

Anyone see a problem with how this flows? Hoping I have just missed something simple!

Thanks!


I noticed this bit of code.

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'] is not set, then the IF statement inside that will never execute, meaning you will see neither the success nor failure message.

Also, are you starting the session anywhere on the page? If you never start a session, then $_SESSION['enq'] will never be set.

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


This is a very strange way to go about this. For example you're displaying success/failure message before the e-mail has been sent.

Have you copy and pasted this?

The usual method to do this would be to have the logic in process.php only, this is where you'd do your validation (return message to user if failed) and ultimately send the e-mail.

In the long run I think you'd be better off modifying the flow as I'm currently having a hard time trying to follow it.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜