Я застрял на этом некоторое время. У меня есть форма, которая находится в index.php
. Данные отправляются в файл php, называемый processuserform.php
. Я извлекаю все входы и присваиваю их каждой своей переменной. Кажется ли, что это правильный способ проверки и дезинфекции формы на стороне сервера?Проверка/программирование на стороне сервера
Сначала является самой формой, тогда файл PHP будет использоваться для обработки данных, отправленных на него.
<form method="POST" name="signup" action="php/processuserform.php">
<input id="firstname" onkeyup="validateFirstName()" placeholder="First Name" type="text" /><label id="firstnameprompt"></label>
<br><br>
<input id="lastname" onkeyup="validateLastName()" placeholder="Last Name" type="text"/>
<label id="lastnameprompt"></label>
<br><br>
<input id="Email" onkeyup="validateEmail()" placeholder="Email" type="text" />
<label id="Emailprompt"></label>
<br /><br />
<input id="Password" onkeyup="validatePassword()" placeholder="Create Password" type="password" /><label id="Passwordprompt"></label>
<br /><br />
<strong>Male</strong><input id="Gender" type="radio" name="sex" value="male">
<strong>Female</strong><input id="Gender" type="radio" name="sex" value="female">
<br /><br />
Click "Submit" if you agree to <a href="#">"Terms And Conditions"</a>
<br>
<input id="submit" onclick="return validateUserRegistration()" value="Submit" type="submit" name="submit"/>
<label id="submitprompt"></label>
<br><br>
processuserform.php
<?php
$first_name = ($_POST['firstname']);
$last_name = ($_POST['lastname']);
$email = ($_POST['Email']);
$pw = ($_POST['Password']);
$gender = ($_POST['Gender']);
// define variables and set to empty values
$first_nameErr = $last_nameErr = $emailErr = $pwErr = $genderErr = "";
$first_name = $last_name = $email = $pw = $gender = "";
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
if (empty($_POST["firstname"]))
{
$first_nameErr = "Name is required";
}
else
{
$first_name = test_input($_POST["firstname"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$first_name))
{
$first_nameErr = "Only letters and white space allowed";
}
}
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
if (empty($_POST["lastname"]))
{
$last_nameErr = "Name is required";
}
else
{
$last_name = test_input($_POST["lastname"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$last_name))
{
$last_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 syntax is valid
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email))
{
$emailErr = "Invalid email format";
}
}
if (empty($_POST["Password"]))
{
$pwErr = "Password is required";
}
else
{
$pw = test_input($_POST["Password"]);
}
}
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;
}
$hostname="this is correct";
$username="this is correct";
$password="this is correct";
$dbname="this is correct";
$db_conx = mysqli_connect($hostname, $username, $password) OR DIE ("Unable to connect to database! Please try again later.");
if(mysqli_connect_errno())
{
echo mysqli_connect_error();
exit();
}
$select = mysqli_select_db($db_conx,$dbname);
mysqli_query($db_conx,"INSERT INTO users (firstname, lastname, email, password, gender)
VALUES ('$first_name', '$last_name', '$email', '$pw', '$gender')");
mysqli_close($db_conx);
header("Location: not/important.php")
?>
Спасибо всем за вашу помощь. Если я буду дезинфицировать его и проверить его неправильно, кто-то не даст мне пример того, как он должен выглядеть, используя один из моих входов в качестве примера? Я мог бы использовать помощь, так как это немного запутывает. Еще раз спасибо!
Возможный дубликат [Обработка, проверка и дезинфекция данных] (http://stackoverflow.com/questions/21564265/processing-validating-and-sanitizing-data) – qwertynl