我以前从未这样做过,只需要一些建议怎么做......
我有一个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时我只是不喜欢它。是否有可能阻止这种情况发生?
感谢您的帮助!
答案 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。