Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите разобраться с авторизацией
 
 автор: _LG_   (30.12.2004 в 23:48)   письмо автору
 
 

Я где то нашёл скрипт авторизации на странице, и хотел в нём разобраться, но выдаются ошибки с надписью Parse error: syntax error, unexpected T_VARIABLE in D:\server\auth.php on line

Вот код:

<?php
$dbhost 
"localhost";
$dbname "test";
$dbuser "root";
$dbpasswd "666";
$dbcnx = @mysql_connect($dbhost,$dbuser,$dbpasswd);
$dbname "$PHP_AUTH_USER";
if(!isset(
$PHP_AUTH_USER))
   {
    
Header("WWW-Authenticate: Basic realm=\"Admin Center\"");
    
Header("HTTP/1.0 401 Unauthorized");
    exit();
   }
   else
    {
               
$password "$PHP_AUTH_PW";
        
$link mysql_connect($dbhost$dbuser$dbpasswd);
        
mysql_select_db($dbname);
            
$result=mysql_query("SELECT password FROM auth WHERE name=\ "$PHP_AUTH_USER\"");
            
$row=mysql_fetch_array($result);
             if (
$row==NULL)

       {
        
Header("WWW-Authenticate: Basic realm=\ "Admin Center\"");
        
Header("HTTP/1.0 401 Unauthorized");
        exit();
       }
       else
       {
        
$real_password="$row[password]";
        if (
$real_password!=$password)
        {
          
Header("WWW-Authenticate: Basic realm= \"Admin Center\"");
              
Header("HTTP/1.0 401 Unauthorized");
              exit();
        }
       }
     }
?>


Подскажите что не так и как сделать так чтобы скрипт работал
Заранее спасибо

   
 
 автор: cheops   (30.12.2004 в 23:53)   письмо автору
 
   для: _LG_   (30.12.2004 в 23:48)
 

Он вот так должен выглядеть
<?php 
  $dbhost 
"localhost"
  
$dbname "test"
  
$dbuser "root"
  
$dbpasswd "666"
  
$dbcnx = @mysql_connect($dbhost,$dbuser,$dbpasswd); 
  
$dbname "$PHP_AUTH_USER"
  if(!isset(
$PHP_AUTH_USER)) 
  { 
    
Header("WWW-Authenticate: Basic realm=\"Admin Center\""); 
    
Header("HTTP/1.0 401 Unauthorized"); 
    exit(); 
  } 
  else 
  { 
    
$password "$PHP_AUTH_PW"
    
$link mysql_connect($dbhost$dbuser$dbpasswd); 
    
mysql_select_db($dbname); 
    
$result=mysql_query("SELECT password FROM auth WHERE name=\"$PHP_AUTH_USER\""); 
    
$row=mysql_fetch_array($result); 
    if (
$row==NULL)     
    { 
      
Header("WWW-Authenticate: Basic realm=\"Admin Center\""); 
      
Header("HTTP/1.0 401 Unauthorized"); 
      exit(); 
    } 
    else             
    { 
      
$real_password="$row[password]"
      if (
$real_password!=$password
      { 
        
Header("WWW-Authenticate: Basic realm=\"Admin Center\""); 
        
Header("HTTP/1.0 401 Unauthorized"); 
        exit(); 
      } 
    } 
  } 
?>

   
 
 автор: _LG_   (30.12.2004 в 23:57)   письмо автору
 
   для: cheops   (30.12.2004 в 23:53)
 

Спасибо cheops!
Сейчас проверю

   
 
 автор: _LG_   (31.12.2004 в 00:00)   письмо автору
 
   для: cheops   (30.12.2004 в 23:53)
 

А...красава чувак! Спасибо тебе...заработало вроде

   
 
 автор: _LG_   (31.12.2004 в 00:13)   письмо автору
 
   для: cheops   (30.12.2004 в 23:53)
 

To cheops:
Форма для ввода пароля выскакивает, вот только он видимо не действует. Ввожу его форма заново вылазит. Может я опять чё то нахимичил, я хотел чтобы надпись выдавалась, я правильно сделал?

<?php
$dbhost 
"localhost";
$dbname "test";
$dbuser "root";
$dbpassword "666";
$dbcnx = @mysql_connect($dbhost,$dbuser,$dbpasswd);
$dbname "$PHP_AUTH_USER";
if(!isset(
$PHP_AUTH_USER))
   {
    
Header("WWW-Authenticate: Basic realm=\"Access denied\"");
    
Header("HTTP/1.0 401 Unauthorized");
    exit();
   }
else
    {
               
$password "$PHP_AUTH_PW";
        
$link mysql_connect($dbhost$dbuser$dbpassword);
        
mysql_select_db($dbname);
            
$result=mysql_query("SELECT password FROM auth WHERE name=\"$PHP_AUTH_USER\"");
            
$row=mysql_fetch_array($result);
        if (
$row==NULL)
       {
        
Header("WWW-Authenticate: Basic realm=\"Admin Center\"");
        
Header("HTTP/1.0 401 Unauthorized");
        exit();
       }
    else
       {
        
$real_password="$row[password]";
        if (
$real_password!=$password)
        {
            
Header("WWW-Authenticate: Basic realm=
                                \"Access denied\""
);
            
Header("HTTP/1.0 401 Unauthorized");
            exit();
        }
       }
     }
echo 
"Доступ разрешён";
?>

   
 
 автор: cheops   (31.12.2004 в 00:48)   письмо автору
 
   для: _LG_   (31.12.2004 в 00:13)
 

Хм... а пароль в таблице не шифрован? и правильно ли набирается (ну может регистр, раскладка не та)?

   
 
 автор: glsv (Дизайнер)   (31.12.2004 в 00:54)   письмо автору
 
   для: _LG_   (31.12.2004 в 00:13)
 

Вы тестируете на локальной машине? И php у Вас подключен как CGI?

<Directory "c:/php-5.0">
  Options ExecCGI
</Directory>
ScriptAlias "/__php_dir__/" "c:/php-5.0/"
Action application/x-httpd-php "/__php_dir__/php-cgi.exe"


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

LoadModule php5_module c:\php-5.0\php5apache2.dll 


На хостингах, как правило, php подключен как модуль.

   
 
 автор: _LG_   (31.12.2004 в 01:31)   письмо автору
 
   для: glsv (Дизайнер)   (31.12.2004 в 00:54)
 

Да действительно у меня php подключен как CGI.

А как его как модуль подключить? У меня он был как модуль подключен, но после переустановки всех программ, я не смог найти инфу про то как его подключить как модуль.

   
 
 автор: glsv (Дизайнер)   (31.12.2004 в 02:58)   письмо автору
 
   для: _LG_   (31.12.2004 в 01:31)
 

Подключение php производится в файле httpd.conf - это главный настроечный файл Apache
Какая у Вас версия Apache и PHP? Вот так подключается PHP5 на Apache2.

LoadModule php5_module c:\php-5.0\php5apache2.dll 


Разница между разными версиями сводится к разнице в названиях модулей. В Вашем httpd.conf наверняка такая строчка есть, но "заремаренная". Уберите с нее символ комментария #

А подкючение PHP, как CGI наоборот закомментарьте.

#Directory "c:/php-5.0"> 
#  Options ExecCGI 
#</Directory> 
#ScriptAlias "/__php_dir__/" "c:/php-5.0/" 
#Action application/x-httpd-php "/__php_dir__/php-cgi.exe" 

   
 
 автор: _LG_   (31.12.2004 в 17:08)   письмо автору
 
   для: glsv (Дизайнер)   (31.12.2004 в 02:58)
 

Подключил я PHP как модуль, спасибо за инфу, но он после подключения вот что выдал

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in D:\server\auth.php on line 20

Warning: Cannot modify header information - headers already sent by (output started at D:\server\auth.php:20) in D:\server\auth.php on line 23

Warning: Cannot modify header information - headers already sent by (output started at D:\server\auth.php:20) in D:\server\auth.php on line 24

Что это значит? Подскажите.....

Вот код:


<?php
$dbhost 
"localhost";
$dbname "test";
$dbuser "root";
$dbpassword "666";
$dbcnx = @mysql_connect($dbhost,$dbuser,$dbpasswd);
$dbname "$PHP_AUTH_USER";
if(!isset(
$PHP_AUTH_USER))
   {
    
Header("WWW-Authenticate: Basic realm=\"Access denied\"");
    
Header("HTTP/1.0 401 Unauthorized");
    exit();
   }
else
    {
               
$password "$PHP_AUTH_PW";
        
$link mysql_connect($dbhost$dbuser$dbpassword);
        
mysql_select_db($dbname);
            
$result=mysql_query("SELECT password FROM auth WHERE name=\"$PHP_AUTH_USER\"");
            
$row=mysql_fetch_array($result);
        if (
$row==NULL)
       {
        
Header("WWW-Authenticate: Basic realm=\"Admin Center\"");
        
Header("HTTP/1.0 401 Unauthorized");
        exit();
       }
    else
       {
        
$real_password="$row[password]";
        if (
$real_password!=$password)
        {
            
Header("WWW-Authenticate: Basic realm=
                                \"Access denied\""
);
            
Header("HTTP/1.0 401 Unauthorized");
            exit();
        }
       }
     }
echo 
"Доступ разрешён! ";
?>

   
 
 автор: cheops   (31.12.2004 в 17:44)   письмо автору
 
   для: _LG_   (31.12.2004 в 17:08)
 

Три предупреждения, первое о том, что функции mysql_fetch_array передан не верный дескриптор ответа базы данных - так бывает когда имеется ошибка в SQL-запросе, а два вторых следствие первого - после того, как что-либо выводится в окно браузера заголовки отослать не получится. Попробуйте исправить строки
<?php
            $result
=mysql_query("SELECT password FROM auth WHERE name=\"$PHP_AUTH_USER\""); 
            
$row=mysql_fetch_array($result); 
?>

на
<?php
            $result
=mysql_query("SELECT password FROM auth WHERE name=\"$PHP_AUTH_USER\""); 
            if(!
$result) exit(mysql_error());
            
$row=mysql_fetch_array($result); 
?>

чтобы посмотреть что за ошибка...

   
 
 автор: _LG_   (31.12.2004 в 18:00)   письмо автору
 
   для: cheops   (31.12.2004 в 17:44)
 

Хех...теперь после исправления вот что выдаёт:

No Database Selected

   
 
 автор: cheops   (31.12.2004 в 18:34)   письмо автору
 
   для: _LG_   (31.12.2004 в 18:00)
 

А да, действительно не выбрана... А где расположена таблица с пользователями в базе test? Следует после строки:
<?php
  $dbcnx 
= @mysql_connect($dbhost,$dbuser,$dbpasswd); 
?>

дописать проверку и выбор базы данных:
<?php
  
if (!$dbcnx)
  {
    exit(
"В настоящий момент сервер базы данных не доступен,
             поэтому корректное отображение страницы невозможно."
);
  }
  
// Выбираем базу данных
  
if (! @mysql_select_db($dbname,$dbcnx))
  {
    exit(
"В настоящий момент база данных не доступна, поэтому
              корректное отображение страницы невозможно."
);
  }
?>

   
 
 автор: _LG_   (31.12.2004 в 18:50)   письмо автору
 
   для: cheops   (31.12.2004 в 18:34)
 

Мне теперь после исправлений выдалось вот что --- В настоящий момент сервер базы данных не доступен, поэтому корректное отображение страницы невозможно.

Вот структура моей базы:


# MySQL-Front 3.0  (Build 30.1)


# Host: ADMIN    Database: test
# ------------------------------------------------------
# Server version 3.23.36

CREATE DATABASE 'test'
USE 'test';

#
# Table structure for table user
#

CREATE TABLE 'user' (
  'Id' int(6) unsigned NOT NULL auto_increment,
  'name' varchar(10) NOT NULL default '',
  'password' varchar(10) NOT NULL default '',
  PRIMARY KEY  ('Id')
) TYPE=MyISAM;


#
# Dumping data for table user
#

INSERT INTO 'user' VALUES (1,'dmitry','355949');
INSERT INTO 'user' VALUES (2,'lg','666');

   
 
 автор: cheops   (31.12.2004 в 19:02)   письмо автору
 
   для: _LG_   (31.12.2004 в 18:50)
 

Хм... а сам сервер MySQL на машине запущен? Т.е. имеется ли в процессах что-то вроде mysqld-nt.exe?

http://www.softtime.ru/info/articlephp.php?id_article=24

   
 
 автор: _LG_   (31.12.2004 в 19:06)   письмо автору
 
   для: cheops   (31.12.2004 в 19:02)
 

В процесса mysqld-nt нету, зато есть mysql-opt целых два.....ой а хотя и mysqld-nt загружен и работает просто великолепно.

   
 
 автор: cheops   (31.12.2004 в 19:37)   письмо автору
 
   для: _LG_   (31.12.2004 в 19:06)
 

Хм... посмотрите тест в статье по ссылке - он работает?

http://www.softtime.ru/info/articlephp.php?id_article=24

   
 
 автор: _LG_   (31.12.2004 в 19:42)   письмо автору
 
   для: cheops   (31.12.2004 в 19:37)
 

Это где выдаётся версия Муксуна чтоли?
Да работает, моя версия 3.23.36

   
 
 автор: cheops   (31.12.2004 в 19:48)   письмо автору
 
   для: _LG_   (31.12.2004 в 19:42)
 

Хм... т.е. один скрипт считает, что он соединяется с сервером базы данных, а другой считает, что нет... значите где-то опечатка должна быть... Скопируйте в буфер обмена дескриптор $dbcnx и замените им все дескрипторы - чтобы не было опечаток и русских букв в теле переменной.

   
 
 автор: _LG_   (31.12.2004 в 20:33)   письмо автору
 
   для: cheops   (31.12.2004 в 19:48)
 

Ок, сейчас сделаю

   
 
 автор: _LG_   (31.12.2004 в 20:38)   письмо автору
 
   для: _LG_   (31.12.2004 в 20:33)
 

Безрезультатно, всё равно выдаёт надпись [В настоящий момент сервер базы данных не доступен, поэтому корректное отображение страницы невозможно.]

Вот ещё раз листинг кода:

<?php
$dbhost 
"localhost";
$dbname "test";
$dbuser "root";
$dbpassword "kfvth275";
$dbcnx = @mysql_connect($dbhost,$dbuser,$dbpasswd);
$dbname "$PHP_AUTH_USER";
if (!
$dbcnx)
  {
    exit(
"В настоящий момент сервер базы данных не доступен, поэтому корректное отображение страницы невозможно."
  
}
  if (!@
mysql_select_db($dbname,$dbcnx))
  {
    exit(
"В настоящий момент база данных недоступна, поэтому коректное отображение страницы невозможно.");
  }
if(!isset(
$PHP_AUTH_USER))
   {
    
Header("WWW-Authenticate: Basic realm=\"Access denied\"");
    
Header("HTTP/1.0 401 Unauthorized");
    exit();
   }
else
    {
               
$password "$PHP_AUTH_PW";
        
$link mysql_connect($dbhost$dbuser$dbpassword);
        
mysql_select_db($dbname);
            
$result=mysql_query("SELECT password FROM auth WHERE name=\"$PHP_AUTH_USER\"");
            if(!
$result) exit(mysql_error());
            
$row=mysql_fetch_array($result);
        if (
$row==NULL)
       {
        
Header("WWW-Authenticate: Basic realm=\"Admin Center\"");
        
Header("HTTP/1.0 401 Unauthorized");
        exit();
       }
    else
       {
        
$real_password="$row[password]";
        if (
$real_password!=$password)
        {
            
Header("WWW-Authenticate: Basic realm=
                                \"Access denied\""
);
            
Header("HTTP/1.0 401 Unauthorized");
            exit();
        }
       }
     }
?>

   
 
 автор: cheops   (31.12.2004 в 20:51)   письмо автору
 
   для: _LG_   (31.12.2004 в 20:38)
 

Хм... в скрипте имя базы данных
<?php
  $dbname 
"test"
?>

Переопределяется в строке
<?php
[code]<?php
  $dbname 
"$PHP_AUTH_USER";
?>
?>[/code]
Так надо или всё-таки это ошибка?

   
 
 автор: _LG_   (31.12.2004 в 20:58)   письмо автору
 
   для: _LG_   (30.12.2004 в 23:48)
 

Видимо я ошибся, точно.....
Я сам дописывал вырхнюю часть где

$dbhost = "localhost";
$dbname = "test";
$dbuser = "root";
$dbpassword = "kfvth275";
$dbcnx = @mysql_connect($dbhost,$dbuser,$dbpasswd);


Сейчас поправлю и скажу что получилось

   
 
 автор: _LG_   (31.12.2004 в 21:08)   письмо автору
 
   для: _LG_   (31.12.2004 в 20:58)
 

Блин, торможу я....мозг совем не работает
Помоги мне убрать какую нибудь переменную $dbname и чтобы это на коде не отразилось

   
 
 автор: cheops   (31.12.2004 в 21:18)   письмо автору
 
   для: _LG_   (31.12.2004 в 21:08)
 

Хм... новую тему заведу... а то это длинная и выгружать неудобно, а линейный вариант форума я не люблю :))) Тема расположена по URL:

http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=1359

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования