• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Erstellung Registrierung

sebjel

Neues Mitglied
Hallo,

hatte ja schonmal eine Diskussion, wie ich ein Registrierungsform aufbaue (https://www.html.de/threads/einschraenkungen-registrierungs-seite.56851/). Habe mich nun dazu entschlossen, beim Namen einfach alle Freiheiten zu gewähren, da man ansonsten immer Leute ausschließen würde, die Eingaben werden aber durch htmlspecialchars, trim und stripslashes geschickt, um XSS zu vermeiden.

Habe mich nun also an den Testaufbau von w3schools gehalten, der wie folgt aufgebaut ist:

Code:
<!DOCTYPE HTML>  
<html>
<head>
<style>
.error {color: #FF0000;}
</style>
</head>
<body>  

<?php
// define variables and set to empty values
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  if (empty($_POST["name"])) {
   $nameErr = "Name is required";
  } else {
   $name = test_input($_POST["name"]);
   // check if name only contains letters and whitespace
   if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
     $nameErr = "Only letters and white space allowed"; 
   }
  }
  
  if (empty($_POST["email"])) {
   $emailErr = "Email is required";
  } else {
   $email = test_input($_POST["email"]);
   // check if e-mail address is well-formed
   if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
     $emailErr = "Invalid email format"; 
   }
  }
   
  if (empty($_POST["website"])) {
   $website = "";
  } else {
   $website = test_input($_POST["website"]);
   // check if URL address syntax is valid (this regular expression also allows dashes in the URL)
   if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) {
     $websiteErr = "Invalid URL"; 
   }
  }

  if (empty($_POST["comment"])) {
   $comment = "";
  } else {
   $comment = test_input($_POST["comment"]);
  }

  if (empty($_POST["gender"])) {
   $genderErr = "Gender is required";
  } else {
   $gender = test_input($_POST["gender"]);
  }
}

function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}
?>

<h2>PHP Form Validation Example</h2>
<p><span class="error">* required field.</span></p>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">  
  Name: <input type="text" name="name" value="<?php echo $name;?>">
  <span class="error">* <?php echo $nameErr;?></span>
  <br><br>
  E-mail: <input type="text" name="email" value="<?php echo $email;?>">
  <span class="error">* <?php echo $emailErr;?></span>
  <br><br>
  Website: <input type="text" name="website" value="<?php echo $website;?>">
  <span class="error"><?php echo $websiteErr;?></span>
  <br><br>
  Comment: <textarea name="comment" rows="5" cols="40"><?php echo $comment;?></textarea>
  <br><br>
  Gender:
  <input type="radio" name="gender" <?php if (isset($gender) && $gender=="female") echo "checked";?> value="female">Female
  <input type="radio" name="gender" <?php if (isset($gender) && $gender=="male") echo "checked";?> value="male">Male
  <span class="error">* <?php echo $genderErr;?></span>
  <br><br>
  <input type="submit" name="submit" value="Submit">  
</form>

<?php
echo "<h2>Your Input:</h2>";
echo $name;
echo "<br>";
echo $email;
echo "<br>";
echo $website;
echo "<br>";
echo $comment;
echo "<br>";
echo $gender;
?>

</body>
</html>

Das klappt soweit auch gut, allerdings möchte ich den Bereich "Your Input" anders haben. Wenn bei allen Werten valide Werte eingegeben wurden, möchte ich zu einer anderen Seite verlinken, auf der steht, dass der Nutzer nun registriert ist und eine Bestätigungsmail erhält, um sich einzuloggen. Außerdem sollen die Kundendaten auch in einer Datenbank aufgenommen werden.

Den Teil mit der Datenbank bekomme ich hin, wie kann ich nur unterscheiden, wann auf der Registrierungsseite noch Fehlermeldungen angegeben werden und wann zur Bestätigungsseite weitergeleitet wird?

Danke vorab!
 
Werbung:
Ok, anders formuliert.. wo baue ich die if-Bedingung ein, dass entweder zurück zur Registrierungsseite geleitet wird oder, wenn es keine Fehlermeldungen gab, der User auf eine Bestätigungsseite geleitet wird, wobei seine Daten in die Datenbank eingetragen werden?

Ich habe schon probiert, es bei echo htmlspecialchars($_SERVER["PHP_SELF"]); einzubauen, das hat aber nicht so recht funktioniert. Oder sollte ich es lieber direkt oben in der PHP einbauen statt im HTML-Teil?

ich freue mich sehr, wenn mir jemand helfen kann!
 
Werbung:
PHP:
<?php
// define variables and set to empty values
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";
 
if ($_SERVER["REQUEST_METHOD"] == "POST") {
  if (empty($_POST["name"])) {
   $nameErr = "Name is required";
  } else {
   $name = test_input($_POST["name"]);
   // check if name only contains letters and whitespace
   if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
     $nameErr = "Only letters and white space allowed";
   }
  }
 
  if (empty($_POST["email"])) {
   $emailErr = "Email is required";
  } else {
   $email = test_input($_POST["email"]);
   // check if e-mail address is well-formed
   if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
     $emailErr = "Invalid email format";
   }
  }
 
  if (empty($_POST["website"])) {
   $website = "";
  } else {
   $website = test_input($_POST["website"]);
   // check if URL address syntax is valid (this regular expression also allows dashes in the URL)
   if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) {
     $websiteErr = "Invalid URL";
   }
  }
 
  if (empty($_POST["comment"])) {
   $comment = "";
  } else {
   $comment = test_input($_POST["comment"]);
  }
 
  if (empty($_POST["gender"])) {
   $genderErr = "Gender is required";
  } else {
   $gender = test_input($_POST["gender"]);
  }
}
 
function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}

if (empty($nameErr) && empty($emailErr) && empty($websiteErr))
{
    header("Location: http://www.wohin-auch-immer.de/script.php");
    exit;
}
?>
<!DOCTYPE HTML>
<html>
<head>
<style>
.error {color: #FF0000;}
</style>
</head>
<body>
<h2>PHP Form Validation Example</h2>
<p><span class="error">* required field.</span></p>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
  Name: <input type="text" name="name" value="<?php echo $name;?>">
  <span class="error">* <?php echo $nameErr;?></span>
  <br><br>
  E-mail: <input type="text" name="email" value="<?php echo $email;?>">
  <span class="error">* <?php echo $emailErr;?></span>
  <br><br>
  Website: <input type="text" name="website" value="<?php echo $website;?>">
  <span class="error"><?php echo $websiteErr;?></span>
  <br><br>
  Comment: <textarea name="comment" rows="5" cols="40"><?php echo $comment;?></textarea>
  <br><br>
  Gender:
  <input type="radio" name="gender" <?php if (isset($gender) && $gender=="female") echo "checked";?> value="female">Female
  <input type="radio" name="gender" <?php if (isset($gender) && $gender=="male") echo "checked";?> value="male">Male
  <span class="error">* <?php echo $genderErr;?></span>
  <br><br>
  <input type="submit" name="submit" value="Submit">
</form>
 </body>
</html>
 
Danke schonmal! Allerdings funktioniert das noch nicht, wenn ich die PHP-Datei jetzt aufrufe und als Location "http://www.google.de" eingebe, lande ich sofort bei Google und gar nicht erst auf dem Registrierungsformular.
 
Danke schonmal! Allerdings funktioniert das noch nicht, wenn ich die PHP-Datei jetzt aufrufe und als Location "http://www.google.de" eingebe, lande ich sofort bei Google und gar nicht erst auf dem Registrierungsformular.
[offtopic]
Warum überhaupt auf Google weitergeleitet werden soll, bleibt Dein Geheimnis.
[/offtopic]


Sowas Dummes aber auch. Woran das jetzt wohl liegen mag?

Vielleicht will @bdt600 mal spaßeshalber Deine (Grund)Kenntnisse auf die Probe stellen, ob Du das "forcierte" Fehlverhalten zu handeln weißt, und/oder weil er Dir den Code nicht auf dem Silbertablett servieren will, damit Du im Anschluss von Copy&Paste noch etwas mitdenken darfst/musst.

Dabei ist in seinem Code die Zeile 57 absolut eindeutig und aussagekräftig: Wenn sowohl "X", als auch "Y" und "Z" leer sind, ...

Und diese Bedingung wird selbstverständlich erfüllt, wenn die Seite aufgerufen wird, denn zu diesem Zeitpunkt existieren noch keine Fehlermeldungen - alle sind leer (empty).

Eine der denkbaren Korrekturmöglichkeiten: diese Bedingung negieren; aus empty(...) wird !empty(...). Auf diese Weise wird dann auf die Fehlerseite weitergeleitet.
PHP:
if (!empty($nameErr) && !empty($emailErr) && !empty($genderErr))
{
    header("Location: http://domain.de/no-validation.php");
    exit;
}
Ansonsten die if-Bedingung entsprechend (um)definieren bzw. mit else erweitern, damit der Nutzer bei einem erfolgreichen/fehlerfreien Formularversand die Bestätigungsseite erreicht.

Vermutlich wollte @bdt600 auf Deine Frage in Post #3 hin, aber auch nur grundsätzlich zeigen, wo dies im Code zu erfolgen hat.

Die Feinabstimmung und mögliche Fehlerkorrekturen bleiben Dir überlassen.

Wie gesagt: Aktives mitdenken/-arbeiten des Fragenstellers ist nicht blos erwünscht, sondern wird von ihm gefordert.
 
Werbung:
Zurück
Oben