HTML-форма PHP post для самостоятельной проверки или отправки на новую страницу

Первоначальное извинение. Сегодня мой первый рабочий день работает с php, и я, наконец, понял, как вернуть мою страницу назад (я имел страницу как .html, а не .php), но теперь мне трудно понять, как для переноса данных на новую страницу после проверки формы. Я работаю над этим довольно долго, и я жареная. Вот простой пример:

<!DOCTYPE HTML> <html> <head> <style> .error {color: #FF0000;} </style> </head> <body> <?php // Initialize variables and set to empty strings $firstName=$lastName=""; $firstNameErr=$lastNameErr=""; // Validate input and sanitize if ($_SERVER['REQUEST_METHOD']== "POST") { if (empty($_POST["firstName"])) { $firstNameErr = "First name is required"; } else { $firstName = test_input($_POST["firstName"]); } if (empty($_POST["lastName"])) { $lastNameErr = "Last name is required"; } else { $lastName = test_input($_POST["lastName"]); } } // Sanitize data function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } ?> <h2>Find Customer</h2> <p><span class="error">* required</span></p> <form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>" method="post"> First Name: <input type="text" name="firstName" value="<?php echo $firstName; ?>"><span class="error">* <?php echo $firstNameErr; ?></span><br><br> Last Name: <input type="text" name="lastName" value="<?php echo $lastName; ?>"><span class="error">* <?php echo $lastNameErr; ?><br><br> <input type="submit"> </form> </body> </html> 

ОК. Таким образом, вы увидите, что форма отправляется обратно в себя, чтобы ее можно было проверить. Хорошо. Теперь, учитывая, что все действительно, как я могу отправить в другой скрипт (action = «otherAction.php», может быть?), Чтобы данные могли быть обработаны?

Также приветствуются любые предложения по безопасности. Я сделал все возможное, чтобы обеспечить безопасность. Благодарю.

Когда все ваши условия выполнены, вы можете использовать header('Location: http:mywebsite.com/otherAction.php')

 // Validate input and sanitize if ($_SERVER['REQUEST_METHOD']== "POST") { $valid = true; //Your indicator for your condition, actually it depends on what you need. I am just used to this method. if (empty($_POST["firstName"])) { $firstNameErr = "First name is required"; $valid = false; //false } else { $firstName = test_input($_POST["firstName"]); } if (empty($_POST["lastName"])) { $lastNameErr = "Last name is required"; $valid = false; } else { $lastName = test_input($_POST["lastName"]); } //if valid then redirect if($valid){ header('Location: http://mywebsite.com/otherAction.php'); exit(); } } 

В некоторых моих работах моя настройка такая, но я узнал что-то нехорошее здесь. Это когда вы обновляете страницу после отправки формы, значения POST все еще остаются и возможны для дублирования записей. Что плохого ИМО.

Используйте javascript для проверки, затем отправьте форму сообщения себе или на другую страницу, где он может делать данные с данными.

 <!DOCTYPE html> <html> <head> <script> function validateForm() { var x=document.forms["myForm"]["fname"].value; if (x==null || x=="") { alert("First name must be filled out"); return false; } } </script> </head> <body> <form name="myForm" action="demo_form.php" onsubmit="return validateForm()" method="post"> First name: <input type="text" name="fname"> <input type="submit" value="Submit"> </form> </body> </html> 

источник: http://www.w3schools.com/js/js_form_validation.asp

 <!DOCTYPE HTML> <html> <head> <style> .error {color: #FF0000;} </style> </head> <body> <?php // Initialize variables and set to empty strings $firstName=$lastName=""; $firstNameErr=$lastNameErr=""; // Control variables $app_state = "empty"; //empty, processed, logged in $valid = 0; // Validate input and sanitize if ($_SERVER['REQUEST_METHOD']== "POST") { if (empty($_POST["firstName"])) { $firstNameErr = "First name is required"; } else { $firstName = test_input($_POST["firstName"]); $valid++; } if (empty($_POST["lastName"])) { $lastNameErr = "Last name is required"; } else { $lastName = test_input($_POST["lastName"]); $valid++; } if ($valid >= 2) { $app_state = "processed"; } } // Sanitize data function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } if ($app_state == "empty") { ?> <h2>Find Customer</h2> <p><span class="error">* required</span></p> <form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>" method="post"> First Name: <input type="text" name="firstName" value="<?php echo $firstName; ?>"><span class="error">* <?php echo $firstNameErr; ?></span><br><br> Last Name: <input type="text" name="lastName" value="<?php echo $lastName; ?>"><span class="error">* <?php echo $lastNameErr; ?><br><br> <input type="submit"> </form> </body> </html> <?php } elseif ($app_state == "processed") { if ($firstName == "Vincent") { $app_state = "Logged in"; } } if ($app_state == "Logged in") { echo("Logged in<br> Hello Vincent</body></html>"); } ?> 

Вы можете проверить, имеются ли какие-либо недопустимые данные, если нет недопустимых данных, процесс, а затем перенаправить. Например

  if (empty($firstNameErr) && empty($lastNameErr)) { // process the data // redirect to other page. header('LOCATION: index.php'); exit(); } 

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

 <?php // validate the data // no error, proccess, then, redirect ?> html code here. 

Опираясь на перенаправление, это плохо для SEO, если вы об этом. Лучше бы SEO для вашей формы публиковать на другой странице, естественно.