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

Форум PHP

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

 

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

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

тема: скрипт регистрации пользователя...
 
 автор: LimP   (11.08.2004 в 14:12)   письмо автору
 
 

Вот, я создал новую тему, теперь будем обсуждать новые вопросы тут, помогите, я пытаюсь реализовать форму регистрации пользователя,а после введения имени и пароля и нажатия 'регистрация', у меня пишет "регистрация невозможна ", но он не должен вроде это писать, короче помогите отладить скрипт...
вот это auth.php :

<?
$dblocation 
"127.0.0.1";
$dbname "local";
$dbuser "root";
$dbpasswd "";

session_start();

if (isset(
$HTTP_POST_VARS['userid']) &&
isset(
$HTTP_POST_VARS['password']))
{
 
$userid $HTTP_POST_VARS['userid'];
 
$password $HTTP_POST_VARS['password'];
 
$db_connect mysql_connect($dblocation,$dbuser,$dbpasswd);
 
mysql_select_db('auth',$db_connect);
 
$query "select * from auth where name='".$userid."'
 and pass=password('
$password')";
 
$result mysql_query($query,$db_connect);
 if (
$result)
 {
  
$HTTP_SESSIoN_VARS['valid_user'] = $userid;
 }
}
?>
<html>
<body>
<h1>Страница Регистрации</h1>
<?
if (isset($HTTP_SESSION_VARS['valid_user']))
{
 echo 
'Вы зарегестрированы как '.$HTTP_SESSION_VARS['valid_user'].'<br />';
 echo 
'<a href="destroy.php">Exit</a><br />';
}
else
{
 if(isset(
$userid))
 {
  echo (
"Регистрация невозможна!");
 }
?>
<form method="post" action="auth.php">
<table>
<tr><td>Имя:</td>
<td><input type="text" name="userid"></td></tr>
<tr><td>Пароль:</td>
<td><input type="password" name="password"></td></tr>
<td><td colspan=2><input type=submit value='Зарегестрировать'>
</td></tr>
</table></form>
<?
}
?>
<a href="members_only.php">Только для зарегестрированных пользователей</a>
</body>
</html>

   
 
 автор: cheops   (11.08.2004 в 14:42)   письмо автору
 
   для: LimP   (11.08.2004 в 14:12)
 

Т.е. у вас создана база данных auth, а в ней таблица auth. Проверить созданы ли база данных и таблицы можно при помощи запросов в клиенте mysql:

show databases; -- среди баз данных должна быть auth
use auth;
show tables; -- среди таблиц должна быть auth

Для того, чтобы тестировать код - было бы неплохо - если бы вы привели структуру вашей таблицы auth.
Давайте проверим последовательно всё на каждом из этапов, изменив скрипт следующим образом.
<? 
$dblocation 
"127.0.0.1"
$dbname "test"
$dbuser "root"
$dbpasswd ""

session_start(); 

if (isset(
$HTTP_POST_VARS['userid']) && 
isset(
$HTTP_POST_VARS['password'])) 

  
$userid $HTTP_POST_VARS['userid']; 
  
$password $HTTP_POST_VARS['password']; 
  
// Устанавливаем соединение с сервером
  
$db_connect = @mysql_connect($dblocation,$dbuser,$dbpasswd);
  if (!
$db_connect)
  {
    echo( 
"<P>В настоящий момент сервер
              базы данных не доступен,
              поэтому корректное отображение
              страницы невозможно.</P>" 
);
    
mysql_error();
    exit();
  }
  
// Выбираем базу данных auth
  
if (! @mysql_select_db('auth',$db_connect) ) {
    echo( 
"<P>В настоящий момент база данных
              auth не доступна, поэтому корректное
              отображение страницы невозможно.</P>" 
);
    
mysql_error();
    exit();
  }

 
$query "select * from auth
           where name='"
.$userid."' and
                 pass=password('
$password')"
 
$result mysql_query($query,$db_connect); 
 if (
$result
 { 
   if(
mysq_num_rows($result)>0)
   {
     
$HTTP_SESSION_VARS['valid_user'] = $userid
   }
   else
   {
    echo( 
"<P>Странно, но в таблице нет записей
              удовлетворяющих запросу</P>" 
);
    
mysql_error();
    exit();
   }
 }
 else
 {
    echo( 
"<P>Ошибка в SQL-запросе</P>" );
    
mysql_error();
    exit();
 }

?> 
<html> 
<body> 
<h1>Страница Регистрации</h1> 
<? 
if (isset($HTTP_SESSION_VARS['valid_user'])) 

 echo 
'Вы зарегестрированы как '.$HTTP_SESSION_VARS['valid_user'].'<br />'
 echo 
'<a href="destroy.php">Exit</a><br />'

else 

 if(isset(
$userid)) 
 { 
  echo (
"Регистрация невозможна!"); 
 } 
?> 
<form method="post" action="auth.php"> 
<table> 
<tr><td>Имя:</td> 
<td><input type="text" name="userid"></td></tr> 
<tr><td>Пароль:</td> 
<td><input type="password" name="password"></td></tr> 
<td><td colspan=2><input type=submit value='Зарегестрировать'> 
</td></tr> 
</table></form> 
<? 

?> 
<a href="members_only.php">Только для зарегестрированных пользователей</a> 
</body> 
</html>

   
 
 автор: LimP   (11.08.2004 в 19:31)   письмо автору
 
   для: cheops   (11.08.2004 в 14:42)
 

прописал я указанный вами скрипт(скопировал)но браузер выдает ошибку

Parse error: parse error, unexpected T_VARIABLE in C:\www\scripts\auth\auth.php on line 2

при том я один в один скопировал скрипт,приведенный выше вами...

   
 
 автор: cheops   (11.08.2004 в 19:38)   письмо автору
2.2 Кб
 
   для: LimP   (11.08.2004 в 19:31)
 

Переименуйте файл в аттаче в auth.php.

PS Странно, я скопировал - у меня всё нормально... Вроде нечему там сбоить во второй строке...

   
 
 автор: LimP   (11.08.2004 в 19:45)   письмо автору
 
   для: cheops   (11.08.2004 в 19:38)
 

все,сам скрипт заработал,после заполнения имени и пароля,выводит

Странно, но в таблице нет записей удовлетворяющих запросу

   
 
 автор: LimP   (11.08.2004 в 19:56)   письмо автору
 
   для: LimP   (11.08.2004 в 19:45)
 

кстати,я вот вам информацию по моей датабейз,все там вроде создано,все таблицы есть,я принтскрин вложил в это сообщение

   
 
 автор: cheops   (11.08.2004 в 21:02)   письмо автору
 
   для: LimP   (11.08.2004 в 19:56)
 

А меня пускает... Запись создаёте с использованием функции PASSWORD?
INSERT INTO auth VALUES ('LimP',PASSWORD('password'))

   
 
 автор: LimP   (11.08.2004 в 21:30)   письмо автору
 
   для: cheops   (11.08.2004 в 21:02)
 

вы наверное меня не так поняли,я создаю форму,чтобы пользователи могли ввести свое имя и пароль и их данный записались в мускул...пример из вашей книги(раздел сеансовые функции,работа с cookies)...кстати я кажется понял где ошибка,тока не могу ее исправить,вот вы мне дали sql-запрос(ваше последнее сообщение),я его прописал,после этого скрипт сработал,написол,мол вы зарегестрированы как LimP и пароль там мой,который я вводил,так вот если я ввожу другой пароль и другое имя,он мне пишет

Странно, но в таблице нет записей удовлетворяющих запросу

вот,так ошибка по-моему в том,что он не записывает новые имена в mysql...помогите исправить(опираясь на приведенный вами скрипт(ну самый первый))

   
 
 автор: cheops   (11.08.2004 в 22:04)   письмо автору
 
   для: LimP   (11.08.2004 в 21:30)
 

Понятно, но тогда следует использовать SQL-оператор INSERT, который добавит запись в таблицу
<?php
 $query 
"INSERT INTO auth VALUES ('".$userid."',
                                    password('
$password')";  
?>

Но следует следить, за тем чтобы пользоваетль не мог зарегистрироваться с уже существующим ником...

PS Тут в соседней ветке идёт дискуссия по поводу проверки уже существующих пользователей...

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

   
 
 автор: LimP   (11.08.2004 в 23:00)   письмо автору
 
   для: cheops   (11.08.2004 в 22:04)
 

так вот помогите,я переписал скриптик,сначала он подключается к мускулу,выявляет там все ошибки если есть,затем проверяет,если естьв базе данных такой пользователь с введенным логином,то пишет,что такой пользователь существует,если такого не существует,то он преспокойненько добавляет его в базу данных...вот сам скрипт,тока помогите его отладить,мне браузер пишет ошибку в строке 31...

<?  
$dblocation 
"127.0.0.1";  
$dbname "test";  
$dbuser "root";  
$dbpasswd "";  
session_start();  
if (isset(
$HTTP_POST_VARS['userid']) &&  
isset(
$HTTP_POST_VARS['password']))  
{  
  
$userid $HTTP_POST_VARS['userid'];  
  
$password $HTTP_POST_VARS['password'];  
  
// Устанавливаем соединение с сервером 
  
$db_connect = @mysql_connect($dblocation,$dbuser,$dbpasswd); 
  if (!
$db_connect
  { 
    echo( 
"<P>В настоящий момент сервер 
              базы данных не доступен, 
              поэтому корректное отображение 
              страницы невозможно.</P>" 
); 
    
mysql_error(); 
    exit(); 
  } 
  
// Выбираем базу данных auth 
  
if (! @mysql_select_db('auth',$db_connect) ) { 
    echo( 
"<P>В настоящий момент база данных 
              auth не доступна, поэтому корректное 
              отображение страницы невозможно.</P>" 
); 
    
mysql_error(); 
    exit(); 
  } 
   
$test 
= mysql_query ("select * from auth where user='$userid'") ;  
if 
(!$test)  

    echo "Ошибка при выполнении запроса"
    exit(); 

if(
mysql_num_rows($test)>0)  
{  
   echo 
"<br>Такой юзер уже существует!" . "<br>";  
}  
else 
{
  
   echo 
"<br>Такого юзера НЕТ!" . "<br>";  
}  
$request mysql_query ("insert into users (password, login) values ('$_REQUEST[parol]', '$_REQUEST[login]') "); 
if (!
$request){ 
   echo mysql_error () . "<br>" 
   exit () ; 

echo    "Ваши данные!" "<br>" 
         "Логин: " "$_REQUEST[login]"<br>" 
         "Пароль: " "$_REQUEST[parol]"<br>" 

?> 
?>  
<html> 
<body> 
<h1>Страница Регистрации</h1> 
<form method="post" action="auth.php"> 
<table> 
<tr><td>Имя:</td> 
<td><input type="text" name="userid"></td></tr> 
<tr><td>Пароль:</td> 
<td><input type="password" name="password"></td></tr> 
<td><td colspan=2><input type=submit value='Зарегестрировать'> 
</td></tr> 
</table></form> 
<?  
}  
?>  
<a href="members_only.php">Только для зарегестрированных пользователей</a> 
</body> 
</html> 

   
 
 автор: cheops   (11.08.2004 в 23:47)   письмо автору
 
   для: LimP   (11.08.2004 в 23:00)
 

Перед формой два тега ?> а после формы
<?   
}   
?>

тоже не понятно к чему относится - по моему лишняя скобка...

   
 
 автор: LimP   (12.08.2004 в 00:38)   письмо автору
 
   для: cheops   (11.08.2004 в 23:47)
 

да это косметические ошибки,вы посмотрите пожалуйста на то,что я задумал от этого скрипта,что должно получиться,проверьте,где в скрипте я допустил ошибки...

   
 
 автор: cheops   (12.08.2004 в 01:19)   письмо автору
 
   для: LimP   (12.08.2004 в 00:38)
 

ну... пожалуй в строке 31 посмотрите внимательнее на SQL-запрос... $userid - ведь эта переменная будет установлена только при включённой директиве register_globals...
Ещё у вас же в таблице поля называются password, login, а в запросе
select * from auth where user='$userid'

у вас поле называется user...

   
 
 автор: LimP   (12.08.2004 в 12:19)   письмо автору
 
   для: cheops   (12.08.2004 в 01:19)
 

я вот как переписал,а он мне ошибку выдает,помогите,как правильно переписать???

Parse error: parse error, unexpected T_STRING in C:\www\scripts\auth\auth.php on line 11

<?
$dblocation 
"127.0.0.1";
$dbname "local";
$dbuser "root";
$dbpasswd "";

session_start();

 
$db_connect mysql_connect($dblocation,$dbuser,$dbpasswd);
 
mysql_select_db('auth',$db_connect);
 
$test = mysql_query ("select * from auth where name='$_REQUEST[userid]'") ;  
if 
(!$test)  

    echo "Ошибка при выполнении запроса"
    exit(); 

if(
mysql_num_rows($test)>0)  
{  
   echo 
"<br>Такой юзер уже существует!" . "<br>";  
}  
else 
{
  
   echo 
"<br>Такого юзера НЕТ!" . "<br>";  

$request mysql_query ("insert into auth (name, pass) values ('$_REQUEST[userid]', '$_REQUEST[password]') "); 
if (!
$request){ 
   echo mysql_error () . "<br>" 
   exit () ; 

echo    "Ваши данные!" "<br>" 
         "Логин: " "$_REQUEST[userid]"<br>" 
         "Пароль: " "$_REQUEST[password]"<br>" 
}  
?>
<html>
<body>
<h1>Страница Регистрации</h1>
<form method="post" action="auth.php">
<table>
<tr><td>Имя:</td>
<td><input type="text" name="userid"></td></tr>
<tr><td>Пароль:</td>
<td><input type="password" name="password"></td></tr>
<td><td colspan=2><input type=submit value='Зарегестрировать'>
</td></tr>
</table></form>
<a href="members_only.php">Только для зарегестрированных пользователей</a>
</body>
</html>

   
 
 автор: cheops   (12.08.2004 в 12:47)   письмо автору
 
   для: LimP   (12.08.2004 в 12:19)
 

Хм... у нас с вами PHP-интерпретаторы как-то по разному на ошибки реагируют :))). У меня этот скрипт выдаёт ошибку в строке 33:
Parse error: parse error, unexpected '}' in E:\main\auth.php on line 33

Это сразу после последнего оператора echo, где действительно стоит совершенно лишняя закрывающая фигурная скобка.

   
 
 автор: LimP   (12.08.2004 в 13:14)   письмо автору
 
   для: cheops   (12.08.2004 в 12:47)
 

убрал я эту скобку,но он мне все равно выдает ту же ошибку на 11 строке...

   
 
 автор: cheops   (12.08.2004 в 13:46)   письмо автору
 
   для: LimP   (12.08.2004 в 12:19)
 

Не знаю... а у меня работает... написал, что я существую :))) Точно в скрипте больше ничего нет? Попробуйте как-нибудь изменить 11 строку:
<?php
  $query 
"select * from auth where name='".$_REQUEST['userid']."'";
  
$test mysql_query ($query) ;
?>

   
 
 автор: LimP   (12.08.2004 в 17:15)   письмо автору
 
   для: cheops   (12.08.2004 в 13:46)
 

ну,я скрипт переписал вот так
<?
$dblocation 
"127.0.0.1";
$dbname "local";
$dbuser "root";
$dbpasswd "";

session_start();

 
$db_connect mysql_connect($dblocation,$dbuser,$dbpasswd);
 
mysql_select_db('auth',$db_connect);
 
$query = "select * from auth where name='".$_REQUEST[userid]."'"
  $test = mysql_query ($query) 
if (!$test)  

    echo "Ошибка при выполнении запроса"
    exit(); 

if(
mysql_num_rows($test)>0)  
{  
   echo 
"<br>Такой юзер уже существует!" . "<br>";  
}  
else 
{
  
   echo 
"<br>Такого юзера НЕТ!" . "<br>";  

$request mysql_query ("insert into auth (name, pass) values ('$_REQUEST[userid]', '$_REQUEST[password]') "); 
if (!
$request){ 
   echo mysql_error () . "<br>" 
   exit () ; 

echo    "Ваши данные!" "<br>" 
         "Логин: " "$_REQUEST[userid]"<br>" 
         "Пароль: " "$_REQUEST[password]"<br>" ;   
?>
<html>
<body>
<h1>Страница Регистрации</h1>
<form method="post" action="auth.php">
<table>
<tr><td>Имя:</td>
<td><input type="text" name="userid"></td></tr>
<tr><td>Пароль:</td>
<td><input type="password" name="password"></td></tr>
<td><td colspan=2><input type=submit value='Зарегестрировать'>
</td></tr>
</table></form>
<a href="members_only.php">Только для зарегестрированных пользователей</a>
</body>
</html>

но он выдает теперь другую немного ошибку

Parse error: parse error, unexpected T_CONSTANT_ENCAPSED_STRING in C:\www\scripts\auth\auth.php on line 11

   
 
 автор: glsv (Дизайнер)   (12.08.2004 в 21:21)   письмо автору
 
   для: LimP   (12.08.2004 в 17:15)
 

У меня тоже скрипт проходит без проблем. Возможно проблема в настройках PHP. Какая у вас версия.
И пришлите свой php.ini

А еще попробуйте написать вот так - userid взять в кавычки

$query = "select * from auth where name='".$_REQUEST['userid']."'";

   
 
 автор: LimP   (12.08.2004 в 21:40)   письмо автору
 
   для: glsv (Дизайнер)   (12.08.2004 в 21:21)
 

взял как вы сказали userid в кавычки,тщетно,та же ошибка,мои пхп.ини я прикрепил к сообщению

   
 
 автор: glsv (Дизайнер)   (12.08.2004 в 23:12)   письмо автору
 
   для: LimP   (12.08.2004 в 21:40)
 

А это тот php.ini, который вы используете?

А как тогда вы работаете с MySql, если он у Вас не подключен в php.ini?

Строка должна быть раскомментирована.

extension=php_mysql.dll


А почему у Вас она была закоментирована?

   
 
 автор: LimP   (12.08.2004 в 23:49)   письмо автору
 
   для: glsv (Дизайнер)   (12.08.2004 в 23:12)
 

я раскомментировал строку эту странно,но раньше он у мя работал и с закомментированной строко(я не знал,что она закомментирована)я себе на нем локально движок хупс 2 поставил, а тм тестируестя база данных...
похоже мои интерпретптор охренел просто вконец, теперь я ему прописываю скрипт(двумя сообщениями выше)а он мне:

Parse error: parse error, unexpected T_CONSTANT_ENCAPSED_STRING in C:\www\scripts\auth\auth.php on line 2

это ж просто глупость немыслимая!!!!!!!!!!!я на всякий пожарный вам снова мой пхп.ини прикрепил...там если что,подредактируйте,пожалуйста а то уж слишком много он ошибок порет(очень много еще до этого было)если не трудно,вышлите мне свой пхп.ини я им свой заменю,посмотрим,что будет...

   
 
 автор: glsv (Дизайнер)   (13.08.2004 в 01:20)   письмо автору
 
   для: LimP   (12.08.2004 в 23:49)
 

>у мя работал и с закомментированной строко

А мне кажется, что у Вас где то еще php.ini лежит (другой) и именно с ним апач и работает.

>что,подредактируйте,пожалуйста а то уж слишком много он ошибок порет(очень много еще до этого было)если не трудно,вышлите мне свой пхп.ини я им свой заменю,посмотрим,что будет

Тот, что вы выложили постом выше - тоже вполне нормальный. Все же что у Вас не так или с php.ini или с Апачем.
Апач хотя бы какие то php-скрипты выполняет?

   
 
 автор: LimP   (13.08.2004 в 13:27)   письмо автору
 
   для: glsv (Дизайнер)   (13.08.2004 в 01:20)
 

да,выполняет он другие скрипты...а при установке php надо использовать файл php.ini-dist или php.ini-recommended???я использую php.ini-dist

   
 
 автор: cheops   (13.08.2004 в 14:19)   письмо автору
 
   для: LimP   (13.08.2004 в 13:27)
 

Для разработки скриптов лучше php.ini-dist...

   
 
 автор: LimP   (13.08.2004 в 19:30)   письмо автору
 
   для: cheops   (13.08.2004 в 14:19)
 

ну,вот я его и использую,а что мне делать с этой бедой...может свой php.ini пришлете или еще что посоветуете?

   
 
 автор: cheops   (13.08.2004 в 21:28)   письмо автору
 
   для: LimP   (13.08.2004 в 19:30)
 

Перво наперво запустите на машине поиск и найдите все php.ini, если вдруг есть дубли. Уничтожте, а лучше переименуйте их, оставив один в С:/WIMDOWS который и следует настраивать.

PS Кстати, а как вы PHP устанавливаете? Из zip-архива или инсталятора?

   
 
 автор: LimP   (14.08.2004 в 13:33)   письмо автору
 
   для: cheops   (13.08.2004 в 21:28)
 

я уже двно произвел поиск других php.ini но никаких лишних не обнаружилось(1)c:\php\php.ini (2)d:\windows\php.ini
а php я устанавливал из zip-архива...ведь на оффициальном сайте тока zip-архив...кстати,надо ли устанавливать Collection of PECL modules for PHP 5.0.1 ???

   
 
 автор: cheops   (14.08.2004 в 15:26)   письмо автору
 
   для: LimP   (14.08.2004 в 13:33)
 

А путь С:\php\ у вас прописан в системе? Если это так то, PHP может брать php.ini и из него. Кстати, а какую версию MySQL вы используете? может дело в ней? Давайте её потестируем - выполним запрос в клиенте mysql и из PHP (у вас и у нас на машине) и посмотрим на результаты.

PS Коллекцию дополнительных модулей можно и установить, но в этом случае каждую из используемых вами библиотек следует прописать в php.ini, с использованимем директивы extension=
PPS Может заведём новую тему, а то у меня дома помегабайтка :)))

   
 
 автор: LimP   (14.08.2004 в 15:51)   письмо автору
 
   для: cheops   (14.08.2004 в 15:26)
 

так как тема очень длинная,то ее продолжение переехало

http://softtime.ru/forum/read.php?id_forum=1&id_theme=219&page=1

   
Rambler's Top100
вверх

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