Полностью брошенный в глубокий конец – новый для 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.