Я никогда не делал этого раньше и просто нужен маленький совет, как это сделать ...
У меня есть файл 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.)
Как именно я могу рендерить / не рендерить определенные вещи, когда проверка прошла неправильно, или при отправке письма возвращается ошибка?
например. Я знаю, что могу это сделать!
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
всегда будет неправильным при загрузке страницы, если не отправлять форму, а также электронное письмо всегда будет возвращать сообщение об ошибке при загрузке первой страницы. Как я могу отображать или не отображать определенные вещи только при отправке формы?
например. При отправке формы и возвращении успеха я больше не хочу отображать #contactform
. Я просто хочу напечатать «Успешно установленный контакт» в h1 или около того.
Как я могу это сделать? Это, наверное, довольно просто, я просто не могу найти решение для себя.
2.)
При использовании $_SERVER["SCRIPT_NAME"]
или PHP_SELF в качестве действия URL после отправки формы всегда изменится на «mydomain.com/index.php». Могу ли я предотвратить это? Я хочу предоставить сам файл index.php, но мне просто не нравится, когда в URL записывается /index.php. Можно ли это предотвратить?
Спасибо за вашу помощь!