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

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

17.06.2011, 19:17. Показов 3922. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru