Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Работа с MySQL
tesla86  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 4
Пользователь №: 43122
На форуме: 5 месяцев, 16 дней
Карма:




Доброго времени суток!

Написал форму регистрации, сделал разные проверки, но с SQL взаимодействовать не получается, хотя ошибок не выдает.
Нужно создать пользователя, чтобы он появился в базе. Вот код, подскажите кто знает:


<?PHP
session_start ();
if (isset($_POST['send'])) {
$login = stripslashes($_POST['login']);
$login = htmlspecialchars($login);
$login = trim($login);
$password = stripslashes($_POST['password']);
$password = htmlspecialchars($password);
$password = trim($password);
$repassword = stripslashes($_POST['repassword']);
$repassword = htmlspecialchars($repassword);
$repassword = trim($repassword);
$email = stripslashes($_POST['email']);
$email = htmlspecialchars($email);
$email = trim($email);
$dob = $_POST['dob'];
$sex = $_POST['sex'];
$_SESSION['login'] = $login;
$_SESSION['password'] = $password;
$_SESSION['repassword'] = $repassword;
$_SESSION['email'] = $email;
$_SESSION['dob'] = $dob;
$_SESSION['sex'] = $sex;
$error = false;
If (strlen($login) < 5) {
$error_login = 'Введите логин';
$error = true;
}
if (!preg_match("/^[a-zA-Z0-9]+$/", $_POST['login'])) {
$error_login = 'Логин не может содержать спец. символы';
$error = true;
}
If (strlen($password) < 5) {
$error_password = 'Введите пароль';
$error = true;
}
If ($repassword == '' || $password != $repassword) {
$error_repassword = 'Пароли не совпадают!';
$error = true;
}
If ($email == '' || !preg_match ('/@/', $email)) {
$error_email = 'Введите корректный email';
$error = true;
}
If (strtotime($dob.' '.'00:00:00') > time () || $dob == false) {
$error_date = 'Введите корректную дату';
$error = true;
}
If ($sex != 1 && $sex != 2) {
$error_sex = 'Укажите пол';
$error = true;
}
if ($error == false) {
$mysqli = new mysqli('localhost', 'root', '', 'blog');
$mysqli->query("SET NAMES 'utf8'");
$query = mysqli_query($mysqli, "SELECT COUNT(id) FROM users WHERE login='".mysqli_real_escape_string($mysqli, $_POST['login'])."'");
if (mysqli_num_rows($query) > 0) {
$error_login = "Пользователь с таким логином уже существует";
$error = true;
}
$mysqli->query("INSERT INTO 'blog'.'users' ('reg_data', 'login', 'password', 'email', 'dob', 'sex') VALUE ('".time()."', '".$login."', '".MD5($password)."', '".$email."', '".$dob."', '".$sex."')");
$mysqli->close ();
header ('Location: index.php');
exit;
}
}

?>
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
arbuzmaster  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 723
Пользователь №: 37872
На форуме: 3 года, 4 месяца, 15 дней
Карма: 21




Попробуйте так
INSERT INTO `users` (`reg_data`, `login`, `password`, `email`, `dob`, `sex`) VALUES ('".time()."', '".$login."', '".MD5($password)."', '".$email."', '".$dob."', '".$sex."')

И условие поправьте

if (mysqli_num_rows($query) > 0) {
$error_login = "Пользователь с таким логином уже существует";

}
else
{
$mysqli->query("INSERT INTO `users` (`reg_data`, `login`, `password`, `email`, `dob`, `sex`) VALUES ('".time()."', '".$login."', '".MD5($password)."', '".$email."', '".$dob."', '".$sex."'");
}
$mysqli->close ();


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Лысый и злой
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 25994
Пользователь №: 21350
На форуме: 6 лет, 8 месяцев, 27 дней
Карма: 725

Не курю:
1 год, 2 месяца, 13 дней


Цитата
  $login = stripslashes($_POST['login']);
        $login = htmlspecialchars($login);
        $login = trim($login);


гореть тебе в аду.

mysql_real_escape_string() сделает все что бы ты вафлю не получил в бд

htmlspecialchars() - при выводе из бд - нахера тебе мнемоники в бд хранить ?

trim() - да я хочу 6 пробелов перед логином - ты кто такой?
Цитата

$_SESSION['password'] = $password;

до тла сгори. хеш пароля в бд и точка.


Цитата
If (strlen($password) < 5) {



utf-8 + кириллица... скрипт обгадился. mb_strlen(...) - загагли

Цитата
If ($email == '' || !preg_match ('/@/', $email)) {


бля... край. var_filter php - гугли

Цитата
$repassword == '' ||

регулярные выражения - задай паттерн
Цитата

if ($error == false) {


булевый тип.... bool - как типы сравнивают ? ===


Цитата
  $mysqli->query("INSERT INTO 'blog'.'users' ('reg_data', 'login', 'password', 'email', 'dob', 'sex') VALUE ('".time()."', '".$login."', '".MD5($password)."', '".$email."', '".$dob."', '".$sex."')");
            $mysqli->close ();
            header ('Location: index.php');


а если запись не прошла? где обработка ошибок?????

матчасть читай. читай мат часть.
Цитата


  $password = htmlspecialchars($password);
        $password = trim($password);


хеш пароля тебе нужен в бд - тока хеш. я люблю пробелы в пароле - гуляй Вася.


--------------------
Халявные ответы кончились.
Если нужен готовый код - готовьтесь заплатить.
Райкин тоже был артист

Возле дома был сарай
А когда всё хорошо
Можно просто покурить

user posted image
http://ufa102.xyz/
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
arbuzmaster  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 723
Пользователь №: 37872
На форуме: 3 года, 4 месяца, 15 дней
Карма: 21




Блин tesla так старался, вон даже какой бэдмобиль придумал
user posted image
и всего лишь спросил как поправить, чтобы в БД записывалось, а тут Вон оно чё Михалыч
biggrin.gif


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Astin  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 592
Пользователь №: 42519
На форуме: 9 месяцев, 28 дней
Карма: 7




tesla86 Вот тебе скриптик, разберайся

<?php
//Подключение к БД
$mysqli = new mysqli('localhost', 'root', '', 'blog');
$mysqli->set_charset("SET NAMES 'utf8'");

//Функция вывода ошибок
function getInfo($error)
{
if (count($error))
return implode("<br />",$error);
}


if (isset($_POST['send'])) //Если нажали кнопку
{
//Создаем переменные

$login = $_POST['login'];
$password = $_POST['password'];
$repassword = $_POST['repassword'];
$email = trim($_POST['email']);
$dob = $_POST['dob'];
$sex = $_POST['sex'];

$error = array();//Массив для ошибок

//Проверяем логин

if (!preg_match("#^[а-яё0-9\-\s_a-z0-9]+$#ius", $login))
$error[] = 'Недопустимые символы для Логина.';

elseif (mb_strlen($data) > 20 or mb_strlen($login) < 3)
$error[] = 'Длина логина должна быть от 3 до 20 символов.';

//Проверяем пароль
if (!$password)
$error[] = 'А пароль кто будет набирать?';

elseif (mb_strlen($password) < 8)
$error[] = 'Пароль должен быть минимум 8 символов.';

elseif ($password != $repassword)
$error[] = 'Пароли не совпадают!';

//Проверяем почту
if (!$email)
$error[] = 'Нужен почтовый адрес.';

elseif (!preg_match("/^[a-z0-9_.-]+@([a-z0-9]+.)+[a-z]{2,6}$/i", $email))
$error[] = 'Введите корректный email';

//Проверяем на существование логина в БД
$res = $mysqli->query("SELECT `id`
FROM `users`
WHERE `login` = '"
.$mysqli->real_escape_string($login)."'");
if (mysqli_num_rows($res) > 0)
$error[] = 'Пользователь с таким логином уже существует';

//Проверяем на существование почты в БД
$res = $mysqli->query("SELECT `id`
FROM `users`
WHERE `email` = '"
.$mysqli->real_escape_string($email)."'");
if (mysqli_num_rows($res) > 0)
$error[] = 'Пользователь с такой почтой уже есть';

///=================================================================
//Еще пару проверок на $_POST['dob'] и $_POST['sex']


if(!count($error)) //Если нет ошибок
{
//Хешируем пароль
$password = md5(sha1($password.$email));

$mysqli->query("INSERT INTO `users`
SET
`reg_data` = '"
.time()."',
`login` = '"
.$mysqli->real_escape_string($login)."',
`password` = '"
.$password."',
`email` = '"
.$mysqli->real_escape_string($email)."',
`dob` = '"
.$dob."',
`sex` = '"
.$mysqli->real_escape_string($sex)."'
"
);

$mysqli->insert_id;//Получаем номер добавленной записи

$info = 'Отлично! Вы успешно зарегистрированы';
}
}



Ну и вывод сообщение об ошибке и успехе
<?php echo getInfo($error); echo $info; ?>


Правда я не писал проверок для $_POST['dob'] и $_POST['sex'], думаю сам разберешься.

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

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

И еще, не пойму зачем тебе сессия? Если ты сразу авторизируешь юсера, то желательно
сделать по другому, то есть дописать код. Но если ты просто регистрируешь, то зачем
тебе сессия.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
tesla86  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 4
Пользователь №: 43122
На форуме: 5 месяцев, 16 дней
Карма:




Спасибо за ответы, буду пробовать biggrin.gif
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
tesla86  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 4
Пользователь №: 43122
На форуме: 5 месяцев, 16 дней
Карма:




Немного переделал код:

if ($error == false) {
$mysqli = new mysqli('localhost', 'root', '', 'blog');
$mysqli->query("SET NAMES 'utf8'");
//Проверяем на существование логина в БД
$query_login = $mysqli->query("SELECT 'id' FROM 'users' WHERE 'login' = '".$mysqli->real_escape_string($login)."'");
if (mysqli_num_rows($query_login) > 0) {
$error_login = "Пользователь с таким логином уже существует";
$error = true;
}
//Проверяем на существование почты в БД
$query_email = $mysqli->query("SELECT 'id' FROM 'users' WHERE 'email' = '".$mysqli->real_escape_string($email)."'");
if (mysqli_num_rows($query_email) > 0) {
$error_email = "Пользователь с такой почтой уже существует";
$error = true;
}
if (mysqli_num_rows($query_login) == 0 && mysqli_num_rows($query_email) == 0) {
$mysqli->query("INSERT INTO 'users' ('reg_data', 'login', 'password', 'email', 'dob', 'sex') VALUES ('".time()."', '".$login."', '".MD5($password)."', '".$email."', '".$dob."', '".$sex."')");
}
$mysqli->close ();
header ('Location: index.php');
exit;
}


Сейчас сыпятся таке ошибки:
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in C:\OpenServer\domains\blog.loc\app\header.php on line 56

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in C:\OpenServer\domains\blog.loc\app\header.php on line 62

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in C:\OpenServer\domains\blog.loc\app\header.php on line 66

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in C:\OpenServer\domains\blog.loc\app\header.php on line 66

Warning: Cannot modify header information - headers already sent by (output started at C:\OpenServer\domains\blog.loc\app\header.php:56) in C:\OpenServer\domains\blog.loc\app\header.php on line 70

PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Michael  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 6065
Пользователь №: 18498
На форуме: 7 лет, 4 месяца, 14 дней
Карма: 256




Цитата
SELECT 'id' FROM 'users' WHERE 'login'

кавычки не те. Посмотри ВНИМАТЕЛЬНО ответы выше.


--------------------
There never was a struggle in the soul of a good man that was not hard
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
tesla86  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 4
Пользователь №: 43122
На форуме: 5 месяцев, 16 дней
Карма:




Цитата (Michael @ 25.06.2016 - 09:37)
Цитата
SELECT 'id' FROM 'users' WHERE 'login'

кавычки не те. Посмотри ВНИМАТЕЛЬНО ответы выше.

Действительно кавычки, спасибо !


Это сообщение отредактировал tesla86 - 25.06.2016 - 10:18
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Astin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 592
Пользователь №: 42519
На форуме: 9 месяцев, 28 дней
Карма: 7




А зачем так усложняешь свой код, чем тебе мой пример не угодил?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Wind  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Местная прописка
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 721
Пользователь №: 41530
На форуме: 1 год, 5 месяцев, 11 дней
Карма: 9




Цитата (Astin @ 25.06.2016 - 10:57)
А зачем так усложняешь свой код, чем тебе мой пример не угодил?


Потому что человек не понимает, что он делает, у меня есть подозрения, что это копипаст wink.gif


--------------------
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Astin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 592
Пользователь №: 42519
На форуме: 9 месяцев, 28 дней
Карма: 7




Цитата
Потому что человек не понимает, что он делает, у меня есть подозрения, что это копипаст wink.gif

Может, может... wink.gif
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Astin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 592
Пользователь №: 42519
На форуме: 9 месяцев, 28 дней
Карма: 7




И еще tesla86 вот то что такое
$mysqli->query("SET NAMES 'utf8'");


Наверно правильнее будет вот так
$mysqli->set_charset("utf8");


Мануал http://php.net/manual/ru/mysqli.set-charset.php
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса