Очистка и проверка формы php

Полностью брошенный в глубокий конец – новый для PHP и простой отправки формы (создание страницы учетной записи) для отправки в базу данных mySQL, так что извиняйтесь за необъяснимость вопроса.

Я не уверен, как правильно проверять и деактивировать данные перед отправкой. Но я использую PDO и заполнители при вставке в базу данных, поэтому я думаю, что у меня есть эта сторона.

<form action="createaccount.php" name="form" method="post"> <input type="text" name="createUserName" id="createUserName" placeholder="User Name"><br> <input type="password" name="passWord" id="passWord" placeholder="Password (Min 6 Characters)"><br> <input type="password" name="confirmPW" id="confirmPW" placeholder="Confirm Password"><br> <input type="text" name="fName" id="fName" placeholder="First Name"><br> <input type="text" name="sName" id="sName" placeholder="Surname"><br><br> <input type="email" name="userEmail" id="userEmail" placeholder="Email Address"><br> <input type="submit" value="Create Account"> </form> 

Это отправляется в отдельный php-файл с именем createaccount.php, который запускает проверку имени пользователя, и если успех выполняет функцию, которая отправляет поля в функцию insert в моем классе dbHandler.

 <?php session_start(); include('connect.php'); $username = $_POST['createUserName']; $password = $_POST['passWord']; $password_confirm = $_POST['confirmPW']; $firstname = $_POST['fName']; $surname = $_POST['sName']; $email = $_POST['userEmail']; if ($dbh->checkUserName($username)) { $_SESSION['message'] = "Username is taken, please try again"; header('Location: createAccount.php'); exit(); } else { $dbh->createAccount($username, $password, $password_confirm, $firstname, $surname, $email); header('Location: login.php'); exit(); }; ?> в <?php session_start(); include('connect.php'); $username = $_POST['createUserName']; $password = $_POST['passWord']; $password_confirm = $_POST['confirmPW']; $firstname = $_POST['fName']; $surname = $_POST['sName']; $email = $_POST['userEmail']; if ($dbh->checkUserName($username)) { $_SESSION['message'] = "Username is taken, please try again"; header('Location: createAccount.php'); exit(); } else { $dbh->createAccount($username, $password, $password_confirm, $firstname, $surname, $email); header('Location: login.php'); exit(); }; ?> 

Так что мои вопросы. Должен ли я использовать

 <?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?> 

В моей форме действие? Если так. Мне нужно запустить функцию createaccount.php здесь, потому что я не могу отправить ее в другой php-файл?

Должен ли я использовать filter_var? И / Или Должен ли я использовать обрезку, stripslashes или что-нибудь в моих переменных im, отправляющих в форму? Как мне это сделать? Мое понимание

 $name = test_input($_POST['createUserName']); $password = test_input($_POST['passWord']); .. etc function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } 

Кроме того, вот моя функция вставки. Это безопасно / написано правильно?

 <?php function createAccount($userName, $pw, $confirmPW, $fName, $sName, $email) { $sql = "INSERT INTO `room_project`.`user` (`userName`, `pass`, `confirmPW`, `fName`, `sName`, `email`) VALUES (?, ?, ?, ?, ?, ?);"; $query = $this->connection->prepare($sql); $query->execute(Array($userName, $pw, $confirmPW, $fName, $sName, $email)); } ?> 

Я очень ценю любые советы! Опять же, пожалуйста, извините начальный характер этого 🙂

Вы должны использовать регулярное выражение PHP для строгой проверки ваших входных данных.

Предположим, вы хотите проверить следующие поля ввода,

  • имя пользователя
  • пароль
  • Имя
  • Фамилия
  • Эл. адрес

то вы бы сделали что-то подобное,

 if(isset($_POST['submit']) && !empty($_POST['submit'])){ // use a boolean variable to keep track of errors $error = false; // Username validation $username = trim($_POST['username']); $username_pattern = "/^[a-zA-Z0-9]{3,15}$/"; // username should contain only letters and numbers, and length should be between 3 and 15 characters if(preg_match($username_pattern, $username)){ // success }else{ // error $error = true; } // Password validation $password = $_POST['password']; $confirm_password = $_POST['confirm_password']; if(strlen($password) >= 6 && $password===$confirm_password){ // length of the password should be greater than or equal to 6 // success }else{ // error $error = true; } // First name validation $first_name = trim($_POST['first_name']); $first_name_pattern = "/^[a-zA-Z]{2,15}$/"; if(preg_match($first_name_pattern, $first_name)){ // first name should contain only letters and length should be between 2 and 15 characters // success }else{ // error $error = true; } // Last name validation $last_name = trim($_POST['last_name']); $last_name_pattern = "/^[a-zA-Z]{2,15}$/"; if(preg_match($last_name_pattern, $last_name)){ // last name should contain only letters and length should be between 2 and 15 characters // success }else{ // error $error = true; } // Email validation $email = trim() $email_pattern = "/^([a-z0-9\._\+\-]{3,30})@([a-z0-9\-]{2,30})((\.([az]{2,20})){1,3})$/"; if(preg_match($email_pattern, $email)){ // validate email addresses // success }else{ // error $error = true; } if(!$error){ // all fields are validated. Now do your database operations. }else{ // display error message } } 

И используйте PDO, чтобы предотвратить вашу базу данных от любого типа SQL Injection.

От PDO :: подготовить

Вызов PDO :: prepare () и PDOStatement :: execute () для операторов, которые будут выдаваться несколько раз с разными значениями параметров, оптимизирует производительность вашего приложения, позволяя водителю согласовывать кеширование клиентов и / или серверов в плане запроса и метаинформации и помогает предотвратить атаки SQL-инъекций, устраняя необходимость вручную указывать параметры.

Я сделал пример для вас, чтобы проверить и оценить поля перед отправкой на сервер. посмотрите пожалуйста.

 <script> function checknull(){ if(document.getElementById("createUserName").value == ""){ alert("enter user name"); return false; } return true } </script> <form action="createaccount.php" name="form" method="post" onsubmit="return checknull()"> 

Это не полный пример. просто получите представление о том, как выполнить проверку нулевого значения с помощью javascript.