Я надеюсь, что есть решение для этого, я нооб в php, я не мог понять это.
Я получил некоторую помощь отсюда, чтобы проверить форму html в php. Он работает нормально … но я обнаружил, что после того, как я нажму кнопку submit & php, вы увидите ошибки, есть поле ввода, попросив пользователя ответить на математические вопросы … когда я введу ответ, а затем снова нажмите кнопку отправки, он просто говорит, что почта успешно отправлена, но другие поля по-прежнему пусты. Любые идеи, как это исправить. Кроме того, значение php в тегах ввода для ответа на вопросник не сохраняет текст в поле, он исчезает.
Спасибо за ур!
<div id="contact"> <h1 class="heading1"> Contact:</h1> <form name="contact" action="formtest.php" method="post"> <label for="YourName">Your Name:</label> <input type="text" name="name" class="required" value="<?= isset($_POST['name']) ? $_POST['name'] : '' ?>" /> <label for="YourEmail">Your Email:</label> <input type="text" name="email" class="required" value="<?= isset($_POST['email']) ? $_POST['email'] : '' ?>"/> <label for="Subject">Subject:</label> <input type="text" name="subject" class="required" value="<?= isset($_POST['subject']) ? $_POST['subject'] : '' ?>" /> <label for="YourMessage">Your Message:</label> <textarea name="message" class="required"><?= isset($_POST['message']) ? $_POST['message'] : '' ?></textarea> <p class="c3">10 + 5 =<input type="text" name="answerbox" id="answerbox" "<?= isset($_POST['answerbox']) ? $_POST['answerbox'] : '' ?>"/></p> <fieldset> <input type="submit" name="submit" id="submit" value="Send" class="required"/> <input type="reset" id="reset" value="Reset"/> </fieldset> <?php if(isset($_POST['submit'])){ $name = trim($_POST["name"]); $email = trim($_POST["email"]); $subject = trim($_POST["subject"]); $message = trim($_POST["message"]); $answerbox = trim($_POST["answerbox"]); if(empty($_POST['name'])){ print "<div class='formerrors'><li>Please type your name.</li></div>"; } else { if (ctype_alpha($name) === false) { print "<div class='formerrors'><li>Your name only should be in letters!</li></div>"; } } if(empty($_POST['email'])){ print "<div class='formerrors'><li>You've forgot to type your email address.</li></div>"; } else{ if(filter_var($email, FILTER_VALIDATE_EMAIL) === false){ print "<div class='formerrors'><li>Your email is not valid, please check.</li></div>"; } } if(empty($_POST['subject'])){ print "<div class='formerrors'><li>Please type a subject.</li></div>"; } if(empty($_POST['message'])){ print "<div class='formerrors'><li>You've forgot to type your message.</li></div>"; } if(empty($_POST['answerbox'])){ print "<div class='formerrors'><li>Please answer the math question.</li></div>"; } else { if($answerbox != 15){ print"<div class='formerrors'><li>Answer is not correct.</li></div>"; } else{ $headers = 'From: '.$email. "\r\n" . 'Reply-To: '.$email . "\r\n" . 'X-Mailer: PHP/' . phpversion(); mail('me@mymail.me',$subject,$message,$headers); print "<div class='formerrors'><li>mail succesuffully sent</li></div>"; } } } ?> </form> </div><!--contact-->
Поскольку вы новичок в PHP, я бы дал вам несколько советов для новичка, как я могу.
Во-первых, вы выводите HTML-код и обрабатываете PHP впоследствии. Это не может быть хорошей практикой (и решение вашей проблемы вполне связано с этим). То, что вы делаете, постоянно показывает форму, без ограничений и проверки / проверки через PHP. Хорошая практика заключается в том, чтобы никогда не выводить HTML-код перед тем, как любой php идет (есть другие проблемы, например, функции header()
кроме вашего примера).
Что вы предпочли бы сделать:
<?php if (isset($_POST['submit'])) { // validations here // if (......) { echo 'problem 1...'; } // elseif (.....) { echo 'problem 2...'; } // else (.....} { // No problems so we can send it // mail(.....); // } } // done with PHP now show HTML ?> <form>....</form>
Еще одна вещь, которую я хотел бы дать вам в качестве подсказки, заключается в том, что при создании таких статических страниц (я имею в виду менее структурированный, менее объектно-ориентированный, вы знаете ..) хорошей практикой является сохранение того, что вы «эхо / печать» в переменных и выводах их там, где это применимо.
Поэтому вместо
<?php if (empty($user)) { echo 'Username is empty!'; } // Directly echoing (perhaps in not a right place, maybe even before <!DOCTYPE><html> declaration!! ?>
Вы бы пошли с
<?php $errors = ''; if (empty($user)) { $errors .= '<br/>Error1: Provide an username'; } elseif (empty($name)) { $errors .= '<br/>Error2: Provide a name'; } else { /*.....*/ } // Since we have our errors variable with errors (or empty one) we can check for it perhaps in HTML context ?> <form> <?php if (!empty($errors)) { ?> <div style='color:red;'>There are some errors! :(</div> <?php echo $errors; ?> </div> <?php } ?> </form>
Надеюсь, эти скромные мнения помогут вам, по крайней мере, решить вашу проблему. Удачи