it-swarm.com.de

HTML-Formular PHP Post an sich selbst, um zu bestätigen oder an neue Seite zu senden

Upfront Entschuldigung. Heute ist mein erster Tag mit php zu arbeiten und ich habe endlich herausgefunden, wie ich meine Seite dazu bringen kann, sich selbst zu posten (ich hatte die Seite als .html anstelle von .php), aber jetzt habe ich Probleme, wie um die Daten auf eine neue Seite zu bringen, nachdem das Formular validiert wurde. Ich habe schon eine ganze Weile daran gearbeitet und bin gebraten. Hier ist ein einfaches Beispiel:

<!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>

OK. So sehen Sie oben, dass das Formular in sich selbst gepostet wird, damit es validiert werden kann. Gut. Nun, wenn alle Dinge gültig sind, wie kann ich ein anderes Skript posten (action = "otherAction.php", vielleicht?), Damit die Daten tatsächlich verarbeitet werden können?

Auch Sicherheitsvorschläge sind willkommen. Ich habe mein Bestes getan, um die Sicherheit zu berücksichtigen. Vielen Dank.

10
vincent

Wenn alle Ihre Bedingungen erfüllt sind, können Sie header('Location: http:mywebsite.com/otherAction.php') verwenden.

// 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();
  }
}

In einigen meiner Arbeiten ist mein Setup so, aber ich habe hier etwas nicht Gutes gelernt. Wenn Sie die Seite nach dem Senden des Formulars aktualisieren, bleiben die Werte für POST weiterhin erhalten und können zum Duplizieren von Einträgen verwendet werden. Welches ist nicht gut IMO.

7
Drixson Oseña

Verwenden Sie Javascript zur Bestätigung und senden Sie das Post-Formular an sich selbst oder an eine andere Seite, auf der es die Daten bearbeiten kann.

<!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>

source: 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>");
}
?>
4
Lazik

Sich auf eine solche Umleitung zu verlassen, ist schlecht für SEO, wenn Sie sich mit dem Zeug befassen ... Es wäre für SEO besser, wenn Ihr Formular natürlich auf einer anderen Seite veröffentlicht wird.

0

Sie können überprüfen, ob ungültige Daten vorhanden sind, wenn keine ungültigen Daten vorliegen, verarbeiten und anschließend umleiten. Zum Beispiel

 if (empty($firstNameErr) && empty($lastNameErr)) {
       // process the data

       // redirect to other page.
       header('LOCATION: index.php');
       exit();
 }

Beachten Sie, dass Sie diesen Code vor der Ausgabe von HTML-Code ausführen müssen. Andernfalls können Sie die Umleitung nicht durchführen. Zum Beispiel:

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