Проверка формы PHP (не знаю, как разделить ее на две разные страницы)

Я работаю над контактной формой в PHP. Мое знание PHP практически не существует.

Я пробовал какое-то время, чтобы получить HTML-форму для отправки в форму PHP, чтобы ее текстовые поля были проверены и необходимы, если они пустые, но не могут заставить ничего работать. Я также не знаю AJAX, иначе бы попытался это сделать.

Таким образом, прибегают к созданию собственной формы PHP внутри HTML-страницы.

Это текущая версия:

<?php // define variables and set to empty values $firstNameErr = $lastNameErr = $emailErr = $messageErr = ""; $first_name = $last_name = $email = $message = ""; if ($_SERVER["REQUEST_METHOD"] == "POST") { if (empty($_POST["first-name"])) { $firstNameErr = "First name is required"; } else { $first_name = test_input($_POST["first-name"]); } if (empty($_POST["last-name"])) { $lastNameErr = "Last name is required"; } else { $last_name = test_input($_POST["last-name"]); } if (empty($_POST["email"])) { $emailErr = "Email is required"; } else { $email = test_input($_POST["email"]); } if (empty($_POST["message"])) { $messageErr = "Message is required"; } else { $message = test_input($_POST["message"]); } } function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } ?> 

Это форма на той же странице:

 <form class="ui form" method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> <div class="field"> <label>First Name</label> <input name="first-name" id="first-name" placeholder="First Name" type="text"> <span class="error">* <?php echo $firstNameErr;?></span> </div> <div class="field"> <label>Last Name</label> <input name="last-name" id="last-name" placeholder="Last Name" type="text"> <span class="error">* <?php echo $lastNameErr;?></span> </div> <div class="field"> <label>Email</label> <input name="email" id="email" placeholder="Email" type="email"> <span class="error">* <?php echo $emailErr;?></span> </div> <div class="field"> <label>Message</label> <textarea rows="2" placeholder="Please type in your message" name="message" id="message"></textarea> <span class="error">* <?php echo $messageErr;?></span> </div> <button class="ui button" type="submit">Submit</button> </form> 

Есть ли способ сделать это на двух разных страницах, т. Е. Сформировать на первой странице и перенести на вторую страницу в режиме сеансов? Или это приемлемо для коммерческого сайта? Пожалуйста, дайте мне знать. Спасибо.

добавление

  if (empty($_POST["email"])) { $emailErr = "Email is required"; } else { $email = filter_vars(test_input($_POST["email"], FILTER_VALIDATE_EMAIL)); } 

Добавление 2

Я включил это в конец файла php, т. Е. После функции test_input. header('location: php_mailer_form.php'); Это правильное размещение?

Но по какой-то причине, когда я пытаюсь посетить форму contact.php, она даже не появляется, она просто переходит прямо к форме ошибки, которая у меня есть в нижней части php_mailer_form.php.

  if(!$mail->send()) { header('location: url/contactError.html'); } else { header('location: url/contactResult.html'); } 

Зачем? (пожалуйста, дайте мне знать, если мне нужно включить дополнительную информацию).

Добавление 3

 <?php session_start(); $first_name = $_SESSION['first-name']; $last_name = $_SESSION['last-name']; $email = $_SESSION['email']; $message = nl2br($_SESSION['message']); require 'PHPMailerAutoload.php'; $mail = new PHPMailer; //$mail->SMTPDebug = 3; // Enable verbose debug output $mail->isSMTP(); // Set mailer to use SMTP $mail->Host = 'host_specified'; // Specify main and backup SMTP servers $mail->SMTPAuth = true; // Enable SMTP authentication $mail->Username = 'email_specified'; // SMTP username $mail->Password = 'password_specified'; // SMTP password $mail->SMTPSecure = 'tls'; // Enable TLS encryption, `ssl` also accepted $mail->Port = 587; $mail->addReplyTo( $email, $first_name ); $mail->addAddress( $email, $first_name ); $mail->addAddress( 'email_specified', 'Staff' ); $mail->From = 'email_specified'; $mail->FromName = 'Staff'; $mail->isHTML(true); // Set email format to HTML $mail->Subject = 'Hotel Room Request'; $mail->Body = $message; $mail->AltBody = 'To view the message, please use an HTML compatible email viewer!'; if(!$mail->send()) { header('location: url/contactError.html'); } else { header('location: url/contactResult.html'); } 

Добавление 4

 <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>Contact</title> <!--[if lt IE 9]> <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> <style type="text/css"> .ui.fixed.sticky + p { margin-top: 39px; } .error { color: #FF0000; } </style> </head> <body> <?php session_start(); //allows use of session variables if ($_SERVER["REQUEST_METHOD"] == "POST") { if (!isset($_POST["first-name"])) { $firstNameErr = "First name is required"; } else { $first_name = test_input($_POST["first-name"]); } if (!isset($_POST["last-name"])) { $lastNameErr = "Last name is required"; } else { $last_name = test_input($_POST["last-name"]); } if (!isset($_POST["email"])) { $emailErr = "Email is required"; } else { $email = test_input($_POST["email"]); } if (!isset($_POST["message"])) { $messageErr = "Message is required"; } else { $message = test_input($_POST["message"]); } if(isset($first_name) && isset($last_name) && isset($email) && isset($message)) { $_SESSION['first_name'] = $first_name; $_SESSION['last_name'] = $last_name; $_SESSION['email'] = $email; $_SESSION['message'] = $message; header("Location: contact9Sessions.php"); } } function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } ?> <div class="ui container"> <div class="ui segment"> <div> <div class="ui fluid five item tabular menu"> <a class="item" href="index.html">Home</a> <a class="item" href="about.html">About</a> <a class="item" href="rooms.html">Rooms Info & Rates</a> <a class="item" href="book.html">To Book</a> <a class="item" href="contact.html">Contact</a> </div> </div> <div class="ui two column stackable grid"> <div class="ten wide column"> <form class="ui form" method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> <div class="field"> <label>First Name</label> <input name="first-name" id="first-name" placeholder="First Name" type="text"> <?php if(isset($firstNameErr)) print ('<span class="error">* ' . $firstNameErr . '</span>'); ?> </div> <div class="field"> <label>Last Name</label> <input name="last-name" id="last-name" placeholder="Last Name" type="text"> <?php if(isset($lastNameErr)) print ('<span class="error">* ' . $lastNameErr . '</span>'); ?> </div> <div class="field"> <label>Email</label> <input name="email" id="email" placeholder="Email" type="email"> <?php if(isset($emailErr)) print ('<span class="error">* ' . $emailErr . '</span>'); ?> </div> <div class="field"> <label>Message</label> <textarea rows="2" placeholder="Please type in your message" name="message" id="message"></textarea> <?php if(isset($messageErr)) print ('<span class="error">* ' . $messageErr . '</span>'); ?> </div> <button class="ui button" type="submit">Submit</button> </form> </div> <div class="six wide column"> <br><br> <img class="ui centered large bordered rounded image" src="images/tobereplaced.jpg"> </div> </div> </div> <div class="ui two column grid"> <div class="ui left aligned "> <p>Left Footer Stuff Here</p> </div> <div class="ui right aligned"> <p>Right Footer Stuff Here</p> </div> </div> </div> </body> </html> 

 <?php session_start(); //allows use of session variables if ($_SERVER["REQUEST_METHOD"] == "POST") { if (!isset($_POST["first-name"])) { $firstNameErr = "First name is required"; } else { $first_name = test_input($_POST["first-name"]); } if (!isset($_POST["last-name"])) { $lastNameErr = "Last name is required"; } else { $last_name = test_input($_POST["last-name"]); } if (!isset($_POST["email"])) { $emailErr = "Email is required"; } else { $email = test_input($_POST["email"]); } if (!isset($_POST["message"])) { $messageErr = "Message is required"; } else { $message = test_input($_POST["message"]); } if(isset($first_name) && isset($last_name) && isset($email) && isset($message)) { $_SESSION['first_name'] = $first_name; $_SESSION['last_name'] = $last_name; $_SESSION['email'] = $email; $_SESSION['message'] = $message; header("Location: php_mailer_form.php"); } } function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } ?> <form class="ui form" method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> <div class="field"> <label>First Name</label> <input name="first-name" id="first-name" placeholder="First Name" type="text"> <?php if(isset($firstNameErr)) print ('<span class="error">* ' . $firstNameErr . '</span>'); ?> </div> <div class="field"> <label>Last Name</label> <input name="last-name" id="last-name" placeholder="Last Name" type="text"> <?php if(isset($lastNameErr)) print ('<span class="error">* ' . $lastNameErr . '</span>'); ?> </div> <div class="field"> <label>Email</label> <input name="email" id="email" placeholder="Email" type="email"> <?php if(isset($emailErr)) print ('<span class="error">* ' . $emailErr . '</span>'); ?> </div> <div class="field"> <label>Message</label> <textarea rows="2" placeholder="Please type in your message" name="message" id="message"></textarea> <?php if(isset($messageErr)) print ('<span class="error">* ' . $messageErr . '</span>'); ?> </div> <button class="ui button" type="submit">Submit</button> </form> 

Теперь на другой странице, чтобы получить доступ к переменным, просто вызовите «session_start ()»; в верхней части страницы, как мы здесь делали, используйте для вызова значения $ _SESSION ['message'] "значение сообщения. Отвечает ли это на ваш вопрос? Также обратите внимание, что я отредактировал html, чтобы сообщение об ошибке только выводило, если была установлена ​​переменная ошибки.

Вот пример базовой формы. Все это может быть на одной странице. PHP наверху, прежде чем все html загрузится в браузер, <form> html вниз в любом месте <body> страницы html:

EDIT: я обновил код, чтобы включить ваш Email-адрес электронной почты.

 <?php class EmailEngine { public static function Send($settings = false) { $email = (!empty($settings['email']))? $settings['email']:false; $first_name = (!empty($settings['first-name']))? $settings['first-name']:false; $last_name = (!empty($settings['last-name']))? $settings['last-name']:false; $message = (!empty($settings['message']))? $settings['message']:false; $alt_message = (!empty($settings['alt_message']))? $settings['alt_message']:'To view the message, please use an HTML compatible email viewer!'; require(__DIR__.'/PHPMailerAutoload.php'); $mail = new PHPMailer; $mail->isSMTP(); // Set mailer to use SMTP $mail->Host = 'host_specified'; // Specify main and backup SMTP servers $mail->SMTPAuth = true; // Enable SMTP authentication $mail->Username = 'email_specified'; // SMTP username $mail->Password = 'password_specified'; // SMTP password $mail->SMTPSecure = 'tls'; // Enable TLS encryption, `ssl` also accepted $mail->Port = 587; $mail->addReplyTo( $email, $first_name ); $mail->addAddress( $email, $first_name ); $mail->addAddress( 'email_specified', 'Staff' ); $mail->From = 'email_specified'; $mail->FromName = 'Staff'; $mail->isHTML(true); // Set email format to HTML $mail->Subject = 'Hotel Room Request'; $mail->Body = $message; $mail->AltBody = $alt_message; return $mail->send(); } } // Just make an error reporting function to return errors function error_report($val = false) { $array["first-name"] = "First name is required"; $array["last-name"] = "Last name is required"; $array["email"] = "Email is required"; $array["message"] = "A message is required"; return (isset($array[$val]))? $array[$val] :false; } // Sanitize. I add false so no error is thrown if not set function sanitize_vals($data = false) { if(empty($data)) return false; $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } // If a value is posted (any will do from your form) process the rest of the $_POST if(isset($_POST["first-name"])) { // Just loop through the $_POST instead of doing all the manual if/else... foreach($_POST as $key => $value) { // This specifically processes your email address if(($key == 'email')) { // If not valid email, send to errors if(!filter_var($value,FILTER_VALIDATE_EMAIL)) $errors[$key] = error_report('email'); else $payload[$key] = $value; } // This processes the rest else { $value = sanitize_vals($value); // Checks for empty if(empty($value)) $errors[$key] = error_report($key); else $payload[$key] = $value; } } // If all is good and no errors set, send the email if(!isset($errors)) { // SEND MAIL HERE. $page = (EmailEngine::Send($payload))? "Result" : "Error"; header("Location: url/contact{$page}.html"); exit; } } ?> <form class="ui form" method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> <div class="field"> <label>First Name</label> <input name="first-name" id="first-name" placeholder="First Name" type="text" value="<?php if(!empty($_POST['first-name'])) echo htmlspecialchars($_POST['first-name'],ENT_QUOTES);?>" /> <span class="error">* <?php if(!empty($errors['first-name'])) echo $errors['first-name'];?></span> </div> <div class="field"> <label>Last Name</label> <input name="last-name" id="last-name" placeholder="Last Name" type="text" value="<?php if(!empty($_POST['last-name'])) echo htmlspecialchars($_POST['last-name'],ENT_QUOTES);?>" /> <span class="error">* <?php if(!empty($errors['last-name'])) echo $errors['last-name'];?></span> </div> <div class="field"> <label>Email</label> <input name="email" id="email" placeholder="Email" type="email" value="<?php if(!empty($_POST['email'])) echo preg_replace('/[^0-9a-zA-Z\@\.\_\-]/',"",$_POST['email']);?>" /> <span class="error">* <?php if(!empty($errors['email'])) echo $errors['email'];?></span> </div> <div class="field"> <label>Message</label> <textarea rows="2" placeholder="Please type in your message" name="message" id="message"><?php if(!empty($_POST['message'])) echo htmlspecialchars($_POST['message'],ENT_QUOTES);?></textarea> <span class="error">* <?php if(!empty($errors['message'])) echo $errors['message'];?></span> </div> <button class="ui button" type="submit">Submit</button> </form>