Я создал форму (форму запроса) в HTML, которая отправляет следующий код:
<?php
if(isset($_POST['submit']))
{
$name = mysql_real_escape_string((string)$_POST['name']);
$surname = mysql_real_escape_string((string)$_POST['surname']);
$email = mysql_real_escape_string((string)$_POST['email']);
$phone = mysql_real_escape_string((string)$_POST['phone']);
$country = mysql_real_escape_string((string)$_POST['country']);
$message = mysql_real_escape_string((string)$_POST['message']);
$sql = "INSERT INTO contact
(name, surname, email, phone, country, message)
VALUES('$name', '$surname', '$email', '$phone', '$country', '$message')";
mysql_select_db($db);
$retval = mysql_query( $sql, $conn )or die(mysql_error());
echo 'Thank you '.$name.' '.$surname.'. Your enquiry has been forwarded to our team. <br><br>Please check you email inbox for further information.<br><br>Return to homepage:<br><br><button class="search" onclick="/">Return to homepage</button>';
mysql_close($conn);
}
?>
Мне интересно, как я могу отображать ошибки и останавливать публикацию формы при вводе недействительных или нулевых данных?
Изучая, как создавать формы в Интернете, я также слышал о SQL-инъекциях. Я защищен?
Помогите много ценится.
2 ответа
Мне интересно, как я могу отображать ошибки и останавливать отправку формы при вводе недействительных или нулевых данных.
Вы должны выполнить проверку после if(isset($_POST['submit']))
. Например, вы можете проверить, не указано ли имя:
if (empty($_POST['name'])) {
$errors[] = 'name must not be empty';
}
Для более сложных проверок, таких как проверка того, что адрес электронной почты действителен, вам следует взглянуть на расширение фильтра :
$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
if (!$email) // invalid email
И после всех ваших проверок:
if (!count($errors)) {
// do the insert here
}
Вы можете использовать блок while для прерывания, как только обнаружите ошибку:
while (isset($_POST['submit'])) {
if (empty($_POST['name'])) {
$errors = 'name must not be empty';
break;
}
// do the insert here
break;
}
Изучая, как создавать формы в Интернете, я также слышал о SQL-инъекциях. Защищен ли я?
Да, до тех пор, пока вы избегаете всего, что вы встраиваете в SQL-запрос (точно так же, как вы это делаете), вы защищены.
Вам следует попробовать использовать подготовленные операторы , это безопаснее и проще в использовании.
<?php
if(isset($_POST['submit']))
{
$errors = array();
$name = !empty($_POST['name']) ? mysql_real_escape_string((string)$_POST['name']) : $errors[] = 'Name must not be empty';
$surname = !empty($_POST['name']) ? mysql_real_escape_string((string)$_POST['name']) : $errors[] = 'User Name must not be empty';
$email = !empty($_POST['email']) ? mysql_real_escape_string((string)$_POST['email']) : $errors[] = 'Email must not be empty';
$phone = !empty($_POST['phone']) ? mysql_real_escape_string((string)$_POST['phone']) : $errors[] = 'Phone must not be empty';
$country = !empty($_POST['country']) ? mysql_real_escape_string((string)$_POST['country']) : $errors[] = 'Country must not be empty';
$message = !empty($_POST['message']) ? mysql_real_escape_string((string)$_POST['message']) : $errors[] = 'Message must not be empty';
if (empty($errors))
{
if (preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email))
{
$sql = "INSERT INTO contact
(name, surname, email, phone, country, message)
VALUES('$name', '$surname', '$email', '$phone', '$country', '$message')";
mysql_select_db($db);
$retval = mysql_query( $sql, $conn )or die(mysql_error());
echo 'Thank you '.$name.' '.$surname.'. Your enquiry has been forwarded to our team. <br><br>Please check you email inbox for further information.<br><br>Return to homepage:<br><br><button class="search" onclick="/">Return to homepage</button>';
mysql_close($conn);
}
else {
echo 'Invalid Email';
}
}
else
{
foreach ($errors AS $error)
{
echo "$error<br />";
}
}
}
? >
Похожие вопросы
Новые вопросы
php
PHP - это широко используемый высокоуровневый, динамический, объектно-ориентированный и интерпретируемый язык сценариев, в первую очередь предназначенный для серверной веб-разработки. Используется для вопросов о языке PHP.