Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
3 / 3 / 0
Регистрация: 14.12.2010
Сообщений: 106

Скрипт регистрации. Ошибка при входе

17.06.2011, 19:17. Показов 3926. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу свою регистрацию. Все данные правильно заносятся в БД. Но на сам аккаунт не заходит.
Код файла для входа:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<?php
session_start();
 
if (isset($_POST['login'])) { $login = $_POST['login']; if ($login == '') { unset($login);} } 
if (isset($_POST['password'])) { $password=$_POST['password']; if ($password =='') { unset($password);} }
 
 
if (empty($login) or empty($password)) 
{
exit ("Вы ввели не всю информацию, вернитесь назад и заполните все поля!");
}
 
$login = stripslashes($login);
$login = htmlspecialchars($login);
 
$password = stripslashes($password);
$password = htmlspecialchars($password);
 
$login = trim($login);
$password = trim($password);
 
include ("bd.php");
 
$ip=getenv("HTTP_X_FORWARDED_FOR");
if (empty($ip) || $ip=='unknown') { $ip=getenv("REMOTE_ADDR"); }
 
mysql_query ("DELETE FROM oshibka WHERE UNIX_TIMESTAMP() - UNIX_TIMESTAMP(date) > 900");
 
$result = mysql_query("SELECT col FROM oshibka WHERE ip='$ip'",$db);
$myrow = mysql_fetch_array($result);
 
if ($myrow['col'] > 2) {
exit("Вы набрали логин или пароль неверно 3 раза. Подождите 15 минут до следующей попытки.");
}
 
 
$password = md5($password);
$password = strrev($password);
$password = $password."b3p6f";
 
$result = mysql_query("SELECT * FROM users WHERE login = '.$login' AND password = '.$password'",$db); 
$myrow = mysql_fetch_array($result);
 
if (empty($myrow['id']))
{
 
 
$select = mysql_query ("SELECT ip FROM oshibka WHERE ip='$ip'");
$tmp = mysql_fetch_row ($select);
if ($ip == $tmp[0]) {
 
$result52 = mysql_query("SELECT col FROM oshibka WHERE ip='$ip'",$db);
$myrow52 = mysql_fetch_array($result52);
 
$col = $myrow52[0] + 1;
mysql_query ("UPDATE oshibka SET col=$col,date=NOW() WHERE ip='$ip'");
}
 
else {
 
mysql_query ("INSERT INTO oshibka (ip,date,col) VALUES ('$ip',NOW(),'1')");
}
 
 
exit ("Извините, введённый вами логин или пароль неверный.");
}
else {
 
        
          $_SESSION['password']=$myrow['password']; 
          $_SESSION['login']=$myrow['login']; 
          $_SESSION['id']=$myrow['id'];
          
 
if (isset($_POST['save'])){
setcookie("login", $_POST["login"], time()+9999999);
setcookie("password", $_POST["password"], time()+9999999);}
}   
      
echo "<html><head><meta http-equiv='Refresh' content='0; URL=index.php'></head></html>";
 
?>
При регистрации используется такая же шифровка пароля:
PHP
1
2
3
$password = md5($password);
$password = strrev($password);
$password = $password."b3p6f";
Но когда при входе в аккаунт ввожу правильные логин и пароль то пишется "Извините, введённый вами логин или пароль неверный". Перепробовал все методы - не работает. Пожалуйста помогите.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.06.2011, 19:17
Ответы с готовыми решениями:

ошибка на регистрации(скрипт)
пишет Fatal error: Call to undefined function clean() in /home/a4506434/public_html/register_.php on line 6 &lt;?php include...

Скрипт регистрации не знаю, где ошибка
Здрасте. Я в ПХП новичок, устал безрезультатно ковырять код.... Ошибка в скрипте регистрации, где низнаю... Есть БД(MySQL) в ней...

Ошибка при входе в БД
Есть БД на phpmyadmin, был скачан интерфейс для БД и до этого нормально заходил в БД через интерфейс, редактировал БД и т.д. Пару дней...

20
 Аватар для MegaAce
332 / 306 / 155
Регистрация: 14.02.2010
Сообщений: 662
17.06.2011, 22:56
После
PHP
1
2
3
//41 строка
$result = mysql_query("SELECT * FROM users WHERE login = '.$login' AND password = '.$password'",$db); 
$myrow = mysql_fetch_array($result);
введите
PHP
1
if(mysql_num_rows($result) != 0){echo '<pre>'; print_r($myrow); echo '</pre>';}else echo 'Неудачная авторизация';
И посмотрите что передается
1
3 / 3 / 0
Регистрация: 14.12.2010
Сообщений: 106
17.06.2011, 23:21  [ТС]
MegaAce, передается:
Неудачная авторизация.

Это значит, что данные вообще не вытянулись?
0
 Аватар для romchiksoad
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
18.06.2011, 01:16
alexandre0sheva,
PHP
1
$result = mysql_query("SELECT * FROM users WHERE login = '.$login' AND password = '.$password'",$db) or die( mysql_error() );//41 строка
Что-нибудь пишет?

Добавлено через 2 минуты
alexandre0sheva, мм... Вы уверены, что перед логином и паролем нужно ставить точку? В таблице БД так же?
1
 Аватар для MegaAce
332 / 306 / 155
Регистрация: 14.02.2010
Сообщений: 662
18.06.2011, 02:29
alexandre0sheva, правильно поняли. И возможно как и подметил romchiksoad все дело в точках
1
3 / 3 / 0
Регистрация: 14.12.2010
Сообщений: 106
18.06.2011, 09:30  [ТС]
Сразу я написал без точек. Проблема возникла именно тогда. Но потом на киберфоруме нашел немного похожую тему, в которой советовали ставить точку. В моем случае точка ничего не изменила и я ее решил оставить. Когда я убераю точки то ничего не изменяется.

romchiksoad,
Цитата Сообщение от romchiksoad Посмотреть сообщение
Что-нибудь пишет?
При таком изменении кода пишет тоже самое что и раньше:
Неудачная авторизация. Извините, введённый вами логин или пароль неверный.
0
 Аватар для Nazz
898 / 729 / 80
Регистрация: 12.03.2009
Сообщений: 2,804
Записей в блоге: 2
18.06.2011, 11:04
а так:
PHP
1
$result = mysql_query("SELECT * FROM users WHERE `login` = '".$login."' AND `password` = '".$password."'",$db) or die( mysql_error() );//41 строка
???
1
 Аватар для romchiksoad
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
18.06.2011, 12:56
alexandre0sheva,
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php
session_start();
 
if ( isset( $_POST['login'], $_POST['password'] ) ) {
    $login = htmlspecialchars( $_POST['login'], ENT_QUOTES );
    $password = htmlspecialchars( $_POST['password'], ENT_QUOTES );
}
else
    exit ("Вы ввели не всю информацию, вернитесь назад и заполните все поля!");
include ("bd.php");
mysql_query ("DELETE FROM oshibka WHERE UNIX_TIMESTAMP() - UNIX_TIMESTAMP(date) > 900");
$ip = ip2long( $_SERVER['REMOTE_ADDR'] );   //Преобразуем IP-адрес к целому числу
$result = mysql_query( "SELECT col FROM oshibka WHERE ip=$ip", $db );   //В БД тип поля ip необходимо так же преобразовать в INT
$myrow = mysql_fetch_assoc( $result );
 if ($myrow['col'] > 2)
    exit("Вы набрали логин или пароль неверно 3 раза. Подождите 15 минут до следующей попытки.");
$password = md5($password);
$password = strrev($password);
$password = $password."b3p6f";
$result = mysql_query( "SELECT * FROM users WHERE login = '$login' AND password = '$password'", $db ); 
$myrow = mysql_fetch_assoc( $result );
if (empty($myrow['id'])) {
    $select = mysql_query ("SELECT ip FROM oshibka WHERE ip=$ip");
    $tmp = mysql_fetch_row( $select );
    if ($ip == $tmp[0]) {
        $result52 = mysql_query( "SELECT col FROM oshibka WHERE ip=$ip", $db );
        $myrow52 = mysql_fetch_array($result52);
        $col = $myrow52[0] + 1;
        mysql_query ("UPDATE oshibka SET col=$col,date=NOW() WHERE ip=$ip");
    }
    else
        mysql_query ("INSERT INTO oshibka (ip,date,col) VALUES ('$ip',NOW(),'1')");//Лучше переделайте запрос с SET поле=значение. Так будет быстрее
    exit ("Извините, введённый вами логин или пароль неверный.");
}
else {
    $_SESSION['password']=$myrow['password']; 
    $_SESSION['login']=$myrow['login']; 
    $_SESSION['id']=$myrow['id'];
    if (isset($_POST['save'])){
        setcookie("login", $_POST["login"], time()+9999999);
        setcookie("password", $_POST["password"], time()+9999999);  //Хранить даже хэш пароля в куках не безопасно! К тому же это и не надо. Даже в сессиях
    }
}
header( 'Location: index.php' );
?>
Немного изменил Ваш код. Почитайте комментарии.
1
3 / 3 / 0
Регистрация: 14.12.2010
Сообщений: 106
19.06.2011, 11:13  [ТС]
romchiksoad, в данном случае пишет тоже самое что и писало раньше: "Извините, введённый вами логин или пароль неверный."
0
 Аватар для romchiksoad
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
19.06.2011, 11:36
alexandre0sheva, покажите как регистрируете. Может быть проблема в этом.
1
3 / 3 / 0
Регистрация: 14.12.2010
Сообщений: 106
19.06.2011, 12:03  [ТС]
romchiksoad, вот код сохранения пользователя(save_user.php):
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
<?php
if (isset($_POST['login'])) { $login = $_POST['login']; if ($login == '') { unset($login);} } 
if (isset($_POST['password'])) { $password=$_POST['password']; if ($password =='') { unset($password);} }
 
if (empty($login) or empty($password)) 
{
exit ("Вы ввели не всю информацию, вернитесь назад и заполните все поля!");
}
 
$login = stripslashes($login);
$login = htmlspecialchars($login);
 
$password = stripslashes($password);
$password = htmlspecialchars($password);
 
$login = trim($login);
$password = trim($password);
 
if (strlen($login) < 3 or strlen($login) > 15) {
exit ("Логин должен состоять не менее чем из 3 символов и не более чем из 15.");
}
if (strlen($password) < 3 or strlen($password) > 15) {
exit ("Пароль должен состоять не менее чем из 3 символов и не более чем из 15.");
}
 
 
if (!empty($_POST['fupload'])) 
{
$fupload=$_POST['fupload']; $fupload = trim($fupload); 
  if ($fupload =='' or empty($fupload)) {
                     unset($fupload);
                     }
}
 
if (!isset($fupload) or empty($fupload) or $fupload =='')
{
 
$avatar = "avatars/net-avatara.jpg"; 
}
 
else 
{
$path_to_90_directory = 'avatars/';
    
if(preg_match('/[.](JPG)|(jpg)|(gif)|(GIF)|(png)|(PNG)$/',$_FILES['fupload']['name']))
     {  
            
        $filename = $_FILES['fupload']['name'];
        $source = $_FILES['fupload']['tmp_name'];   
        $target = $path_to_90_directory . $filename;
        move_uploaded_file($source, $target);
 
    if(preg_match('/[.](GIF)|(gif)$/', $filename)) {
    $im = imagecreatefromgif($path_to_90_directory.$filename) ; 
    }
    if(preg_match('/[.](PNG)|(png)$/', $filename)) {
    $im = imagecreatefrompng($path_to_90_directory.$filename) ;
    }
    
    if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filename)) {
        $im = imagecreatefromjpeg($path_to_90_directory.$filename); 
    }
    
 
$w = 90;  
 
$w_src = imagesx($im); 
$h_src = imagesy($im);
         $dest = imagecreatetruecolor($w,$w); 
 
         if ($w_src>$h_src) 
         imagecopyresampled($dest, $im, 0, 0,
                          round((max($w_src,$h_src)-min($w_src,$h_src))/2),
                          0, $w, $w, min($w_src,$h_src), min($w_src,$h_src)); 
 
         if ($w_src<$h_src) 
         imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w,
                          min($w_src,$h_src), min($w_src,$h_src)); 
      
         if ($w_src==$h_src) 
         imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $w_src); 
         
 
$date=time(); 
imagejpeg($dest, $path_to_90_directory.$date.".jpg");
 
$avatar = $path_to_90_directory.$date.".jpg";
 
$delfull = $path_to_90_directory.$filename; 
unlink ($delfull);
}
else 
         {
        
         exit ("Аватар должен быть в формате <strong>JPG,GIF или PNG</strong>");
         }
 
}
 
$password = md5($password);
$password = strrev($password);
$password = $password."b3p6f";
 
include ("bd.php");
 
$result = mysql_query("SELECT id FROM users WHERE login='$login'",$db);
$myrow = mysql_fetch_array($result);
if (!empty($myrow['id'])) {
exit ("Извините, введённый вами логин уже зарегистрирован. Введите другой логин.");
}
 
$result2 = mysql_query ("INSERT INTO users (login,password,avatar) VALUES('$login','$password','$avatar')");
 
if ($result2=='TRUE')
{
echo "Вы успешно зарегистрированы! Теперь вы можете зайти на сайт. <a href='index.php'>Главная страница</a>";
}
 
else {
echo "Ошибка! Вы не зарегистрированы.";
     }
?>
0
 Аватар для romchiksoad
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
19.06.2011, 12:15
alexandre0sheva,

Цитата Сообщение от alexandre0sheva Посмотреть сообщение
$login = stripslashes($login);
$login = htmlspecialchars($login);
$password = stripslashes($password);
$password = htmlspecialchars($password);
$login = trim($login);
$password = trim($password);

Цитата Сообщение от romchiksoad Посмотреть сообщение
$login = htmlspecialchars( $_POST['login'], ENT_QUOTES );
* * * * $password = htmlspecialchars( $_POST['password'], ENT_QUOTES );
В скрипте регистрации сделайте так же как и в моей версии Вашего кода авторизации. Зарегистрируйте нового пользователя и попробуйте авторизоваться.
P.S.:
Вы точки удалили перед логином и паролем при авторизации?
Поле id в таблице users AUTO_INCREMENT?
1
3 / 3 / 0
Регистрация: 14.12.2010
Сообщений: 106
19.06.2011, 12:33  [ТС]
Вы точки удалили перед логином и паролем при авторизации?
Да, но это не помогло...

Поле id в таблице users AUTO_INCREMENT?
Да

В скрипте регистрации сделайте так же как и в моей версии Вашего кода авторизации.
Извините, а какой именно участок кода Вы имеете ввиду?
0
 Аватар для romchiksoad
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
19.06.2011, 12:39
save_user.php с 10 по 17 строки замените на
Цитата Сообщение от romchiksoad Посмотреть сообщение
$login = htmlspecialchars( $_POST['login'], ENT_QUOTES );
$password = htmlspecialchars( $_POST['password'], ENT_QUOTES );
1
3 / 3 / 0
Регистрация: 14.12.2010
Сообщений: 106
19.06.2011, 12:42  [ТС]
romchiksoad, изменил, зарегестрировал нового пользователя, но по-прежнему не заходит...
0
 Аватар для romchiksoad
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
19.06.2011, 13:08
alexandre0sheva, хммм...
Цитата Сообщение от romchiksoad Посмотреть сообщение
if (empty($myrow['id'])) {//22 строка авторизации
замените на:
PHP
1
if ( mysql_num_rows( $result ) == 0 ) {
Если не проканает, то добавьте после Вашего условия( if (empty($myrow['id'])) {//22 строка авторизации ) строку:
PHP
1
var_dump( $myrow['id'] );
Я просто не вижу ошибки. Скорее всего где-то логика нарушено, или само условие не правильное.
1
3 / 3 / 0
Регистрация: 14.12.2010
Сообщений: 106
19.06.2011, 13:17  [ТС]
romchiksoad,
замените на:
без изменений(
var_dump( $myrow['id'] );
выдает "NULL"
Может ли быть, что ошибка в денвере (в конфиге)? Просто неизвестно тогда в чем проблема.
0
 Аватар для romchiksoad
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
19.06.2011, 13:44
alexandre0sheva, сервер не причем. Вы уверены, что вводите правильные данные для входа?
Сравните хэши пароля в таблице `users` и в скрипте авторизации. Зрительно. выведите в браузер пароль, которые передаете в запросе с тем, что уже таблице.
После 19 строки скрипта авторизации выведите пароль:
PHP
1
exit( $password );
Поле таблицы `users`, которое хранит пароль должно быть длиной 37 символов. Не меньше.
1
3 / 3 / 0
Регистрация: 14.12.2010
Сообщений: 106
19.06.2011, 15:42  [ТС]
Цитата Сообщение от romchiksoad Посмотреть сообщение
Поле таблицы `users`, которое хранит пароль должно быть длиной 37 символов. Не меньше.
romchiksoad, Вот она, ошибка!!! У меня это поле стояло ограничение 15 символов и пароль обрезался!!! Теперь поставлю длиной 40 символов чтоб наверняка!!! Огромное Вам спасибо!!!
Теперь все работает!!!
0
 Аватар для romchiksoad
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
19.06.2011, 15:48
alexandre0sheva,
Цитата Сообщение от alexandre0sheva Посмотреть сообщение
Теперь поставлю длиной 40 символов чтоб наверняка!!!
40 - это много. Ставьте 37 символов, т.к. md5-хэш всегда состоит из 32-х символов + 5 символов "мусора". Больше 37-ми символов никогда не будет.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.06.2011, 15:48
Помогаю со студенческими работами здесь

Скрипт при входе в систему
Здравствуйте, с наступившим вас!! :drink: Такие дела, захожу на сервер через RDP под админом, появляется окошко консоли, там сперва...

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

Скрипт проверки при регистрации
на многих сайтах при регистрации требуют ввести буквы и цифры изобрашённые на картинке!! Где мне взять такой скрипт или хотя бы как он ...

Unity 2D Как переделать скрипт, чтобы он активировался только при входе обоих персонажей?
Создал обычный платформер столкнулся с проблемой создания финиша, прикрутил 2Дколайдер со скриптом тригером выхода в главное меню. ...

Ошибка при входе в CS 1.6
при выходе из игры контер страйк 1.6 выдает такую ошибку Пробовал разные инсталяхи игры ничего не помогает !!!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru