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

Форум PHP

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

 

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

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

тема: Скрипт авторизации
 
 автор: home-studia   (11.02.2009 в 18:44)   письмо автору
 
 

Злравствуйте!
Скажите пожалуйста, как нужно отредактировать страницу авторизации, чтобы при удачном входе по логину и паролю писало не 'Авторизация прошла успешно', а к примеру Вашь E-mail такой то. И если не сложно как сделать чтобы при авторизации появлялась кнопочка выход (работа с сессиями как я понял). Спасибо

База:
CREATE TABLE `users` (
`id` INT( 255 ) NOT NULL AUTO_INCREMENT ,
`login` VARCHAR( 255 ) NOT NULL ,
`password` VARCHAR( 255 ) NOT NULL ,
`email` VARCHAR( 255 ) NOT NULL ,
PRIMARY KEY ( `id` )
); 


Авторизация по запросу:

<?php
include_once("connect.php");
if(isset(
$_POST['auth_submit']))
{
$login $_POST['login'];
$password $_POST['password']; 
$query "SELECT id, login, password
FROM users
WHERE login ='
{$login}' AND password='{$password}'
LIMIT 1"
;
$sql mysql_query($query) or die(mysql_error());
if (
mysql_num_rows($sql) == 1)
echo 
'Авторизация прошла успешно';
else 
echo 
'Неправильное имя или пароль';
}
?> 

   
 
 автор: OLi   (11.02.2009 в 19:24)   письмо автору
 
   для: home-studia   (11.02.2009 в 18:44)
 

Из вашего кода
<?php
if (mysql_num_rows($sql) == 1) {

$res=mysql_query("select email from users where login=$login");

$email mysql_result($res0);
echo 
"Вашь E-mail $email";

}
?>


А кнопку можно сделать так: если используются сессии, то
.....
<input type="submit" value="Выход" name="exit">
.....
<?
if (isset($_POST[exit])){

[
b]Уничтожение сессии[/b]
}
?>

   
 
 автор: home-studia   (12.02.2009 в 06:24)   письмо автору
 
   для: home-studia   (11.02.2009 в 18:44)
 

Попробовал вставить, получилось вот что:


include_once("connect.php");
if(isset($_POST['submit']))
    {
            $login = $_POST['login']; //Имя пользователя, введенное в форму
            $password = $_POST['password']; // Пароль введенный в форму

            //Запрос из базы данных по проверки существования в базе введенного пользователя
            //с введенным паролем
            $query = "SELECT id, login, password, email
                    FROM users
                    WHERE login ='{$login}' AND password='{$password}'
                    LIMIT 1";
            $sql = mysql_query($query) or die(mysql_error()); //Выполняется запрос
if (mysql_num_rows($sql) == 1) {

$res=mysql_query("select password from users where login=$login");

$email = mysql_result($res, 0);
echo "Вашь E-mail $password";

}
            else
                   echo 'Неправильное имя или пароль';
    }
?>


Столбец E-mail не выводится по запросу :-((( Попробовал вывести к примеру столбик логин, все хорошо, а вот с мылом проблема...почему?

   
 
 автор: oli   (12.02.2009 в 17:35)   письмо автору
 
   для: home-studia   (12.02.2009 в 06:24)
 

$res=mysql_query("select password from users where login=$login"); -смысл этого запроса????

$email = mysql_result($res, 0);
echo "Вашь E-mail $password"; -А это что?....

[поправлено модератором]

   
 
 автор: home-studia   (13.02.2009 в 03:08)   письмо автору
 
   для: oli   (12.02.2009 в 17:35)
 

Здесь ошибки никакой нет, я привел пример как вывожу поле с паролем, с логином тоже все окей, но если пытаюсь вывести поле с e-mail то ничего не происходит.

   
 
 автор: Slo_Nik   (13.02.2009 в 04:27)   письмо автору
 
   для: home-studia   (12.02.2009 в 06:24)
 

<?php
  $sql 
mysql_query($query) or die(mysql_error()); //Выполняется запрос 
$sql_1 mysql_fetch_array($sql);//Возвращает массив с обработанным рядом результата запроса
if (mysql_num_rows($sql) == 1) { //а правильно ли?

//$res=mysql_query("select password from users where login=$login"); действительно лишний запрос

echo "Ваш E-mail -".$sql_1['email']; 

}
?>

попробуй так, должно получится...:)

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

   
 
 автор: Trianon   (13.02.2009 в 09:18)   письмо автору
 
   для: Slo_Nik   (13.02.2009 в 04:27)
 

Если в таблице e-mail в уголках лежит, браузер его тегом посчитает, и на экран не выведет.
echo "Ваш E-mail -". htmlspecialchars($sql_1['email']);  

   
 
 автор: Slo_Nik   (13.02.2009 в 11:30)   письмо автору
 
   для: Trianon   (13.02.2009 в 09:18)
 

может и так, но тогда странно получается, зачем заносит в БД email в таком виде?
если использовать стандартную форму при регистрации, то как надо обработать данные из этой формы, что бы они в базу занеслись обрамлённые уголками?

   
 
 автор: Trianon   (13.02.2009 в 11:36)   письмо автору
 
   для: Slo_Nik   (13.02.2009 в 11:30)
 

не исключено. что в таком виде и заносили.
е-мэйл в уголах для уазания в почтовых клиентах вполне валиден.
Собственно, это всё область догадок. Как там у автора, кроме него никто не знает.

   
 
 автор: Slo_Nik   (13.02.2009 в 12:01)   письмо автору
 
   для: Trianon   (13.02.2009 в 11:36)
 

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

   
 
 автор: home-studia   (13.02.2009 в 21:29)   письмо автору
 
   для: Slo_Nik   (13.02.2009 в 12:01)
 

К сожаление не помог ни первый:
echo "Ваш E-mail -".$sql_1['email']; 

ни второй вариант:
echo "Ваш E-mail -". htmlspecialchars($sql_1['email']);   

Поле с e-mail (varchar(255)) как не выводилось так и не выводится :-(

Давайте начнем с начала, я расскажу что собственно нужно получить в итоге.
Допустим у нас есть несколько страничек это index.php, news.php, reg.php и infouser.php
index.php // Главная страница
news.php // страничка с какой-нибудь информацией
reg.php // страничка на которой мы будем производить регистрацию
infouser.php // страничка на которой пользователь может просмотреть свою информацию и по возможности изменить её.
Цель: сделать так чтобы когда мы заходим на главную страничку index.php было поле где нужно ввести логин и пароль для авторизации, если мы вводим их правильно то оставшись на этой же страничке у нас исчезают эти поля, а вместо них пишет к примеру :
Добро пожаловать, (логин).
Персональная информация (infouser.php)
Выход (при нажатии мы сбрасываем авторизацию и вновь появляются поля с просьбой ввести логин и пароль).
Пройдя допустим на странице index.php авторизацию и перейдя по линку на страницу news.php нас также приветствует как и на прошлой страничке.
А когда пользователь переходит на страничку infouser.php ему пишет что его ник такой-то, пароль такой-то изменить вы можите нажав сюда.
Помогите пожалуйста уже несколько суток сижу, облазил кучу сайтов, везде либо варианты совсем не подходят, либо с кучей ошибок –(( Пробовал даже CMS урезать оставив только эти функции, но это кромешный ад :-)

   
 
 автор: AcidTrash   (13.02.2009 в 21:59)   письмо автору
 
   для: home-studia   (13.02.2009 в 21:29)
 

>Поле с e-mail (varchar(255)) как не выводилось так и не выводится :-(
Приведите пример, какие значения находятся в поле email.

   
 
 автор: home-studia   (13.02.2009 в 22:09)   письмо автору
 
   для: AcidTrash   (13.02.2009 в 21:59)
 

admin@mail.mail

   
 
 автор: home-studia   (13.02.2009 в 22:14)   письмо автору
 
   для: AcidTrash   (13.02.2009 в 21:59)
 

Можете подсказать как реалезовать вышесказанно?

   
 
 автор: AcidTrash   (13.02.2009 в 22:38)   письмо автору
 
   для: home-studia   (13.02.2009 в 22:14)
 

Хм.
Приведите пример конечного кода, который вы используете.

   
 
 автор: home-studia   (13.02.2009 в 22:44)   письмо автору
 
   для: AcidTrash   (13.02.2009 в 22:38)
 

К примеру
include_once("connect.php"); 
if(isset($_POST['submit'])) 
    { 
            $login = $_POST['login']; //Имя пользователя, введенное в форму 
            $password = $_POST['password']; // Пароль введенный в форму 

            //Запрос из базы данных по проверки существования в базе введенного пользователя 
            //с введенным паролем 
            $query = "SELECT id, login, password, email 
                    FROM users 
                    WHERE login ='{$login}' AND password='{$password}' 
                    LIMIT 1"; 
  $sql = mysql_query($query) or die(mysql_error()); //Выполняется запрос  
$sql_1 = mysql_fetch_array($sql);//Возвращает массив с обработанным рядом результата запроса 
if (mysql_num_rows($sql) == 1) { //а правильно ли? 

//$res=mysql_query("select password from users where login=$login"); действительно лишний запрос 

echo "Ваш E-mail -".$sql_1['email'];  

}
            else 
                   echo 'Неправильное имя или пароль'; 
    } 
?> 

   
 
 автор: home-studia   (13.02.2009 в 22:45)   письмо автору
 
   для: home-studia   (13.02.2009 в 22:44)
 

Но если честно, меня сейчас очень интерисует, как такую авторизацию сделать на сессиях, как я писал выше, если несложно, напишите код.

   
 
 автор: Slo_Nik   (13.02.2009 в 23:05)   письмо автору
 
   для: home-studia   (13.02.2009 в 22:45)
 

это только пример, так сказать натырка :)

<?php
session_start
();
if(!empty(
$_POST['login'] && $_POST['password'])){
// делаем запрос к БД
// и сверяем введённый пароль с хешем пароля, который хранится в БД
// и если пароли совпадают
$login $_SESSION['login'];
$pass $_SESSION['password'];
echo 
"Привет".$login;
}
// если данные не совпадают с данными в БД
else {
// выводим форму для ввода пароля и логина
}
?>

и посмотри в статьях на сайте, там должно быть подробное описание как сделать правильно
и ещё.
напиши как ты заносишь данные при регистрации в БД, сам запрос.
и в строке
<?php
  $sql 
mysql_query($query) or die(mysql_error()); //Выполняется запрос  
?>

убери or die()mysql_error()
и напиши

<?php
if(!sql) echo "ошибка при обращении к БД";
?>
и посмотри что получится

   
 
 автор: home-studia   (13.02.2009 в 23:10)   письмо автору
 
   для: Slo_Nik   (13.02.2009 в 23:05)
 

Спасибо :-) Но это ведь просто пример регистрации сессии. Как сделать чтобы проверялось есть ли активная сессия и если да, то уберались поля для ввода логина и пароля и наоборот при отсутствии предлагалось авторизироваться?

   
 
 автор: home-studia   (13.02.2009 в 23:14)   письмо автору
 
   для: home-studia   (13.02.2009 в 23:10)
 

Регистрация по запросу:

<?
include_once("connect.php");
if (isset(
$_POST['submit']))
{
    if(empty(
$_POST['login']))
    {
    echo 
'Вы не ввели логин';
    }
    elseif(empty(
$_POST['password']))
    {
    echo 
'Вы не ввели пароль';
    }
    elseif(empty(
$_POST['password2']))
    {
    echo 
'Вы не ввели подтверждение пароля';
    }
    elseif(
$_POST['password'] != $_POST['password2'])
    {
    echo 
'Введенные пароли не совпадают';
    }
    elseif(empty(
$_POST['email']))
    {
    echo 
'Вы не ввели E-mail';
    }
    else
        {
        
$login $_POST['login'];
        
$password $_POST['password'];
        
$password2 $_POST['password2'];
        
$email $_POST['email'];
        
$query "SELECT `id`
        FROM `users`
        WHERE `login`='
{$login}' AND `password`='{$password}'
        "
;
        
$sql mysql_query($query) or die(mysql_error());
        if (
mysql_num_rows($sql) > 0)
        {
        echo 
'Такой логин уже существует';
        }
        
        else
        {
            
$query "INSERT INTO users(login , password , email )
            VALUES ('
$login', '$password', '$email')";
            
$result mysql_query($query) or die(mysql_error());;
            echo 
'Регистрация успешно прошла';
        }
    }
}
?>

   
 
 автор: Slo_Nik   (13.02.2009 в 23:15)   письмо автору
 
   для: home-studia   (13.02.2009 в 23:10)
 

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

<?php
session_start
();
if(!isset(
$_SESSION['login']) && !isset($_SESSION['password'])){
header ("location:./ переход на страницу ввода пароля и логина");
exit();
}
?>

хотя этот вариант не идеален

   
 
 автор: home-studia   (13.02.2009 в 23:36)   письмо автору
 
   для: Slo_Nik   (13.02.2009 в 23:15)
 

Вариант с or die()mysql_error() не помог

   
 
 автор: Slo_Nik   (13.02.2009 в 23:45)   письмо автору
 
   для: home-studia   (13.02.2009 в 22:44)
 

ты просто скопировал, даже не смотрел, что копировал.
//$res=mysql_query("select password from users where login=$login"); действительно лишний запрос
я и ещё один человек тебе написали, что это лишний запрос, это первое.
if (mysql_num_rows($sql) == 1) { //а правильно ли?
я написал, что сомневаюсь, что ты правильно тут сделал, это второе.
значит попробуй сделать так

<?php
if (mysql_num_rows($sql) >0){
$arr mysql_fetch_array($sql);
echo 
"<pre>";
print_r($arr);
echo 
"</pre?";
}
?>

и посмотри, что тебе выдаёт из базы данных, может это тебе поможет понять почему у тебя не выводит email, ведь ты начал с того, что не выводи email, заодно проверишь остальные данные какие выводит из БД.
Добейся сначала, что бы в БД и из неё все данные вводились/выводились корректно.
когда всё будет правильно, тогда и продожай дорабатывать скрипт.
p.s. тут я сам уже ошибся, не серчай

<?php 
if(!$sql) echo "ошибка при обращении к БД"
?>

   
 
 автор: home-studia   (14.02.2009 в 00:05)   письмо автору
 
   для: Slo_Nik   (13.02.2009 в 23:45)
 

Спасибо, сейчас посижу попробую вставить по новому примеру.
Помоги пожалуйста рассписать вместе с подключение к СУБД свой пример:
<?php 
session_start
(); 
if(!empty(
$_POST['login'] && $_POST['password'])){ 
// делаем запрос к БД 
// и сверяем введённый пароль с хешем пароля, который хранится в БД 
// и если пароли совпадают 
$login $_SESSION['login']; 
$pass $_SESSION['password']; 
echo 
"Привет".$login

// если данные не совпадают с данными в БД 
else { 
// выводим форму для ввода пароля и логина 

?>


У меня уже просто каша в голове:

<?php
include_once("connect.php");

session_start();

if(!empty(
$_POST['login'] && $_POST['password'])){

$query "SELECT id, login, password, email
                    FROM users2
                    WHERE login ='
{$login}' AND password='{$password}'
                    LIMIT 1"
;
$sql mysql_query($query)
$sql_1 mysql_fetch_array($sql);

// делаем запрос к БД
// и сверяем введённый пароль с хешем пароля, который хранится в БД
// и если пароли совпадают
$login $_SESSION['login'];
$pass $_SESSION['password'];
echo 
"Привет".$login;
}
// если данные не совпадают с данными в БД
else {
// выводим форму для ввода пароля и логина
echo "<form action=index.php>
 <input type=text name= />
 <input type=password name= />
 <input type=submit value=Войти />
</form>"
}
?>

</body>
</html>

   
 
 автор: Slo_Nik   (14.02.2009 в 00:43)   письмо автору
 
   для: home-studia   (14.02.2009 в 00:05)
 

в совоём первом сообщении ты написал как ты создаёшь таблицу в БД "users", а в запросе ты обращаешься к таблице "users2".
<?php 
if(!empty($_POST['login']) && !empty($_POST['password'])){
// не обязательно так делать, но если решил упростить запись login и password, то лучше проверить существование переменных.
//столкнулся с такой проблемой на одном бесплатном хостинге....
if(isset($_POST['login']))$login $_POST['login'];
if(isset(
$_POST['password']))$password $_POST['password'];
// ну и собственно запрос к БД
$query "SELECT `id`, `login`, `password`, `email` 
                    FROM `users2` 
                    WHERE `login` ='
{$login}' AND `password`='{$password}
                    LIMIT 1"

......
$sql mysql_query($query);
// если нельзя выполнить запрос
if(!$sql) echo "ошибка при обращении к БД".mysql_error();
// получаем кол-во записей
if(mysql_result($sql,0) > 0){
$_SESSION['login'] = $login;
$_SESSION['password'] = $password;
}

?>

пароль в БД не хранится в открытом виде, при помощи функции md5() получают хеш пароля, который и заносят в БД. потом введёный пароль сверяют с хешем из БД

<?php
".....
 WHERE login ='
$login' AND password='".md5($password)."' 
?>

   
 
 автор: home-studia   (14.02.2009 в 00:53)   письмо автору
 
   для: Slo_Nik   (14.02.2009 в 00:43)
 

Посмотри пожалуйста, что неправильно?


<?php
include_once("connect.php");
session_start();
if(!empty(
$_POST['login']) && !empty($_POST['password'])){
// не обязательно так делать, но если решил упростить запись login и password, то лучше проверить существование переменных.
//столкнулся с такой проблемой на одном бесплатном хостинге....
if(isset($_POST['login']))$login $_POST['login'];
if(isset(
$_POST['password']))$password $_POST['password'];
// ну и собственно запрос к БД
$query "SELECT `id`, `login`, `password`, `email`
                    FROM `users2`
                    WHERE `login` ='
{$login}' AND `password`='{$password}'
                    LIMIT 1"
;
......
$sql mysql_query($query);
// если нельзя выполнить запрос
if(!$sql) echo "ошибка при обращении к БД".mysql_error();
// получаем кол-во записей
if(mysql_result($sql,0) > 0){
$_SESSION['login'] = $login;
$_SESSION['password'] = $password;
echo 
"Привет".$login;
}
// если данные не совпадают с данными в БД
else {
// выводим форму для ввода пароля и логина
echo "<form action=index.php>
 <input type=text name= />
 <input type=password name= />
 <input type=submit value=Войти />
</form>"
}
?>




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

   
 
 автор: Slo_Nik   (14.02.2009 в 01:13)   письмо автору
 
   для: home-studia   (14.02.2009 в 00:53)
 

в форме почему у тебя не присвоено значение name? не должно быть пустым!!!
как скрипт "поймёт" где логин, а где пароль?!
значения атрибутов type и value возьми или в аппострофы или кавычки и name тоже ... хотя это не по теме :)
убери в запросе фигурные скобки у login и password.
скрипт работает, email выводит ? если да, то всё правильно. если выдаёт какие то ошибки, то смотри в какой строке кода ошибка и пытайся устранить.
как заработает, будешь дальше дорабатывать скрипт.
p.s. в форме укажи какой методе передачи данных, если ты не указал метод, по умолчанию будет метод GET, а тебе нужен POST.
ну и в этой строке тебе надо заменить на $_SESSION['login']
echo "Привет".$login;

   
 
 автор: home-studia   (14.02.2009 в 01:47)   письмо автору
 
   для: Slo_Nik   (14.02.2009 в 01:13)
 

<?php 
include_once("connect.php"); 
session_start(); 
if(!empty(
$_POST['login']) && !empty($_POST['password'])){ 
// не обязательно так делать, но если решил упростить запись login и password, то лучше проверить существование переменных. 
//столкнулся с такой проблемой на одном бесплатном хостинге.... 
if(isset($_POST['login']))$login $_POST['login']; 
if(isset(
$_POST['password']))$password $_POST['password']; 
// ну и собственно запрос к БД 
$query "SELECT `id`, `login`, `password`, `email` 
                    FROM `users2` 
                    WHERE `login` ='
$login' AND `password`='$password
                    LIMIT 1"

...... 
$sql mysql_query($query); 
// если нельзя выполнить запрос 
if(!$sql) echo "ошибка при обращении к БД".mysql_error(); 
// получаем кол-во записей 
if(mysql_result($sql,0) > 0){ 
$_SESSION['login'] = $login
$_SESSION['password'] = $password
echo 
"Привет"$_SESSION['login']; 

// если данные не совпадают с данными в БД 
else { 
// выводим форму для ввода пароля и логина 
echo "<form action=index.php method=post> 
 <input type='text' name='login' > 
 <input type='password' name='password' > 
 <input type='submit' value=Войти > 
</form>" 

?> 


Я привел это как пример, оно не хочет вообще страничку грузить с таким кодом. И если несложно исправь пример сам, я его скопирую и проверю. Спасибо.

   
 
 автор: home-studia   (14.02.2009 в 01:54)   письмо автору
 
   для: home-studia   (14.02.2009 в 01:47)
 

При вставке такого кода, страничка прогружается только на:


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=windows-1251"></HEAD>
<BODY style="ZOOM: 100%"></BODY></HTML>

   
 
 автор: Slo_Nik   (14.02.2009 в 02:05)   письмо автору
 
   для: home-studia   (14.02.2009 в 01:54)
 

>При вставке такого кода, страничка прогружается только на:
>
>

><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
><HTML><HEAD>
><META http-equiv=Content-Type content="text/html; charset=windows-1251"></HEAD>
><BODY style="ZOOM: 100%"></BODY></HTML>
>

во-первых: как это понять?
во-вторых: какие ошибки выдаёт тебе? или просто выводит пустую страницу, без всяких записей?

   
 
 автор: Slo_Nik   (14.02.2009 в 01:58)   письмо автору
 
   для: home-studia   (14.02.2009 в 01:47)
 

что значит не хочет грузить? выдаёт ли какие то ошибки, предупреждения?
в connect.php у тебя правильно запрос на соединение с БД?

   
 
 автор: home-studia   (14.02.2009 в 02:05)   письмо автору
 
   для: Slo_Nik   (14.02.2009 в 01:58)
 

В том то и дело, что никаких ошибок не выдает.
Вот что успевает загрузится и все:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
<HTML><HEAD> 
<META http-equiv=Content-Type content="text/html; charset=windows-1251"></HEAD> 
<BODY style="ZOOM: 100%"></BODY></HTML>


код connect.php

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

   
 
 автор: home-studia   (14.02.2009 в 02:09)   письмо автору
 
   для: home-studia   (14.02.2009 в 02:05)
 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  
<HTML><HEAD>  
<META http-equiv=Content-Type content="text/html; charset=windows-1251"></HEAD>  
<BODY style="ZOOM: 100%"></BODY></HTML>


это если посмотреть код страницы при загрузке, грузится только самый верх получается страницы. Такое бывает когда не может найти к примеру при include файл, но файл connect на месте, следовательно причина в ином.

   
 
 автор: Slo_Nik   (14.02.2009 в 02:31)   письмо автору
 
   для: home-studia   (14.02.2009 в 02:09)
 

если ты имеешь ввиду просмотр исходного кода в браузере, то ты и не увидешь кода php.
почему? почитай самые основы языка, до объяснения синтаксиса.
ты ни когда не увидешь код php в браузере, только результат работы этого кода :)
посмотрел всё что мы тут с тобой наворотили, есть несколько ошибок.
одна из них это то, что при проверяя массив POST на пустоту,я тебе не правильно подсказал.
пишем

<?php
if(!empty($_POST['login']) && !empty($_POST['password'])){
......................................
}
?>

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

<?php
...................................................................................................................................
echo 
"Привет"$_SESSION['login'];  
}  
}
// если данные не совпадают с данными в БД 
else {  
// выводим форму для ввода пароля и логина  
echo "<form action=index.php method=post>  
 <input type='text' name='login' >  
 <input type='password' name='password' >  
 <input type='submit' value=Войти >  
</form>"  
;
}  
?>

многоточием я обозначил пропущеный код.
исправь эту ошибку и проверь, что получится.
ну а остальные ошибки попробуй устранить сам :)
по поводу connect.php
ты всем переменным присвоил пустую строку, потом пытаешься соедениться с БД, полагаясь на то, что скрипт сам отгадает какая у тебя БД, какой хост и какой юзер.... :)

   
 
 автор: home-studia   (14.02.2009 в 02:37)   письмо автору
 
   для: Slo_Nik   (14.02.2009 в 02:31)
 

Чувак, не злись только :-) Но я не полный новичек в этом, конечно же я не увижу код php в браузере, потому проверяю вставкой обычного текста, здесь явно видно что загрузка страницы обрывается.
По поводу подключения к базам, конечно я вставил поля пустыми, или ты предлагешь разместить тут мой логин, пароль, IP сервера?-)))
Сейчас попробую поправить, то что нашли из ошибок.

   
 
 автор: home-studia   (14.02.2009 в 02:47)   письмо автору
 
   для: home-studia   (14.02.2009 в 02:37)
 

Вот, смотри что получилось все верно? (но грузиться всеравно не хочет)

<?php  
include_once("connect.php");
session_start();
if(!empty(
$_POST['login']) && !empty($_POST['password'])){

if(isset(
$_POST['login']))$login $_POST['login'];
if(isset(
$_POST['password']))$password $_POST['password'];

$query "SELECT `id`, `login`, `password`, `email`
                    FROM `users2`
                    WHERE `login` ='
$login' AND `password`='$password'  
                    LIMIT 1"
;

$sql mysql_query($query);

if(!
$sql) echo "ошибка при обращении к БД".mysql_error();

if(
mysql_result($sql,0) > 0){
$_SESSION['login'] = $login;  
$_SESSION['password'] = $password;
echo 
"Привет"$_SESSION['login'];
}
}

else {

echo 
"<form action=index.php method=post>
 <input type='text' name='login' >
 <input type='password' name='password' >
 <input type='submit' value=Войти >
</form>"  
;
}
?>

   
 
 автор: Slo_Nik   (14.02.2009 в 02:55)   письмо автору
 
   для: home-studia   (14.02.2009 в 02:47)
 

тупо скопировал, то что ты написал, всё загрузилось, но выдало ошибку, это естественно, т.к. они есть.
исправил и всё загрузилось, появилась форма ввода даных, вот только на работоспособность не проверял, облом таблицу под это создавать...
у тебя ошибки какие то выводит в браузер, типа
Parse error: parse error, unexpected T_VARI.................?
если нет, то это уже настройки самого php проверь на вывод ошибок.
ну а если выводит, то тебе должно ясно сказать в какой строке и какая ошибка.

   
 
 автор: home-studia   (14.02.2009 в 03:02)   письмо автору
 
   для: Slo_Nik   (14.02.2009 в 02:55)
 

Интересно, на хостинге не показывало вообще никаких ошибок, просто обрывалась загрузка, попробовал закинуть на дэнвер, выбило ошибку Parse error: syntax error, unexpected T_VARIABLE, expecting ',' в 23 строке, как ты исправил?

   
 
 автор: Slo_Nik   (14.02.2009 в 02:48)   письмо автору
 
   для: home-studia   (14.02.2009 в 02:37)
 

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

   
 
 автор: home-studia   (14.02.2009 в 02:52)   письмо автору
 
   для: Slo_Nik   (14.02.2009 в 02:48)
 

Оно то так, но как говорится кто знает, лучше перестраховаться чем потом плакать :-) Посмотри еще пожалуйста, не работает код.

   
 
 автор: Slo_Nik   (14.02.2009 в 03:08)   письмо автору
 
   для: home-studia   (14.02.2009 в 02:52)
 

если ты говоришь о возможности взлома твоего сайта, то этот код дырявый как решето :)
мы пока говорили о том, что бы заставить его работать, а уж потом доводить его до ума.
посмотреть я на него посмотрел. но вот заставить его работать ты должен сам. попытайся запустить, что бы он выводил из базы логин и проверял пароль. вот когда у тебя будет куча ошибок после кучи проб, тогда и будем думать дальше.
я то смогу его довести его до ума, по крайней мере, что бы он выводил в окно браузера то, что тебе надо, т.е. логин, email и т.д.
НО ТЫ ТО НЕ НАУЧИШЬСЯ ЕСЛИ Я ЕГО БУДУ ЗАПУСКАТЬ!
Не обижайся, но я сам через это прошёл, пока не помучаешься не поймёшь даже и приблизительно как это должно работать....
попробуй пока сам.
ведь форма выводится, с БД соединяется, осталось только сделать что бы выводил данные в браузер.
правда потом будет вопрос безопасности скрипта, но это другая тема разговора.
p.s. ради интереса я его запущу,что бы он выводил из БД данные, а ты потом напиши, что у тебя получилось.

   
 
 автор: Slo_Nik   (14.02.2009 в 03:26)   письмо автору
 
   для: home-studia   (14.02.2009 в 02:52)
 

код работает, всё выводит из базы, ищи ошибки у себя, если он не работает

   
 
 автор: home-studia   (14.02.2009 в 03:41)   письмо автору
 
   для: Slo_Nik   (14.02.2009 в 03:26)
 

Изменил до такого вида:

<? session_start(); ?>

<?php
include_once("connect.php");


if(!empty(
$_POST['login']) && !empty($_POST['password'])) {

if(isset(
$_POST['login']))$login $_POST['login'];
if(isset(
$_POST['password']))$password $_POST['password'];

$query "SELECT `id`, `login`, `password`, `email`
                    FROM `users2`
                    WHERE `login` ='
$login' AND `password`='$password'
                    LIMIT 1"
;

$sql mysql_query($query);

if(!
$sql) echo "ошибка при обращении к БД".mysql_error();

if(
mysql_result($sql,0) > 0){
$_SESSION['login'] = $login;
$_SESSION['password'] = $password;
echo 
"Привет".$login;
}
 }

else {

echo 
"<form action=index.php method=post>
 <input type='text' name='login' >
 <input type='password' name='password' >
 <input type='submit' value=Войти >
</form>"  
;
}
?>


Пришлось вернуть снова echo "Привет".$login; потому как с echo "Привет"$_SESSION['login']; выбивало ошибку.

   
 
 автор: Slo_Nik   (14.02.2009 в 03:53)   письмо автору
 
   для: home-studia   (14.02.2009 в 03:41)
 

во-первых, ты читал что сказано в ошибке?
во-вторых, проверим твою внимательность, нади отличие в этих строках
echo "Привет".$login;
и
echo "Привет"$_SESSION['login'];
если найдёшь отличие, то будет работать и с $_SESSION['login']

   
 
 автор: home-studia   (14.02.2009 в 04:02)   письмо автору
 
   для: Slo_Nik   (14.02.2009 в 03:53)
 

Да, отличие в точке нашел, исправил, все работает, спасибо. Вроде как с этим отмучались. Как теперь сделать так что к примеру: у нас есть ссылка на страничку index2.php в нее я вставляю такой же код как и здесь, но когда перехожу на нее у меня всеравно просит по новому ввести лигин и пароль, как сделать чтобы авторизировавшись на одной страничке, авторизация оставалась и на остальных?

   
 
 автор: Slo_Nik   (14.02.2009 в 04:20)   письмо автору
 
   для: home-studia   (14.02.2009 в 04:02)
 

тебе надо почитать что касается сессий
вот ссылочка
http://phpfaq.ru/sessions
ну а вообще, на других страницах пишешь
session_start();
эта функция инициирует сессию.Любая страница,использующаая сессии, должна иметь в начале вызов этой функции и должна вызываться до начала вывода информации в окно браузера.

   
 
 автор: home-studia   (14.02.2009 в 04:41)   письмо автору
 
   для: Slo_Nik   (14.02.2009 в 04:20)
 

Прочитал, по статье получается что вставив точно такой же код как у нас получился и на второй странице, при переходе на нее должно не требовать логин и пароль, но происходит обратное =(

   
 
 автор: Slo_Nik   (14.02.2009 в 04:58)   письмо автору
 
   для: home-studia   (14.02.2009 в 04:41)
 

не надо вставлять точно такой же код!
опять же ты не внимательно прочитал статью.
вот цитата с той статьи
Для того, чтобы иметь доступ к переменным сессии на любых страницах сайта, надо написать ТОЛЬКО ОДНУ(!) строчку в самом начале КАЖДОГО файла, в котором нам нужны сессии:
session_start();
И далее обращаться к элементам массива $_SESSION. Например, проверка авторизации будет выглядеть примерно так:
session_start();
if (!$_SESSION['authorized']<>1) {
header("Location: /auth.php");
exit;
}

если условие не выполняется, делают переход(автоматом) на страницу с формой для ввода пароля/логина, если условие выполняется идёт выполнение дальнейшего кода.
вот ещё одна ссылка
http://www.softtime.ru/bookphp/gl8_1.php и не ленись, я уже писал тебе, что бы ты почитал статьи на этом сайте

   
 
 автор: home-studia   (14.02.2009 в 16:46)   письмо автору
 
   для: Slo_Nik   (14.02.2009 в 04:58)
 

Кто-нибудь может сказать почему здесь:

<? session_start();  ?>

<?php

include_once("connect.php");

if(!empty(
$_POST['login']) && !empty($_POST['password'])) {

if(isset(
$_POST['login']))$login $_POST['login'];
if(isset(
$_POST['password']))$password $_POST['password'];

$query "SELECT `id`, `login`, `password`, `email`
                    FROM `users`
                    WHERE `login` ='
$login' AND `password`='$password'
                    LIMIT 1"
;

$sql mysql_query($query);

if(!
$sql) echo "ошибка при обращении к БД".mysql_error();

if(
mysql_result($sql,0) > 0){
$_SESSION['login'] = $login;
$_SESSION['password'] = $password;
echo 
"Привет".$_SESSION['login'];
}
 }

else {

echo 
"<form action=test.php method=post>
 <input type='text' name='login' >
 <input type='password' name='password' >
 <input type='submit' value=Войти >
</form>"  
;
}
?>
<a href="test2.php">СТРАНИЦА 2</a>

не хочет открываться сессия и запоминать логин с паролем? Вернее сессия открывается, но не авторизируется при помощи сессий.

   
 
 автор: BinLaden   (14.02.2009 в 16:52)   письмо автору
 
   для: home-studia   (14.02.2009 в 16:46)
 

Сами писали?

   
 
 автор: home-studia   (14.02.2009 в 16:54)   письмо автору
 
   для: BinLaden   (14.02.2009 в 16:52)
 

По советам на протяжении всей статьи, но уверян тут ошибка на ошибке будет.

   
 
 автор: home-studia   (14.02.2009 в 16:56)   письмо автору
 
   для: home-studia   (14.02.2009 в 16:54)
 

Возможно я не прав, но я так понимаю что сессия открывается, но так как у на стоит авторизация с post запроса, оно не хочет авторизироваться автоматически через открытую сессию…как это исправить? Это конечно мои мысли в слух :-)

   
 
 автор: Slo_Nik   (14.02.2009 в 17:05)   письмо автору
 
   для: home-studia   (14.02.2009 в 16:56)
 

перечитай ещё раз моё последнее сообщение

   
 
 автор: home-studia   (14.02.2009 в 17:20)   письмо автору
 
   для: Slo_Nik   (14.02.2009 в 17:05)
 

Я прочитал твое последнее сообщение, и статью http://www.softtime.ru/bookphp/gl8_1.php она есть и в моей книге PHP5. По сессии не хочет авторизироваться даже на главной странице, где мы вводим логин и пароль. Что значит на каждой странице? Значит вставлять шапку:
session_start();
if (!$_SESSION['authorized']<>1) {
header("Location: /auth.php");
exit;
}
и на страницу авторизации? Пробовал, ничего положтельного не произошл. Не пиши пожалуйста таким же языком как и в статьях, я много просмотрел их в интернете и поэтому прошу помочь и показать мне готовый исправный код, а не отправлять меня опять на поиски в интернете на других сайтах, я там уже был и прошу здесь помощи. Это пустая трата времени и раздувание топика на форуме, мне легче научиться увидев готовый вариант, а не откладывать в голове кучу неверных. Вобщем у каждого свой метод обучения.

   
 
 автор: home-studia   (14.02.2009 в 17:23)   письмо автору
 
   для: home-studia   (14.02.2009 в 17:20)
 

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

   
 
 автор: Slo_Nik   (14.02.2009 в 17:32)   письмо автору
 
   для: home-studia   (14.02.2009 в 17:23)
 

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

   
 
 автор: home-studia   (14.02.2009 в 17:37)   письмо автору
 
   для: Slo_Nik   (14.02.2009 в 17:32)
 

Автор: Slo_Nik   (14.02.2009 в 17:32)
автоматом отправит на страницу авторизации только в том случае, если человек не авторизировался.
если всё пройдёт успешно, будет переходить между страницами без проблем


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

   
 
 автор: Slo_Nik   (14.02.2009 в 18:01)   письмо автору
 
   для: home-studia   (14.02.2009 в 17:37)
 

можно на каждой странице сделать сноску на скрипт авторизации, при этом ограничить какие то действия посетителя сайта, например, он не может оставлять комментарии к статьям. вот захочет оставить, тогда пусть жмёт на "войти", авторизируется и оставляет комментарий.
это как вариант, а их много.
твой код рабочий, у меня работает.
При вводе логина и пароля на странице появляется "Привет login" или то имя что ты ввёл?

   
 
 автор: home-studia   (14.02.2009 в 18:04)   письмо автору
 
   для: Slo_Nik   (14.02.2009 в 18:01)
 

Да, он работает в этом плане, но попробуй зайти на страницу еще раз (не обновить) а именно зайти, авторизация сбросится, хотя сессия жива.

   
 
 автор: home-studia   (14.02.2009 в 18:06)   письмо автору
 
   для: home-studia   (14.02.2009 в 18:04)
 

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

   
 
 автор: Slo_Nik   (14.02.2009 в 18:26)   письмо автору
 
   для: home-studia   (14.02.2009 в 18:04)
 

напиши

<?php
if(!$_SESSION['login']){
// тут впиши код, который у тебя есть
}
else{
echo 
"привет".$_SESSION['login'];
}

этим ты проверяешь существование сессии, и если она существует выводишь приветствие.

   
 
 автор: home-studia   (14.02.2009 в 18:37)   письмо автору
 
   для: Slo_Nik   (14.02.2009 в 18:26)
 

Так сессия существует, я уже проверял выводя приветствие. Но авторизировать не хочет, при повторной загрузке страницы, хотя сессия и жива.

   
 
 автор: home-studia   (14.02.2009 в 18:38)   письмо автору
 
   для: home-studia   (14.02.2009 в 18:37)
 

Выложи пожалуйста целиком свой вариант кода.

   
 
 автор: Slo_Nik   (14.02.2009 в 19:08)   письмо автору
1.4 Кб
 
   для: home-studia   (14.02.2009 в 18:38)
 

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

   
 
 автор: home-studia   (14.02.2009 в 19:15)   письмо автору
 
   для: Slo_Nik   (14.02.2009 в 19:08)
 

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

P.S. не заметил сразу приложенный файл, спасибо, сейчас посмотрю.

   
 
 автор: home-studia   (14.02.2009 в 19:27)   письмо автору
 
   для: home-studia   (14.02.2009 в 19:15)
 

Попробовал твой вариант, если сессия уже открыта то все класно и все работает, но если сбросить сессию и попробовать вновь авторизироваться то выдает ошибку enter.php on line 21 это получается:

header("location:".$_SERVER['PHP_SELF']);


В чем может быть дело?

   
 
 автор: Slo_Nik   (14.02.2009 в 19:31)   письмо автору
 
   для: home-studia   (14.02.2009 в 19:27)
 

напиши полность что тебе выдаёт, а не окончание строки.

   
 
 автор: home-studia   (14.02.2009 в 19:34)   письмо автору
 
   для: Slo_Nik   (14.02.2009 в 19:31)
 

Вот это:

Warning: Cannot modify header information - headers already sent by (output started at W:\home\site\www\test\test\connect.php:9) in W:\home\site\www\test\test\enter.php on line 21

   
 
 автор: home-studia   (14.02.2009 в 19:56)   письмо автору
 
   для: home-studia   (14.02.2009 в 19:34)
 

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

   
 
 автор: Slo_Nik   (14.02.2009 в 19:59)   письмо автору
 
   для: home-studia   (14.02.2009 в 19:34)
 

это говорит о том, что "на может модифицировать содержимое заголовка - заголовок уже послан в" и далее указывается где надо смотреть ошибку.
посмотри что у тебя на 9 строке в connect.php.
ты ни чего ни где не менял?
у меня такой ошибки нет.

   
 
 автор: home-studia   (14.02.2009 в 20:02)   письмо автору
 
   для: Slo_Nik   (14.02.2009 в 19:59)
 

Нет, менял только путь до файла config. В этом ничего не трогал. Вот на что указывает ошибка:


<?php      // вот на эту строку
10 include("enter.php");
11 ?>

   
 
 автор: home-studia   (14.02.2009 в 20:04)   письмо автору
 
   для: home-studia   (14.02.2009 в 20:02)
 

Но что может быть, почему приветствие появляется только после обновления страницы?

   
 
 автор: Slo_Nik   (14.02.2009 в 20:53)   письмо автору
 
   для: home-studia   (14.02.2009 в 20:04)
 

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

   
 
 автор: home-studia   (14.02.2009 в 21:01)   письмо автору
 
   для: Slo_Nik   (14.02.2009 в 20:53)
 

Я просто закинул твои файлы из архива и все, единственное у тебя был путь config/config.php я изменил на config.php

   
 
 автор: Trianon   (14.02.2009 в 21:03)   письмо автору
 
   для: home-studia   (14.02.2009 в 20:02)
 

у Вас до 9-й строки в файле куча текста.
Весь этот текст уже ушел в поток браузера. Так что отправлять любые поля заголовка уже поздно.
Поэтому никакие header(), session_start(), setcookie() работать не будут.

   
 
 автор: home-studia   (14.02.2009 в 21:14)   письмо автору
 
   для: Trianon   (14.02.2009 в 21:03)
 

Как вы предалаете изменить? И они ведь вроде как работают, просто применяются почему-то только после обновления странички.

   
 
 автор: Trianon   (14.02.2009 в 21:17)   письмо автору
 
   для: home-studia   (14.02.2009 в 21:14)
 

Я? Никак не предлагаю.
Я вообще написал это больше для Вашего оппонента, мужеством которого искренне восхищаюсь :)

   
 
 автор: Slo_Nik   (14.02.2009 в 21:20)   письмо автору
 
   для: Trianon   (14.02.2009 в 21:03)
 

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

   
 
 автор: Trianon   (14.02.2009 в 21:29)   письмо автору
 
   для: Slo_Nik   (14.02.2009 в 21:20)
 

если включена буферизация выходного потока (и буфер не переполнен) - заголовки будут проходить и после вывода.
output_buffering в php.ini (или аналогичная инструкция .htaccess )

Но писать код в расчете на это - фе.

   
 
 автор: home-studia   (14.02.2009 в 21:36)   письмо автору
 
   для: Trianon   (14.02.2009 в 21:29)
 

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

   
 
 автор: Slo_Nik   (14.02.2009 в 22:15)   письмо автору
 
   для: home-studia   (14.02.2009 в 21:36)
 

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

   
 
 автор: home-studia   (14.02.2009 в 22:34)   письмо автору
 
   для: Slo_Nik   (14.02.2009 в 22:15)
 

Я только распокавал твой архив, как и писал выше, никакие скрипты я больше не вставлял.

   
 
 автор: Slo_Nik   (14.02.2009 в 22:39)   письмо автору
 
   для: home-studia   (14.02.2009 в 22:34)
 

в таком случае всё должно работать.

   
 
 автор: home-studia   (14.02.2009 в 22:42)   письмо автору
 
   для: Slo_Nik   (14.02.2009 в 22:39)
 

Оно и работает, но приветствие появляется только после обновления странички (1. авторизируешься - поля ввода логина и пароля исчезают, 2 нужно обновить страничку, чтобы по проиветствовало по имени)

   
 
 автор: Slo_Nik   (14.02.2009 в 23:07)   письмо автору
 
   для: home-studia   (14.02.2009 в 22:42)
 

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

   
 
 автор: home-studia   (14.02.2009 в 23:18)   письмо автору
 
   для: Slo_Nik   (14.02.2009 в 23:07)
 

Смотрим:
connect.php
<?php session_start();?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Untitled Document</title>
</head>
<body>
<?php
include("enter.php");
?>
<h1>Это первая страница</h1>
<br /> 
<a href='connect2.php'>перейти</a>
</body>
</html>

connect2.php
<?php session_start();  ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Untitled Document</title>
</head>
<body>
<?php
include("enter.php");
?>
<h1>Это вторая страница</h1>
<br />
<a href='connect.php'>перейти</a>
</body>
</html>

enter.php
<?php
include_once("config.php");
if(!
$_SESSION['login']){
    if(!empty(
$_POST['login']) && !empty($_POST['password'])){ 
    
    if(isset(
$_POST['login']))$login $_POST['login']; 
    if(isset(
$_POST['password']))$password $_POST['password']; 
    
    
$query "SELECT `id`, `login`, `password`, `email` 
                        FROM `users`
                        WHERE `login` ='
$login' AND `password`='$password'   
                        LIMIT 1"

    
    
$sql mysql_query($query); 
    
    if(!
$sql) echo "ошибка при обращении к БД".mysql_error(); 
    
        if(
mysql_result($sql,0) > 0){
        
$_SESSION['login'] = $login;   
        
$_SESSION['password'] = $password;
        
header("location:".$_SERVER['PHP_SELF']); 
        }
        else echo 
"такого пользователя нет!!!"
    } 

    else { 
    echo 
"<form method=post>
     <input type='text' name='login' > 
     <input type='password' name='password' > 
     <input type='submit' value=Войти > 
    </form>"  

    } 
}
else {
echo 
"Привет <b>".$_SESSION['login']."</b><br> Твой пароль -".$_SESSION['password'];
}
?>

   
 
 автор: Trianon   (14.02.2009 в 23:23)   письмо автору
 
   для: Slo_Nik   (14.02.2009 в 23:07)
 

так а какие чудеса?
header() вызывается из enter.php
enter.php подключается уже после того как <!DOCTYPE ....<body> ушло в поток.
Всё закономерно. header() выполнен не будет.

   
 
 автор: Slo_Nik   (14.02.2009 в 23:32)   письмо автору
 
   для: Trianon   (14.02.2009 в 23:23)
 

ну у меня же выполняется :)
а если применить ob_start();?

   
 
 автор: Trianon   (14.02.2009 в 23:38)   письмо автору
 
   для: Slo_Nik   (14.02.2009 в 23:32)
 

Блин! У Вас включен буфер на 4Кб
Выключите - увидите то же самое.

   
 
 автор: Slo_Nik   (14.02.2009 в 23:48)   письмо автору
 
   для: Trianon   (14.02.2009 в 23:38)
 

ну выключил, попробовал с ob_start(); ошибка ушла, всё работает :)

   
 
 автор: Trianon   (14.02.2009 в 23:53)   письмо автору
 
   для: Slo_Nik   (14.02.2009 в 23:48)
 

я вообще-то не про это.

   
 
 автор: Slo_Nik   (14.02.2009 в 23:56)   письмо автору
 
   для: Trianon   (14.02.2009 в 23:53)
 

тогда про что?

   
 
 автор: Trianon   (15.02.2009 в 00:12)   письмо автору
 
   для: Slo_Nik   (14.02.2009 в 23:56)
 

про то что Вы пишете "ищи ошибку у себя" в то время как она у Вас.

   
 
 автор: Slo_Nik   (15.02.2009 в 00:37)   письмо автору
 
   для: Trianon   (15.02.2009 в 00:12)
 

ну если бы знать всё нюансы...

   
 
 автор: Slo_Nik   (15.02.2009 в 00:00)   письмо автору
 
   для: Trianon   (14.02.2009 в 23:53)
 

можно переделась скрипт, что бы не заморачиваться по поводу header, а толку?

   
 
 автор: home-studia   (15.02.2009 в 00:04)   письмо автору
 
   для: Slo_Nik   (15.02.2009 в 00:00)
 

Так кто-нибудь может подсказать решение? :-)

   
 
 автор: Slo_Nik   (15.02.2009 в 00:10)   письмо автору
 
   для: home-studia   (15.02.2009 в 00:04)
 

включи на локальном output_buffering, проверь,работает или нет?
можешь после session_start() вписать ob_start(); всё должно работать.
разница была в том, что у меня эта настройка была включена по умолчанию.
выключил, появилась твоя ошибка, применил ob_start() всё заработало :)

   
 
 автор: Slo_Nik   (14.02.2009 в 22:11)   письмо автору
 
   для: Trianon   (14.02.2009 в 21:29)
 

я не собираюсь писать код в расчёте на это.
я проверял скрипты на локальном, ставил apache сам, может надо что то поменять в php.ini. я пока не вдаюсь в тонкости конфигурирования, полагаюсь на умолчаниt, поэтому с спросил.
вот такое значение output_bufferin 4096 у меня в php.ini.

   
 
 автор: Trianon   (14.02.2009 в 22:17)   письмо автору
 
   для: Slo_Nik   (14.02.2009 в 22:11)
 

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

   
 
 автор: Slo_Nik   (14.02.2009 в 22:46)   письмо автору
 
   для: Trianon   (14.02.2009 в 22:17)
 

ну это понятно. при реальных условиях используют такое же значение?
я не могу понять почему у home-studiа не работает, на своём компе проверил несколько раз, всё работает нормально, приветствие выводится сразу после ввода логин/пароль и при переходе на другую страницу данные сохраняются?

   
 
 автор: Trianon   (14.02.2009 в 22:49)   письмо автору
 
   для: Slo_Nik   (14.02.2009 в 22:46)
 

ну может у него output_buffering 0 стоит ?

При реальных условиях буферизацию не включают .

   
 
 автор: home-studia   (14.02.2009 в 23:00)   письмо автору
 
   для: Trianon   (14.02.2009 в 22:49)
 

На локальном:
output_buffering = Off

(выбрасывало ошибку)
На хостинге ошибку не выбрасывает, но происходит вот такое торможение.

   
 
 автор: Slo_Nik   (14.02.2009 в 23:22)   письмо автору
 
   для: home-studia   (14.02.2009 в 23:00)
 

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

   
 
 автор: Slo_Nik   (14.02.2009 в 23:29)   письмо автору
 
   для: home-studia   (14.02.2009 в 23:00)
 

значит включай её и проверяй. всё работает. я у себя выключил, выдало твою ошибку

   
 
 автор: Slo_Nik   (14.02.2009 в 19:29)   письмо автору
 
   для: home-studia   (14.02.2009 в 19:15)
 

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

   
 
 автор: Slo_Nik   (14.02.2009 в 17:30)   письмо автору
 
   для: home-studia   (14.02.2009 в 17:20)
 

первое.
обрати внимание какими тегами ты обрамляешь session_start()
ты применяешь краткий вариант php-тегов, они работают только в том случае, если в конфигурационном файле php.ini директива short_open_tag включена, т.е имеет значение on. в противном случае может возникнуть проблемы в интерпретации.
возможно, что у тебя в настройках самого php выщеуказаная директива выключена и может поэтому возникает проблемка.
используй полный вариант php-тегов.
второе.
если ты вставишь такой код на каждой странице, то ни чего не произойдёт, так как там прописаны не твои переменные и страницы.
или ты опять конспирируешься :)?
третье.
код вполне рабочий, только его надо доводить до ума.
p.s. подправил ошибочку, запарился немного когда писал сообщение

   
 
 автор: home-studia   (14.02.2009 в 17:36)   письмо автору
 
   для: Slo_Nik   (14.02.2009 в 17:30)
 

Проверил
short_open_tag = On
, какие еще варианты? :-) Не авторизируется по этому коду даже на той странице где вводим логи и пароль.

   
 
 автор: Slo_Nik   (15.02.2009 в 00:57)   письмо автору
1.5 Кб
 
   для: home-studia   (14.02.2009 в 17:36)
 

вот ещё один вариант.
если всё будет нормально работать, то после авторизации будет совершён переход на "главную", в данном случае это файл connect.php.
дальше можно будет переходить без запроса пароля/логина, а авторизоваться можно с любой страницы.
если хочешь, что бы переход после авторизации совершался на ту страницу, с которой ты перешёл для авторизации, то пусть будет твоим домашним заданием :)

   
 
 автор: home-studia   (15.02.2009 в 04:57)   письмо автору
 
   для: Slo_Nik   (15.02.2009 в 00:57)
 

Спасибо, хороший пример, воспользовался им как основой :-) Хотелось бы вернуться к вопросу вывода e-mail. Оказывается даже если создать еще одну графу, например “test”, занести в нее любую информацию и попытаться вывести, то ничего не происходит.

   
 
 автор: Slo_Nik   (15.02.2009 в 05:26)   письмо автору
 
   для: home-studia   (15.02.2009 в 04:57)
 

да всё так же как и логин/пароль, занести в сессию.присвоить $_SESSION['email'] значение поля "email" из БД.
только одна заморочка тут,надо поменять функцию, которая возвращает результат запроса.
mysql_result
возвращает значение одной ячейки. для вывода тебе надо использовать функцию которая возвращает значение нескольких ячеек сразу, например mysql_fetch_array.работают они быстрее чем используемая тобой функция.
В этом случае тебе надо будет немного переписать файл enter.php. поройся в мануале, почитай как сделать.
ну а если оставить mysql_result, то тебе надо будет указать из какого поля надо получить значение, опять же всё можешь посмотреть в мануале.
примерно так
<?php $_SESSION['email'] = mysql_result($sql,0,"email");

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

   
 
 автор: cheops   (15.02.2009 в 12:20)   письмо автору
 
   для: home-studia   (11.02.2009 в 18:44)
 

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

   
Rambler's Top100
вверх

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