Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Совсем запутался

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Ванёк Хд
Отправлено: 01 Января, 2016 - 17:24:57
Post Id



Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Янв. 2016  


Помог: 0 раз(а)




Здравствуйте, помогите пожалуйста, что с моей регистрацией не так, сделал проверки, все как положено, но при нажатии кнопки пишет что пользователь уже такой есть, хотя его там нет, и я не понимаю как сделать сессии чтобы он не отправлял запросы при обновлении страницы Огорчение
CODE (htmlphp):
скопировать код в буфер обмена
  1. <table>
  2. <form method="post">
  3. <tr>
  4.   <td>Логин:</td>
  5.   <td><input type="text" name="login" value=""></td>
  6. </tr>
  7. <tr>
  8.   <td>Пароль:</td>
  9.   <td><input type="password" name="password" value=""></td>
  10. </tr>
  11. <tr>
  12.   <td></td>
  13.   <td><input style="width:100%;" type="submit" name="submit" value="Регистрация"></td>
  14. </tr>
  15. </form>
  16. </table>
  17. <?php
  18. include "bd.php";
  19. if(isset($_POST['submit']))
  20. {
  21. {
  22. $login = $_POST["login"];
  23. $password = $_POST['password'];
  24. }
  25. if(empty($login)){
  26.         exit('Логин пустой');
  27.         }
  28. if(empty($password)){
  29.         exit('Пароль пустой');
  30.         }
  31. if(strlen($_POST['login']) < 3 or strlen($_POST['login']) > 30)
  32.    {
  33.    exit('Логин должен быть от 3-х до 30-ти символов.');
  34.    }
  35. if(strlen($_POST['password']) < 5 or strlen($_POST['password']) > 30)
  36.    {
  37.    exit('Пароль должен быть от 5-ти до 30-ти символов.');
  38.    }
  39.    $query = mysqli_query($db, "SELECT COUNT(user_id) FROM users WHERE user_login='".mysqli_real_escape_string($db, $_POST['login'])."'");
  40.    if(mysqli_num_rows($query) > 0)
  41.    {
  42.    exit('Пользователь с таким логином уже существует в базе данных.');
  43.         }
  44. $password = &$passwordhash;
  45. $passwordhash = md5(md5(trim($_POST['password'])));
  46. mysqli_query($db,"INSERT INTO users SET user_login='".$login."', user_password='".$passwordhash."'");
  47. }
  48. ?>

(Отредактировано автором: 01 Января, 2016 - 17:35:40)

 
 Top
Viper
Отправлено: 01 Января, 2016 - 20:17:13
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Ванёк Хд вы делаете выборку с подсчетом, а потом тоже самое только в php.

Не имеет смысла
PHP:
скопировать код в буфер обмена
  1. $query = mysqli_query($db, "SELECT COUNT(user_id) FROM users WHERE user_login='".mysqli_real_escape_string($db, $_POST['login'])."'");
  2.    if(mysqli_num_rows($query) > 0)


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
dcc0
Отправлено: 02 Января, 2016 - 02:36:06
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




Зачем вообще считать пользователей, когда он один должен быть?
Или у Вас пользователи могут иметь одинаковые имена?
PHP:
скопировать код в буфер обмена
  1. $query = mysqli_query($db, "SELECT COUNT(user_id) FROM users WHERE user_login='".mysqli_real_escape_string($db, $_POST['login'])."'");


И правда, странный запрос.
Я все еще не пытался вникнуть в синтаксис mysqli,
но COUNT точно не нужен. Просто WHERE login
(Добавление)
Спойлер (Отобразить)

Вот так отрабатывает, только данные в запросах мои.
Может, и мне перейти на mysqli пока не поздно? Ниндзя

Еще по вашему скрипту

С такой проверкой можно создать пользователя с именем 0.0,
0000 или 0000000, или 88888 или вот с таким прекрасным именем
####
А также если 3 раз ввести пробел, то пользователь будет создан.
1) Надо бы добавить проверочку на то, что логин не является чисто числовым.
2) Надо проверить, что в логине нет недопустимых символов.

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

(Отредактировано автором: 02 Января, 2016 - 03:09:39)



-----
Март 2021. Бросил программирование
 
 Top
Ванёк Хд
Отправлено: 02 Января, 2016 - 04:09:24
Post Id



Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Янв. 2016  


Помог: 0 раз(а)




dcc0 пишет:
Зачем вообще считать пользователей, когда он один должен быть?
Или у Вас пользователи могут иметь одинаковые имена?
PHP:
скопировать код в буфер обмена
  1. $query = mysqli_query($db, "SELECT COUNT(user_id) FROM users WHERE user_login='".mysqli_real_escape_string($db, $_POST['login'])."'");


И правда, странный запрос.
Я все еще не пытался вникнуть в синтаксис mysqli,
но COUNT точно не нужен. Просто WHERE login
(Добавление)
Спойлер (Отобразить)

Вот так отрабатывает, только данные в запросах мои.
Может, и мне перейти на mysqli пока не поздно? Ниндзя

Еще по вашему скрипту

С такой проверкой можно создать пользователя с именем 0.0,
0000 или 0000000, или 88888 или вот с таким прекрасным именем
####
А также если 3 раз ввести пробел, то пользователь будет создан.
1) Надо бы добавить проверочку на то, что логин не является чисто числовым.
2) Надо проверить, что в логине нет недопустимых символов.

Вот только не знаю надо ли в случае с пробелами проверять еще так
имеет ли это смысл, думаю, что нет, если отсеяны все спецсимволы и строго цифры.
я и пытаюсь сделать чтобы пользователи не могли иметь одинаковые имена
 
 Top
dcc0
Отправлено: 02 Января, 2016 - 04:17:33
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




PHP:
скопировать код в буфер обмена
  1. я и пытаюсь сделать чтобы пользователи не могли иметь одинаковые имена

А одинаковые в каком смысле?
admin, aDmin, Admin - это одинаковые?
А то есть для сравнения строк:
http://php.net/manual/ru/function.strcmp.php
и
strcasecmp для сравнения без учета регистра
или
strtolower
(Добавление)
Спойлер (Отобразить)

Ну вот так у меня Ваш код отрабатывает. И пользователя проверят, но явно.
На счёт корректности запроса mysqli я не уверен, не спец.
И надо ли выходить из скрипта при одном сработавшем условии?!
Вроде бы для серии проверок делают серию elseif или switch

(Отредактировано автором: 02 Января, 2016 - 05:09:10)



-----
Март 2021. Бросил программирование
 
 Top
Ванёк Хд
Отправлено: 02 Января, 2016 - 06:01:16
Post Id



Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Янв. 2016  


Помог: 0 раз(а)




dcc0 пишет:
PHP:
скопировать код в буфер обмена
  1. я и пытаюсь сделать чтобы пользователи не могли иметь одинаковые имена

А одинаковые в каком смысле?
admin, aDmin, Admin - это одинаковые?
А то есть для сравнения строк:
http://php.net/manual/ru/function.strcmp.php
и
strcasecmp для сравнения без учета регистра
или
strtolower
(Добавление)
Спойлер (Отобразить)

Ну вот так у меня Ваш код отрабатывает. И пользователя проверят, но явно.
На счёт корректности запроса mysqli я не уверен, не спец.
И надо ли выходить из скрипта при одном сработавшем условии?!
Вроде бы для серии проверок делают серию elseif или switch

Notice: Undefined variable: bd in C:\xampp\htdocs\kill\register.php on line 27

Fatal error: Call to a member function query() on null in C:\xampp\htdocs\kill\register.php on line 27
(Добавление)
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2. include "bd.php";
  3.    echo "Подключение невозможно: ".mysqli_connect_error();
  4. }
  5. if(isset($_POST['submit']))
  6. {
  7. {
  8. $login = $_POST["login"];
  9. $password = $_POST['password'];
  10. }
  11. if(empty($login)){
  12.         exit('Логин пустой');
  13.         }
  14. if(empty($password)){
  15.         exit('Пароль пустой');
  16.         }
  17. if(strlen($_POST['login']) < 3 or strlen($_POST['login']) > 30)
  18.    {
  19.    exit('Логин должен быть от 3-х до 30-ти символов.');
  20.    }
  21. if(strlen($_POST['password']) < 5 or strlen($_POST['password']) > 30)
  22.    {
  23.    exit('Пароль должен быть от 5-ти до 30-ти символов.');
  24.    }
  25.   $query = mysqli_query($db, "SELECT `id` FROM users WHERE `login`='".mysqli_real_escape_string($db, $_POST['login'])."'");
  26.   if(mysqli_num_rows($query) > 0)
  27.   {
  28.   exit('Пользователь с таким логином уже существует в базе данных.'); }
  29.  
  30. $password = &$passwordhash;
  31. $passwordhash = md5(md5(trim($_POST['password'])));
  32. mysqli_query($db,"INSERT INTO users SET user_login='".$login."', user_password='".$passwordhash."'");
  33. echo "Пользователь с логином $login успешно создан<br>";
  34. echo '<a href="auch.php">Авторизация</a>';
  35. }
  36. ?>

Регистрация

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in C:\xampp\htdocs\kill\red.php on line 43
такая ошибка
 
 Top
dcc0
Отправлено: 02 Января, 2016 - 14:39:13
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




Как я понял, в mysqli также надо использовать fetch.
(Добавление)
http://www.php.su/mysql_num_rows
Возвращает ресурс, у тебя в ошибке логический тип.

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3.  
  4.    $query = mysqli_query($db, "SELECT `id` FROM users WHERE `login`='".mysqli_real_escape_string($db, $_POST['login'])."'") or exit('Ошибка!');
  5. $num_rows = mysqli_num_rows($query);
  6. echo $num_rows;  
  7.    if($num_rows > 0)
  8.          
  9.    {
  10.          
  11.    exit('Пользователь с таким логином уже существует в базе данных.');
  12.  

Так тоже отрабатывает

(Отредактировано автором: 02 Января, 2016 - 15:36:07)



-----
Март 2021. Бросил программирование
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB