Php form validate и post работают, но не вместе?

Чтобы правильно работать, моя форма должна быть настроена, чтобы сначала проверить проверку, а затем отправить данные, если проверка прошла. Это нормально, но я не уверен, как объединить код проверки с почтовым кодом в действии формы. Пример, если действие: action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> Форма проверяется правильно, но не отправляет нигде! Если я изменил действие формы на action="contact-engine.php"> тогда форма будет опубликована, но без проверки! Имея это в виду, мне нужно объединить в действие как проверку, так и затем (после прохождения проверки) проблему contact-engine.php, я просто не знаю, как это сделать? Я действительно участвую в php, и это сложно для меня! Любая помощь действительно оценена, я уже работаю над этим в течение нескольких дней! (NB обе страницы .php) Полный код выглядит следующим образом:

  <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Help!</title> <style type="text/css"> .error {color: #FF0000;} </style> </head> <body> <?php // define variables and set to empty values $nameErr = $emailErr = ""; $name = $email = ""; if ($_SERVER["REQUEST_METHOD"] == "POST") { //Name if (empty($_POST["name"])) {$nameErr = "Name is required";} else { $name = test_input($_POST["name"]); if (!preg_match("/^[a-zA-Z ]*$/",$name)) { $nameErr = "Only letters and white space allowed"; }} //Email if (empty($_POST["email"])) {$emailErr = "Email is required";} else { $email = test_input($_POST["email"]); if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)) { $emailErr = "Invalid email format"; }} } function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } ?> <form method="post" id="form" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> <p><span class="error">* required field.</span></p><br /> <div class="contact-font" style=" margin-top: 20px;"> <span class="asterix">* </span>Name:<br /> <input type="text" name="name" class="border" size="25" value="<?php if(isset($_POST['name'])) {echo $_POST['name']; } ?>"> <span class="error"><?php echo $nameErr;?></span> </div> <div class="contact-font" style=" margin-top: 20px;"> <span class="asterix">* </span>Email: (please double check enty)<br /> <input type="text" name="email" class="border" size="25" value="<?php if(isset($_POST['email'])) {echo $_POST['email']; } ?>"><span class="error"> <?php echo $emailErr;?></span> </div> <div> <input type="submit" value="Send" id="submit"> </div> </form> </body> </html> And below is the contact-engine code: <html> <head> <title>Contact Engine</title> </head> <body> <br />Name:<?php echo htmlspecialchars($_POST['name']); ?><br /> <br />Email:<?php echo htmlspecialchars($_POST['email']); ?><br /> </body> </html> 

Вы можете попробовать это. Ниже приведен простой код, благодаря которому вы можете достичь этого:

 //sample index.php file <?php include 'submitted.php'; ?> <!DOCTYPE html> <html> <head> </head> <body> <form action="<?php echo $_SERVER['PHP_SELF']?>" method="POST"> <input type="text" name="foo" /> <input type="submit" value="submit"> </form> </body> </html> 

Здесь я отправляю форму на ту же страницу, используя метод post. Но я включил еще один файл, который include 'submitted.php' .

Вот тестовый скрипт внутри submitted.php

 //sample submitted.php <?php if(isset($_POST['foo'])) { if(strlen($_POST['foo']) < 5){ echo "String length too small"; } else { echo $_POST['foo']; } } ?> 

Для теста он просто проверяет, превышает ли длина более пяти или нет. Если это не так, сообщение об ошибке отображается на той же странице, где присутствует ваша страница.

Испытай сам.