PHP:使用self提交表单并呈现不同的页面项?

时间:2012-01-30 14:17:34

标签: php forms post submit

我以前从未这样做过,只需要一些建议怎么做......

我有一个index.php文件,其中包含简单的联系表单。

<form id="contactform" method="post" action="<?php echo $_SERVER["SCRIPT_NAME"] ?>">

index.php文件顶部有以下脚本。

<!DOCTYPE html>
<html dir="ltr" lang="en-US">

<?php

    //Vars
    $Name = Trim(stripslashes($_POST['author']));
    $EmailFrom = Trim(stripslashes($_POST['email']));
    $Subject = Trim(stripslashes($_POST['subject']));
    $Type = Trim(stripslashes($_POST['type']));
    $Comment = Trim(stripslashes($_POST['message']));
    $EmailTo = "address@something.com";

    //Validation
    $valid = true;
    if ( $Name == "" ) $valid = false;
    if ( isValidEmail( $EmailFrom ) == 0 ) $valid = false;
    if ($Subject == "") $valid = false;
    if ($Comment == "") $valid = false;
    function isValidEmail( $email = null ) {
        return preg_match( "/^[\d\w\/+!=#|$?%{^&}*`'~-][\d\w\/\.+!=#|$?%{^&}*`'~-]*@[A-Z0-9][A-Z0-9.-]{1,61}[A-Z0-9]\.[A-Z]{2,6}$/ix", $email );
    }

    //Body
    $Body = $Type;
    $Body .= "\n\n";
    $Body .= $Comment;

    //Headers
    $email_header = "From: " . $EmailFrom . "\r\n";
    $email_header .= "Content-Type: text/plain; charset=UTF-8\r\n";
    $email_header .= "Reply-To: " . $EmailFrom . " \r\n";

    //Send
    if ($valid)
        $success = mail($EmailTo, $Subject, $Body, $email_header);

?>

我现在两个问题

1)。 当验证出错或成功或提交邮件时出现错误时,我究竟能如何呈现/不呈现某些内容?

e.g。我知道我能做到!         

        if ( !$valid )
            print "Failed to make contact. Enter valid login credentials! <a href='/#contact' title='try again'>try again?</a>";

        if ( $success )
            print "Successfully made contact.";
        else
            print "Failed to make contact. <a href='/#contact' title='try again'>try again?</a>"; */

    ?>

但是,如果不提交表单,页面加载时$valid将始终出错,并且电子邮件将始终在第一页加载时返回错误消息。如何在提交表单时呈现或不呈现特定内容?

E.g。提交表单并成功返回时,我不想再呈现#contactform。我只是想将“成功联系”打印成h1左右。

我怎样才能做到这一点?这可能很简单,我找不到自己的解决方案。

2)。 使用$_SERVER["SCRIPT_NAME"]或PHP_SELF作为操作时,提交表单后的URL将始终更改为“mydomain.com/index.php”。我可以阻止这种情况发生吗?我想提交index.php文件本身,但是当/index.php被写入url时我只是不喜欢它。是否有可能阻止这种情况发生?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

马特,

关于根据电子邮件的成功或失败打印到屏幕的第一个问题,您的检查似乎没问题,但您可能不会及时将电子邮件故障显示到屏幕上。也就是说,您只需要将第二组代码包装在if语句中。像这样:

if( isset($_POST['Submit']) ){  //only attempt to display if form submitted.
    //Your code here
}

至于不包括表单操作中的目录,有很多方法可以做到这一点,但这里有一个:

$scriptString= explode('/',$_SERVER['SCRIPT_NAME']);
$scriptSize = count($scriptString)-1;
$script = $scriptString[$scriptSize];

然后在表单操作中使用$ script。