Проверьте поля на html-странице с помощью php

Пожалуйста, найдите код index.html и файл submit.php. С помощью Loopo оба работают отлично. Я изо всех сил, где аккуратно поставить код проверки (в файле index.html или файл submit.php). Я использую html5-типы ввода в html-файле, и я не знаю, где именно должна происходить проверка в файле submit.php. У меня есть несколько форм, и я сделал validations.php, как предложено. Я также не понимаю, где будут отображаться сообщения об ошибках?

Можете ли вы предложить местоположение в файле submit.php, куда я должен добавить эти проверки, отредактировав мой файл submit.php?
Регулярное выражение для электронной почты ('/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/')
Регулярное выражение для телефона (^(?:(?:\+|0{0,2})91(\s*[\-]\s*)?|[0]?)?[789]\d{9}$)

файл index.html

<form method="post" action="submit.php">
    <div class="box">
        <div class="cl"><input type="text" name="name" placeholder="Name" /></div>
        <div class="cl"><input type="text" name="city" placeholder="City" /></div>
        <div class="cl"><input type="text" name="mobile" placeholder="Mobile" /></div>
        <div class="cl"><input type="email" name="email" placeholder="Email" /></div>
        <div class="cl"><input type="text" name="sub" placeholder="Want 3 m Free Subscription (Yes/No)?"></textarea></div>
        <div class="cl"><input type="text" name="slogan" placeholder="Suggest a slogan for 6 m subscription"></textarea></div>
    </div>
    <div class="srow">
        <div class="cl1">
            <ul class="action">
                <li><input type="submit" value="Submit" /></li>
            </ul>
        </div>
    </div>
</form>

файл submit.php

<?php
include 'config.php'; // store your configuration in a seperate file so 
                      // you only need to update it once when your environment changes

$errors = false;
$output = '';
$nl = '<br>'.PHP_EOL;
$redirect_url = 'index.html';

if (!$con = new mysqli(DBHOST,DBUSER,DBPASS,DBNAME)){
    $errors = true;
    $output .= "ERROR Can't connect to DB".$nl;
};   


if (!$errors){
   //should validate/clean $_POST before using in query
   $name = $con->escape_string($_POST['name']);
   $city = $con->escape_string($_POST['city']);
   $email = $con->escape_string($_POST['email']);
   $mobile = $con->escape_string($_POST['mobile']);
   $sub = $con->escape_string($_POST['sub']);
   $slogan = $con->escape_string($_POST['slogan']);

   $sql="INSERT INTO members 
            (sName, sCity, sMobile, sEmail, sSub, sSlogan)
         VALUES ('$name', '$city', '$mobile', '$email',
                '$sub','$slogan')";

   if (!$con->query($sql)){ //forgot a parenthesis here earlier
      $output .= 'ERROR: DB said: ('.$con->errno.') '.$con->error.$nl;
      $output .= 'Query was:'.$sql.$nl;
      $errors = true;
   }else{
     $output .= "1 record added".$nl;
   }
}

if (!$errors){
   //if there are no errors redirect to index.html;
   header('refresh: 2; URL='.$redirect_url);
   $output .= '...Redirecting...'.$nl;
}else{
   //show the errors and allow display a link to go back/try again
   $output .= '<a href="'.$redirect_url.'">Try again</a>'.$nl;
}
echo $output;
?>

Подтверждения, предложенные Loopo, но не знают точное место, чтобы положить его. Я создал файл validations.php и включил его в submit.php, но, возможно, мой синтаксис неправильный, из-за которого он не работает.

function validate_name($input){
    // fairly naive rule:
    // upper and lower case latin characters and space
    // at least three character long
    // you may want to look at allowing other characters such as é ö etc.
    $input = trim($input); //get rid of spaces at either end
    if (preg_match('/^[a-zA-Z ]{3,}$/',$input) == 1){
        return $input;
    }else{
        return false;
    }
}

  if (!empty($_POST['name']){
    if (!$name = $con->escape_string(validate_name($_POST['name'])){
        $error = true;
        $output .= 'ERROR: Invalid Name: '.$_POST['name'].$nl;
    }
  }else{
    $error = true;
    $output .= 'ERROR: No name specified'.$nl;
  }

1 ответ

Решение

Проверки html можно обойти, отправив запрос непосредственно в файл php, поэтому проверка информации на стороне сервера - хороший выбор, который вы сделали.

Я предлагаю вам лучше использовать встроенную функцию PHP filter_var, для чистого кода и точных / безопасных результатов, попробуйте это:

function validateEmail($email){
    if(filter_var($email,FILTER_VALIDATE_EMAIL)){
        return true;
    }
}

function validatePhonenb($nb){
    if(filter_var($nb,FILTER_VALIDATE_REGEXP,array("options"=>array("regexp"=>"/^(?:(?:\+|0{0,2})91(\s*[\-]\s*)?|[0]?)?[789]\d{9}$/"))){
        return true;
    }
}

и так как нет проверки номеров телефонов, я использовал ваше регулярное выражение, кстати, вы можете очистить номер телефона, используя var_filter, прежде чем продолжить вместо проверки его

У меня есть несколько форм, и я сделал validations.php, как предложено. Я также не понимаю, где будут отображаться сообщения об ошибках

Сообщения об ошибках будут отображаться в нижней части страницы, так как они отображаются в конце кода.

echo $output;
?>

если они не смещены, измените позицию вывода вывода, содержащего ошибки, и выполните die() после этого скрипт остановит выполнение после того, как обнаружит ошибки

Другие вопросы по тегам