Автор Тема: Помогите разобраться со скриптом  (Прочитано 10606 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Druggy

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 28
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Помогите разобраться со скриптом
« : 14 Апреля 2005, 17:15:59 »
есть скрипт:

<?php

	
$username = empty($_POST[\'username\']) ?null: $_POST[\'username\'];
	
$passwd = empty($_POST[\'passwd\']) ?null: $_POST[\'passwd\'];
	
$action_keeper = empty($_POST[\'action_keeper\']) ?null: $_POST[\'action_keeper\'];



	
function display_form()
	
{
?>
<form action="" method="post">
<input type="hidden" name="action_keeper" value="login">
Имя пользователя <input type="text" name="username" size="24" maxlength="16" value="">

Пароль <input type="password" name="passwd" size="24" maxlength="16" value="">

<input type="submit" value="Войти">
</form>
<?php
	
}



	
if ($action_keeper != \'login\')
	
{
	
	
display_form();
	
}
	
else
	
{
	
	
if (!$username or !$passwd)
	
	
{
	
	
	
print \'Вы ввели не все необходимые для авторизации данные.\';
	
	
	
display_form();
	
	
}
	
	
else
	
	
{
	
	
	
$db_conn = mysql_connect(\'localhost\', \'db_login\', \'db_password\');
	
	
	
mysql_select_db(\'base\');
	
	
	
$query = "select * from users where username=\'$username\' and passwd = password(\'$passwd\')";
	
	
	
$result = mysql_query($query);
	
	
	
if(!$result)
	
	
	
{
	
	
	
	
print \'Невозможно выполнить запрос к базе данных.\';
	
	
	
	
display_form();
	
	
	
	
exit;
	
	
	
}
	
	
	
if (mysql_num_rows($result) > 0)
	
	
	
	
print \'Вы вошли
Скрытая информация.\';
	
	
	
else
	
	
	
{
	
	
	
	
print \'Вы не вошли
\';
	
	
	
	
display_form();
	
	
	
}
	
	
}
	
}

?>


в базе данных имя пользователя: username и пароль в зашифрованом виде: password.

Функция все время выводит мне: Невозможно выполнить запрос к базе данных.
В логах: PHP Warning:  mysql_num_rows(): supplied argument is not a valid MySQL result resource in d:\\\\Server\\\\www\\\\system\\\\cpanel\\\\index.php on line 34\\n

причем если хранить пароль в базе в незашифрованом виде и использовать запрос: "select * from users where username=\'$username\' and passwd = \'$passwd\'", то все замечательно работает...

Подскажите пожалуйста где кроется моя ошибка!
What isn\'t rememberd, never happened.
Memory is merely a record... you just need to rewrite that record.

Оффлайн Croaker

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 927
  • +0/-0
  • 0
    • Просмотр профиля
    • http://alex-files.ru
Помогите разобраться со скриптом
« Ответ #1 : 14 Апреля 2005, 17:36:37 »
Цитировать
Druggy:
В логах: PHP Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in d:\\\\Server\\\\www\\\\system\\\\cpanel\\\\index.php on line 34\\n


Этот варнинг возникает тогда, когда у вас !$result и выполняется блок:

if (mysql_num_rows($result) > 0)
                print \'Вы вошли
Скрытая информация.\';


Прямого отношения он к проблеме не имеет.

Цитировать
Druggy:
Подскажите пожалуйста где кроется моя ошибка!


Вам надо вывести SQL запрос на экран, скоприровать его, вставить в консоль MySQL или PhpMyAdmin или что-там у вас, и посмотреть, что выдаст MySQL.
Не все коту матрица.

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Помогите разобраться со скриптом
« Ответ #2 : 14 Апреля 2005, 19:54:36 »
можно просто mysql_error() вывести

Druggy , рекомендую прочитать: PHP FAQ: Ничего не работает! Что делать???

Оффлайн Druggy

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 28
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Помогите разобраться со скриптом
« Ответ #3 : 15 Апреля 2005, 04:25:05 »
Делаю запрос через MySQL монитор:

запрос следующий: select * from users where username=\'username\' and passwd=password(\'password\');

Ответ MySQL: ERROR 1267 (HY000): Illegal mix of collations (cp1251_general_cs,IMPLICIT) and (
latin1_swedish_ci,COERCIBLE) for operation \'=\'



Делаю запрос через phpMyAdmin:

запрос следующий: select * from users where username=\'username\' and passwd=password(\'password\');

Ответ MySQL: empty set (0.00 sec)



Вот sql операторы при помощи которых делаю базу:

DROP DATABASE IF EXISTS base;
CREATE DATABASE base;
ALTER DATABASE `base` DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_cs;
USE base;
DROP TABLE IF EXISTS users;
CREATE TABLE users
(
   username   CHAR(16) NOT NULL PRIMARY KEY,
   passwd      CHAR(16) NOT NULL
);
GRANT SELECT, INSERT, UPDATE, DELETE
ON base.*
TO db_login@localhost IDENTIFIED BY \'db_password\';



Видимо где-то я чего-то невижу или не понимаю...
« Последнее редактирование: 15 Апреля 2005, 05:42:19 от Druggy »
What isn\'t rememberd, never happened.
Memory is merely a record... you just need to rewrite that record.

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Помогите разобраться со скриптом
« Ответ #4 : 15 Апреля 2005, 09:30:08 »
Цитировать
Druggy:
ALTER DATABASE `base` DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_cs;

а это зачем?

Оффлайн Druggy

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 28
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Помогите разобраться со скриптом
« Ответ #5 : 15 Апреля 2005, 12:06:02 »
кодировка базы + кодировка в которой сравнивать... разве не надо? ж)
What isn\'t rememberd, never happened.
Memory is merely a record... you just need to rewrite that record.

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Помогите разобраться со скриптом
« Ответ #6 : 15 Апреля 2005, 12:19:22 »
вообще, я думаю, тебе надо смотреть описание ошибки в документации по mysql
да и вообще - с тех пор, как ты выяснил ,в чём ошибка, выяснилось, чт о пхп тут совсем не при чём.

Оффлайн Druggy

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 28
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Помогите разобраться со скриптом
« Ответ #7 : 15 Апреля 2005, 12:33:58 »
убрал ALTER DATABASE `base` DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_cs;



Вот значит вопрос всеравно имеет место:
Случай номер один:

Создаю базу используя операторы:
DROP DATABASE IF EXISTS base;
CREATE DATABASE base;
USE base;
DROP TABLE IF EXISTS users;
CREATE TABLE users
(
   username   CHAR(16) NOT NULL PRIMARY KEY,
   passwd      CHAR(16) NOT NULL
);
INSERT INTO users(username, passwd)
      VALUES(\'username\', \'password\');
GRANT SELECT, INSERT, UPDATE, DELETE
ON base.*
TO db_login@localhost IDENTIFIED BY \'db_password\';

Сценарий такой:

<?php

	
$username = empty($_POST[\'username\']) ?null: $_POST[\'username\'];
	
$passwd = empty($_POST[\'passwd\']) ?null: $_POST[\'passwd\'];
	
$action_keeper = empty($_POST[\'action_keeper\']) ?null: $_POST[\'action_keeper\'];



	
function display_form()
	
{
?>
<form action="" method="post">
<input type="hidden" name="action_keeper" value="login">
Имя пользователя <input type="text" name="username" size="24" maxlength="16" value="">

Пароль <input type="password" name="passwd" size="24" maxlength="16" value="">

<input type="submit" value="Войти">
</form>
<?php
  
	
}



	
if ($action_keeper != \'login\')
	
{
	
	
display_form();
	
}
	
else
	
{
	
	
if (!$username or !$passwd)
	
	
{
	
	
	
print \'Вы ввели не все необходимые для авторизации данные.\';
	
	
	
display_form();
	
	
}
	
	
else
	
	
{
	
	
	
$db_conn = mysql_connect(\'localhost\', \'hFdb48H3La5HJf1k\', \'q2hj56rG6RDstx7p\');
	
	
	
mysql_select_db(\'ion\');
	
	
	
$query = "select * from users where username=\'$username\' and passwd=\'$passwd\'";
	
	
	
$result = mysql_query($query);
	
	
	
if(!$result)
	
	
	
{
	
	
	
	
print \'Невозможно выполнить запрос к базе данных.\';
	
	
	
	
display_form();
	
	
	
	
exit;
	
	
	
}
	
	
	
if (mysql_num_rows($result) > 0)
	
	
	
	
print \'Вы вошли
Скрытая информация.\';
	
	
	
else
	
	
	
{
	
	
	
	
print \'Вы не вошли
\';
	
	
	
	
display_form();
	
	
	
}
	
	
}
	
}

?>


Ввожу нужную информацию - все работает, ввожу неправильно или не ввожу вовсе - выдает ошибки, которые нужно, типа там "не ввели"/"не вошли"... одним словом все хорошо, только вот пароль в базе данных храниться в незашифрованом виде.


Пытаемся его там зашифровать (Случай номер два):

Создаю базу используя операторы:
DROP DATABASE IF EXISTS base;
CREATE DATABASE base;
USE base;
DROP TABLE IF EXISTS users;
CREATE TABLE users
(
   username   CHAR(16) NOT NULL PRIMARY KEY,
   passwd      CHAR(16) NOT NULL
);
INSERT INTO users(username, passwd)
      VALUES(\'username\', password(\'password\'));
GRANT SELECT, INSERT, UPDATE, DELETE
ON base.*
TO db_login@localhost IDENTIFIED BY \'db_password\';

Сценарий такой:

<?php

	
$username = empty($_POST[\'username\']) ?null: $_POST[\'username\'];
	
$passwd = empty($_POST[\'passwd\']) ?null: $_POST[\'passwd\'];
	
$action_keeper = empty($_POST[\'action_keeper\']) ?null: $_POST[\'action_keeper\'];



	
function display_form()
	
{
?>
<form action="" method="post">
<input type="hidden" name="action_keeper" value="login">
Имя пользователя <input type="text" name="username" size="24" maxlength="16" value="">

Пароль <input type="password" name="passwd" size="24" maxlength="16" value="">

<input type="submit" value="Войти">
</form>
<?php
  
	
}



	
if ($action_keeper != \'login\')
	
{
	
	
display_form();
	
}
	
else
	
{
	
	
if (!$username or !$passwd)
	
	
{
	
	
	
print \'Вы ввели не все необходимые для авторизации данные.\';
	
	
	
display_form();
	
	
}
	
	
else
	
	
{
	
	
	
$db_conn = mysql_connect(\'localhost\', \'hFdb48H3La5HJf1k\', \'q2hj56rG6RDstx7p\');
	
	
	
mysql_select_db(\'ion\');
	
	
	
$query = "select * from users where username=\'$username\' and passwd=password(\'$passwd\')";
	
	
	
$result = mysql_query($query);
	
	
	
if(!$result)
	
	
	
{
	
	
	
	
print \'Невозможно выполнить запрос к базе данных.\';
	
	
	
	
display_form();
	
	
	
	
exit;
	
	
	
}
	
	
	
if (mysql_num_rows($result) > 0)
	
	
	
	
print \'Вы вошли
Скрытая информация.\';
	
	
	
else
	
	
	
{
	
	
	
	
print \'Вы не вошли
\';
	
	
	
	
display_form();
	
	
	
}
	
	
}
	
}

?>


Неработает, пишет все время что не вошли.

Ввожу запрос "select * from users where username=\'username\' and passwd=password(\'password\');" напрямую, через MySQL монитор.
Ответ MySQL: Empty set (0.00 sec)


Люди вы же умные! подскажите! ж))))
А то я уже совсем ничего не понимаю...
What isn\'t rememberd, never happened.
Memory is merely a record... you just need to rewrite that record.

Оффлайн Croaker

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 927
  • +0/-0
  • 0
    • Просмотр профиля
    • http://alex-files.ru
Помогите разобраться со скриптом
« Ответ #8 : 15 Апреля 2005, 13:12:53 »
Если у тебя
Цитировать
Druggy:
Empty set

есть вероятность, что такой связки (логин + password(\'пароль\')) просто нету.

Ты как пользователя добавляешь?
Не все коту матрица.

Оффлайн Druggy

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 28
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Помогите разобраться со скриптом
« Ответ #9 : 15 Апреля 2005, 13:35:46 »
Цитировать
Croaker:
Ты как пользователя добавляешь?

INSERT INTO users(username, passwd)
VALUES(\'username\', password(\'password\'));
What isn\'t rememberd, never happened.
Memory is merely a record... you just need to rewrite that record.

Оффлайн Druggy

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 28
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Помогите разобраться со скриптом
« Ответ #10 : 15 Апреля 2005, 13:37:37 »
через MySQL монитор, через импорт .sql файла все темже MySQL монитором, могу из сценария создать... результат всегда один и тот же... блин.
What isn\'t rememberd, never happened.
Memory is merely a record... you just need to rewrite that record.

Оффлайн Croaker

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 927
  • +0/-0
  • 0
    • Просмотр профиля
    • http://alex-files.ru
Помогите разобраться со скриптом
« Ответ #11 : 15 Апреля 2005, 13:42:51 »
Druggy
Тогда попробуйте запрос детально разобрать.

SELECT * FROM users where username = "user";

Потом возьмите пароль user`а и руками введите такой запрос:

SELECT password(\'пароль user`а\');
Не все коту матрица.

Оффлайн Druggy

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 28
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Помогите разобраться со скриптом
« Ответ #12 : 15 Апреля 2005, 13:51:12 »
блин теперь он мне на запрос select * from users where username=\'name\' and passwd=password(\'pass\');
выдает следующее сообщение об ошибке:
ERROR 1267 (HY000): Illegal mix of collations (cp1251_general_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation \'=\'
What isn\'t rememberd, never happened.
Memory is merely a record... you just need to rewrite that record.

Оффлайн Croaker

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 927
  • +0/-0
  • 0
    • Просмотр профиля
    • http://alex-files.ru
Помогите разобраться со скриптом
« Ответ #13 : 15 Апреля 2005, 13:57:11 »
Ну дык вот тебе и ошибка. Данные в одной кодировке сравниваются с данными в другой.

http://lingvo.yandex.ru
Не все коту матрица.

Оффлайн Druggy

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 28
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Помогите разобраться со скриптом
« Ответ #14 : 15 Апреля 2005, 14:14:07 »
я понимаю. просто не знаю как это исправить.
как я понимаю данные которые ввожу всетаки находятся в кодировке cp1251_general_ci, IMPLICIT, а то что лежит в базе находится в кодировке latin1_swedish_ci,COERCIBLE, так ведь? И как все сделать чтобы в одной кодировке работало?
Блин вообще не понимаю уже ничего. сколько часов одну это херню делаю =))) крыша едет! )))
What isn\'t rememberd, never happened.
Memory is merely a record... you just need to rewrite that record.

 

Sitemap 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