2015-07-07 2 views
0

Это мой первый вопрос, так вот вот:Почему моя форма отправляется в мою базу данных, когда значения не удовлетворяют требованиям?

Всякий раз, когда я отправляю свою регистрационную форму, я отправляю данные через 3 чека (только 3 на данный момент). Однако, даже если представленные данные не соответствуют требованиям проверок, они все еще сохраняют значение в моей базе данных.

Еще один пример: если бы я отправил имя пользователя с числом символов менее 8 символов, отобразилась ошибка, однако значения все равно сохраняются. Пожалуйста, помогите.

<?php 
//VARIABLES FOR POST DATA    //OTHER VARIABLES 
$username = $_POST['register_username'];  $userlen = strlen($username); 
$password = $_POST['register_password'];   
$submit = $_POST['register_submit']; 

if(isset($submit)){ 
if($password == $username){$errors[] = 'Same Username and Pass';} 
if($userlen < 8){$errors[] = 'Username must be atleast 8 characters.';} 
if($userlen > 32){$errors[] = 'Username must only contain 32 characters';} 


else{ 
require 'db/connect.php'; 
$insertUser = "INSERT INTO users (username, password) VALUES ('$username','$password')"; 
mysql_query($insertUser); 
} 

} 
?> 
+0

Я просто понял, что это может быть из-за того, что я использовал, если вместо elseif ... –

+0

исправить структуру if-операторов (-ов) является ошибкой – Spade

+0

Mysql устарел [использовать PDO или Mysqli] (http : //stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php) – jmattheis

ответ

1

Существует более подходящий код:

<?php 
//VARIABLES FOR POST DATA    //OTHER VARIABLES 
$username = $_POST['register_username'];  $userlen = strlen($username); 
$password = $_POST['register_password'];   
$submit = $_POST['register_submit']; 

if(isset($submit)) 
{ 
    $errors = array(); 

    if($password == $username) 
    { 
     $errors[] = 'Same Username and Pass'; 
    } 
    if($userlen < 8) 
    { 
     $errors[] = 'Username must be atleast 8 characters.'; 
    } 
    if($userlen > 32) 
    { 
     $errors[] = 'Username must only contain 32 characters'; 
    } 

    if (count($errors) == 0) 
    { 
     require 'db/connect.php'; 
     $insertUser = "INSERT INTO users (username, password) VALUES ('$username','$password')"; 
     mysql_query($insertUser); 
    } 
} 
?> 

ВАЖНО

безопасности предупреждение

Но этот код в не для производственного назначения. Вы не должны обходить все данные, поступающие от пользователя в вашу базу данных. Вам нужно обработать $username и $password значениями, иначе вы будете SQL Injection.

лучше использовать PDO и подготовленные заявления ($db->prepare() и $statement->bindParam()):

$statement = $db->prepare("INSERT INTO users (username, password) VALUES (:username', :password)"); 
$statement->bindParam(':username', $username); 
$statement->bindParam(':password', $password); 
$statement->execute(); 
+1

Я очень ценю помощь брата, очень быстрый ответ. –

2

Изменить ваш, если еще модель, как,

<?php 
//VARIABLES FOR POST DATA    //OTHER VARIABLES 
$username = $_POST['register_username'];  $userlen = strlen($username); 
$password = $_POST['register_password'];   
$submit = $_POST['register_submit']; 

if(isset($submit)){ 
if($password == $username){$errors[] = 'Same Username and Pass';} 
if($userlen < 8){$errors[] = 'Username must be atleast 8 characters.';} 
if($userlen > 32){$errors[] = 'Username must only contain 32 characters';} 

if(empty($errors)){ 
    require 'db/connect.php'; 
    $insertUser = "INSERT INTO users (username, password) VALUES ('$username','$password')"; 
    mysql_query($insertUser); 
    } 
} 
    ?> 

Это возможно работать. Просто попробуйте это

Смежные вопросы