Проверка формы PHP / Избегание инъекций - PullRequest
0 голосов
/ 28 августа 2011

Я создал форму (форму запроса) в 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 ]

4 голосов
/ 28 августа 2011

Мне интересно, как я могу отображать ошибки и останавливать публикацию формы при вводе неверных или нулевых данных.

Вы должны сделать проверку после 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-запрос (так же, как вы делаете), вы защищены.

Вы должны попробовать использовать подготовленные заявления , это безопаснее и проще в использовании.

0 голосов
/ 28 августа 2011
<?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 />";    
}
}
}

?>

...