Forum Webscript.Ru

Программирование => PHP => Тема начата: Pearman от 02 Марта 2004, 19:37:41

Название: Pear
Отправлено: Pearman от 02 Марта 2004, 19:37:41
Привет всем!
Кто нибудь использует Pear, Auth?
Есть проблема, почему то не хочет аутентефецироваться. Говорит -3, то есть не правильный логин, пароль хотя все правильно. Pear стоит 1.3 последний, Auth тоже. Что может быть не пойму
Название: Pear
Отправлено: Макс от 02 Марта 2004, 21:49:08
код покажи
Название: Pear
Отправлено: Меняздесьдавнонет от 02 Марта 2004, 22:12:11
господи, что там, в авторизации, такого, чтобы отдельный модуль городить?
Название: Pear
Отправлено: Pearman от 03 Марта 2004, 12:29:22
require_once "Auth/Auth.php";
function loginFunction()
{
    echo "
";
    echo "
";
    echo "";
    echo "";
    echo "
";
}

$params = array(
            "dsn" = "mysql://$User:$Pwd@$Host/$DBName";
            "table" => "autha",
            "usernamecol" => "username",
            "passwordcol" => "password"
            );

$a = new Auth("DB", $params, "loginFunction");
$a->start();

if ($a->getAuth()) {print ("logged in");} else {
print ("not logged in");}

if ($a->getStatus()) {print ($a->getStatus());}
?>

для RomikChef
А если авторизуется не один пользователь, а список пользователей, и у них разные права и разные страници?
Название: Pear
Отправлено: Макс от 03 Марта 2004, 12:58:59
после
$a->start();
добавь
print_r($_SESSION);

что-нибудь выводит ?
Название: Pear
Отправлено: aka Pearman от 05 Марта 2004, 13:08:36
Выводит!
Array ();
Название: Pear
Отправлено: Макс от 05 Марта 2004, 13:20:40
это он выводит после того как ты ввел логин и пароль и нажал сабмит ?
Название: Pear
Отправлено: aka Pearman от 05 Марта 2004, 13:22:39
Да, после submit();
Название: Pear
Отправлено: aka Pearman от 05 Марта 2004, 13:26:44
Хотя и сабмитом и без одна фигня Array();
Название: Pear
Отправлено: Макс от 05 Марта 2004, 13:30:10
так для начала включи вывод ошибок:
error_reporting(E_ALL);
ini_set(\'display_errors\', \'On\');
после этого кода ошибки выводятся ?

Далее зайди в /Auth/Container/DB.php
и найди там строку:        $query = sprintf("SELECT %s FROM %s
                             WHERE %s = \'%s\'",
                         $this->options[\'usernamecol\'] . ", "
                         . $this->options[\'passwordcol\']
                         . $cols,
                         $this->options[\'table\'],
                         $this->options[\'usernamecol\'],
                         $username
                         );
 (метод fetchData())
напиши после этой строки
die ($query);
затем выполни скрипт, ввведи логин/пароль нажми сабмит и посмотри выводится ли запрос ? если да, то выполни этот запрос через пхпМайАдмин. Находятся ли строки по этому запросу ?
Название: Pear
Отправлено: aka Pearman от 05 Марта 2004, 13:35:49
Ошибок после
error_reporting(E_ALL);
ini_set(\'display_errors\', \'On\');
никаких НЕТ!

А вот с пунктом номер 2 сложнее так как весь pear я не вижу, он у провайдера, кстати может быть поэтому проблемы?
Название: Pear
Отправлено: aka Pearman от 05 Марта 2004, 13:40:29
То есть я конечно могу позвонить и попросить всунуть в DB эту строчку, это не проблема. Вот только может быть я pear скрипты как нибудь не так поставил, ведь получается что они как бы общие у всех.
Название: Pear
Отправлено: Макс от 05 Марта 2004, 13:48:20
aka Pearman
я всегда все классы (pear в том числе) заливаю себе в какую-то папку (/classes например). И в .htaccess прописываю
php_value include_path ".:/path/to/classes/"
таким образом я от хостера не завишу. Если что - могу и классы сам подправить.

Попробуй сделать вместо $a->start():

if ($_SERVER[\'REQUEST_METHOD\'] == \'POST\') {
  $a->assignData();
   session_start();
  $res = $a->storage->fetchData($a->username, $a->password);
  echo "
";
  print_r($res);
  echo "
";
  exit;
}

хотя все-таки лучше классы в свою папку закачать (ИМХО)
Название: Pear
Отправлено: Макс от 05 Марта 2004, 13:53:14
aka Pearman
а локально (на своем компе) у тебя этот код работает ?
Название: Pear
Отправлено: aka Pearman от 05 Марта 2004, 13:53:20
Вот что я увидел!
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /usr/www/satnam/www.satnam.ru/htdocs/test/auth.php:3) in /usr/www/satnam/www.satnam.ru/htdocs/test/auth.php on line 38

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /usr/www/satnam/www.satnam.ru/htdocs/test/auth.php:3) in /usr/www/satnam/www.satnam.ru/htdocs/test/auth.php on line 38

Скажи пожайлуста, а если ставить в свою папку, то каким образом просто распоковывать tar туда или все таки нужно как-то типо pear install в такую ту директоррию??
Название: Pear
Отправлено: Макс от 05 Марта 2004, 13:55:15
так, ясно
http://faq.phpclub.net/headers - читай
Название: Pear
Отправлено: aka Pearman от 05 Марта 2004, 13:56:32
Нет не работает, что значит локально? На сервере? Он у провайдера!
Название: Pear
Отправлено: Макс от 05 Марта 2004, 13:58:41
обычно снчало пишут код, тестируют его на своем компе а потом уже закачивают на сервер.
Но ты все-таки прочитай статью, ссылку на которую я дал
Название: Pear
Отправлено: aka Pearman от 05 Марта 2004, 14:09:02
Переместил. После прочтения статьи код выглядит так:

require_once "Auth/Auth.php";
$a = new Auth("DB", $params, "loginFunction");
$a->start();
if ($a->getAuth()) {print ("logged in");} else {
print ("not logged in");}

if ($a->getStatus()) {print ($a->getStatus());}

error_reporting(E_ALL);
ini_set(\'display_errors\', \'On\');

function loginFunction()
{
    /**
     * Change the HTML output so that it fits to your
     * application.
     */
    echo "
";
    echo "
";
    echo "";
    echo "";
    echo "
";
}

$params = array(
            "dsn" => "mysql://$pass:$user@localhost/$dbname",
            "table" => "autha",
            "usernamecol" => "username",
            "passwordcol" => "password"
            );

print_r($_SESSION);

?>
Название: Pear
Отправлено: Макс от 05 Марта 2004, 14:16:13
проблема осталась ?
Название: Pear
Отправлено: aka Pearman от 05 Марта 2004, 14:18:09
Да я убрал, все знаки и вот что получил:

pear_error Object
(
    [error_message_prefix] =>
    [mode] => 1
    [level] => 1024
    [code] => 41
    [message] => The given dsn was not valid in file /usr/local/lib/php/Auth/Container/DB.php at line 101
    [userinfo] =>
    [backtrace] => Array
        (
           
                (
                    [file] => /usr/local/lib/php/PEAR.php
                    [line] => 534
                    [function] => pear_error
                    [class] => pear_error
                    [type] => ->
                    [args] => Array
                        (
                            [file] => /usr/local/lib/php/Auth/Container/DB.php
                    [line] => 229
                    [function] => raiseerror
                    [class] => pear
                    [type] => ::
                    [args] => Array
                        (
                            [file] => /usr/www/satnam/www.satnam.ru/htdocs/test/auth.php
                    [line] => 7
                    [function] => fetchdata
                    [class] => auth_container_db
                    [type] => ->
                    [args] => Array
                        (
                            [callback] =>
)
Название: Pear
Отправлено: Макс от 05 Марта 2004, 14:20:19
Вот в чем ошибка:
Цитировать
The given dsn was not valid in

неправильные параметры для доступа к СУБД
Название: Pear
Отправлено: aka Pearman от 05 Марта 2004, 14:25:20
Что это может значить в моем случае?
То что они правильные я уверен, значит если perar стоит непосредственно у провайдера то значит в dns будет не localhost? А возможно что то другое? И все же как поставить классы Pear себе? Просто распоковать в папку и прописать .httacess или нужно инсталировать с путями типо: pear install Auth путь??
Название: Pear
Отправлено: Макс от 05 Марта 2004, 14:38:09
Цитировать
aka Pearman:
"dsn" => "mysql://$pass:$user@localhost/$dbname",

  "dsn" => "mysql://$user:$pass@localhost/$dbname",
Название: Pear
Отправлено: aka Pearman от 05 Марта 2004, 14:42:56
Ну да user:pass я просто их на переменные меняю чтобы в форуме не светить, прсото при смене ошибся. В коде все так и стоит, только не понятно что там у тебя за скобка квадратная в конце. Так как все таки стаить pear локально?
Название: Pear
Отправлено: Макс от 05 Марта 2004, 15:02:11
напиши тако код:

error_reporting(E_ALL);
ini_set(\'display_errors\', \'On\');

$conn = mysql_connect("localhost", $user,$pass) or die ("Can\'t connect to mysql");
mysql_select_db($dbname, $conn)
echo mysql_error();
выполни этот код.
Ошибки выводятся ?

насчет установки pear http://www.php4you.kiev.ua/faq/section22.html#60
Название: Pear
Отправлено: aka Pearman от 05 Марта 2004, 15:11:01
Да нет же, у меня другие не Pear мои личные скрипты нормально подключаются к базе и  работают.
То ли из за того что Pear стоит где-то там ошибка, я пробовал протестить DB и он говорит что подключается!!!

НЕТ все таки она крутится, DB подключается к БД без ошибок!

 с этими параметрами вот толко почему то отказывается работать DB_PORTABILITY_ALL??? DB Error: unknown option portability
My_SQL ver 3.3.4 помойму
Название: Pear
Отправлено: Макс от 05 Марта 2004, 15:30:57
Цитировать
aka Pearman:
и он говорит что подключается с этими параметрами

чесно говоря я pear::db не очень знаю (предпочитаю adodb). Но все-таки как он говорит что подключается ?
Запрос пробовал выполнить ?
Название: Pear
Отправлено: Макс от 05 Марта 2004, 15:34:10
упс, когда писал - не видел твоих последних правок.

Посмотри что выводит:

$dsn = DB::parseDSN("mysql://$user:$pass@localhost/$dbname");
echo "
";
print_r($dsn);
echo "
";
Название: Pear
Отправлено: aka Pearman от 05 Марта 2004, 16:11:24
В общем DB работает (проверил) :

$db =& DB::connect($dsn);
$res =& $db->query("SELECT * FROM autha");
while ($row =& $res->fetchRow()) {
    $id = $row[0]; $pass=$row[1]; print ("$id,$pass");
}

, а Auth не работает с теми же параметрами, говорит что не тот $dsn
Название: Pear
Отправлено: Макс от 06 Марта 2004, 14:46:27
aka Pearman
ты ведь массив $params объявляешь уже после того как коннект делается. Перенеси его вверх:
$params = array(
"dsn" => "mysql://$pass:$user@localhost/$dbname",
"table" => "autha",
"usernamecol" => "username",
"passwordcol" => "password"
);
require_once "Auth/Auth.php";
$a = new Auth("DB", $params, "loginFunction");
.....
Название: Pear
Отправлено: Pearman от 15 Марта 2004, 17:52:53
Блин, так и не работает Auth, а DB читает из таблици все правильно! Вот последний код Auth:

require_once "Auth/Auth.php";
$params = array(
"dsn" => "mysql://траливали",
"table" => "autha",
"usernamecol" => "username",
"passwordcol" => "password");
function loginFunction(){echo "
";
echo "
";
echo "";
echo "";
echo "
";}
$a = new Auth("DB", $params, "loginFunction");
$a->start();
if ($a->getStatus()) {print ($a->getStatus());}?>
Название: Pear
Отправлено: Макс от 15 Марта 2004, 21:13:45
Pearman
что выводит $a = new Auth("DB", $params, "loginFunction");
echo "
";
print_r($a->_storage);
echo "
"; ?
Название: Pear
Отправлено: aka Pearman от 16 Марта 2004, 13:13:00
Ничего, совсем ничего не выводит!
Я имею ввиду предыдущий код:)
Название: Pear
Отправлено: Макс от 16 Марта 2004, 14:56:32
1. http://detail.phpclub.net/article/2002-11-01 - посмотри в статье, как пишутся обработчики ошибок под PEAR и сделай примерно такой же как в статье. Выполни код и посмотри, есть ли ошибка.

2. наверное я непонятно выразился, я имел ввиду добавить в ктвой код строки:
echo "
"; 
print_r($a->_storage);
echo "
";
Попробуй добавить их сначло после инициализации объяекта и потом после $a->start();
Название: Pear
Отправлено: aka Pearman от 16 Марта 2004, 15:12:59
Понятно! что в код нужно было вставить, добавлял и туда и сюда, и в первом и втором случае на эту строчку он ни как не реагирует. Выодит только status Auth -3!
Название: Pear
Отправлено: Макс от 16 Марта 2004, 15:29:01
попробуй так:

$dsn = "mysql://..........."; // сам напишешь
require_once(\'DB.php\');
$db =& DB::connect($dsn);
require_once "Auth/Auth.php";
$params = array(
"dsn" => $db, // !!!!
"table" => "autha",
"usernamecol" => "username",
"passwordcol" => "password");
function loginFunction(){echo "
";
echo "
";
echo "";
echo "";
echo "
";}
$a = new Auth("DB", $params, "loginFunction");
$a->start();
if ($a->getStatus()) {print ($a->getStatus());}?>
Название: Pear
Отправлено: aka Pearman от 16 Марта 2004, 15:39:55
-3
Название: Pear
Отправлено: Макс от 16 Марта 2004, 17:27:12
-3 - это неправильный логин

print_r($a->_storage) что-то выводит ?
Название: Pear
Отправлено: Макс от 16 Марта 2004, 17:30:29
немного поспешил -3 означает что запрос не нашел пользователя с такими данными. То есть необязательно что именно логин неверный
Название: Pear
Отправлено: Pearman от 17 Марта 2004, 12:37:20
print_r($a->_storage) нет не выводит, как я уже говорил абсолютно ничего, none, nothing!
Название: Pear
Отправлено: Макс от 17 Марта 2004, 13:58:07
Pearman
знаешь, за это время можно было бы себе куда-гибудь в папку уставновить нужные pear-классы и писать/отлаживать скрипты, имея возможность их редактировать
Название: Pear
Отправлено: Pearman от 25 Марта 2004, 14:00:22
Всем спасибо!
Поставил локально, посмотрел код, пароль в md5 8), а я его прямо как есть в базу записал, теперь все работает :)))