Форма регистрации пользователя

Я изучаю PHP, PDO и MySQL самостоятельно и застрял здесь, пытаясь создать продвинутую систему входа в систему. Эта часть ниже «register.php«:

Все, видимо, идет хорошо, пока мы не достигнем ВСТАВИТЬ часть, потому что ничего не происходит.

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

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

<?php

require('include/core.php');
require('include/func.php');

if(isset($_POST['submit'])) {

//Information
$user = htmlentities($_POST['user']);
$pass1 = $_POST['pass1'];
$pass2 = $_POST['pass2'];
$email = $_POST['email'];
$register_date = date('Y-m-d H:i:s');
$email_token = md5(uniqid(rand(),1));
$user_level = "normal";
$ip = get_ip();

//Validation
if(!isset($user)) {
echo "Você não digitou um nome de usuário";
} else if(strlen($user) < 4) {
echo "Digite um nome de usuário com pelo menos 3 Caractéres";
} else if(empty($pass1)) {
echo "Você precisa digitar uma senha.";
} else if(empty($pass2)) {
echo "Você precisa digitar a senha novamente, para confirmação.";
} else if(empty($email)) {
echo "Você precisa digitar um email.";
} else if($pass1 != $pass2) {
echo "As senhas não conferem.";
} else if(filter_var($email, FILTER_VALIDATE_EMAIL) == false) {
echo "Digite o email corretamente.";
} else {

//Checking for Existing User
$query = $database->prepare('SELECT user, email, ip
FROM sk_user WHERE user = ? OR email = ? OR ip = ?');

$query->bindParam(1, $user);
$query->bindParam(2, $email);
$query->bindParam(3, $ip);

$query->execute();

$row = $query->fetch(PDO::FETCH_NUM);

if($row > 0) {
echo "Já existe um usuário com esses dados!";
} else {

$query2 = $database->prepare("INSERT INTO sk_user(user, pass, email, register_date, email_token, user_level, ip) VALUES (:user, :pass, :email, :register_date, :email_token, :user_level, :ip");

$query2->bindParam(':user', $user);
$query2->bindParam(':pass', $pass2);
$query2->bindParam(':email', $email);
$query2->bindParam(':register_date', $register_date);
$query2->bindParam(':email_token', $email_token);
$query2->bindParam(':user_level', $user_level);
$query2->bindParam(':ip', $ip);

$query2->execute();

}

}

?>

0

Решение

В запросе INSERT есть небольшая ошибка:

    $query2 = $database->prepare("INSERT INTO sk_user(user, pass, email, register_date, email_token, user_level, ip) VALUES (:user, :pass, :email, :register_date, :email_token, :user_level, :ip");

Должен быть заменен на:

    $query2 = $database->prepare("INSERT INTO sk_user(user, pass, email, register_date, email_token, user_level, ip) VALUES (:user, :pass, :email, :register_date, :email_token, :user_level, :ip)");

Последняя скобка запроса отсутствует;)

Кроме того, почему вы не используете одну и ту же структуру для двух подготовительных операторов?

2

Другие решения

В следующей строке отсутствует закрывающая скобка )
закрыть открывающую скобку ( в $query2 = $database->prepare(...

где это заканчивается :user_level, :ip");

$query2 = $database->prepare("INSERT INTO sk_user(user, pass, email, register_date, email_token, user_level, ip) VALUES (:user, :pass, :email, :register_date, :email_token, :user_level, :ip");

Измените его на: (конец следующей строки читается как :user_level, :ip)");

$query2 = $database->prepare("INSERT INTO sk_user(user, pass, email, register_date, email_token, user_level, ip) VALUES (:user, :pass, :email, :register_date, :email_token, :user_level, :ip)");

добавлять $database->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); сразу после открытия соединения, включая сообщения об ошибках, размещенные в верхней части ваших файлов сразу после открытия <?php тег
error_reporting(E_ALL); ini_set('display_errors', 1); который помогает отлаживать код.

Это сигнализировало бы о синтаксической ошибке.


Важное замечание относительно хранения пароля:

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

использование CRYPT_BLOWFISH или PHP 5.5 password_hash() функция.
Для PHP < 5.5 использовать password_hash() compatibility pack.

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

Я видел слишком много дел здесь в Stack по этому вопросу, потому что люди так и делали.

1

По вопросам рекламы [email protected]