Я работаю над контактной формой в 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>