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

Форум PHP

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

 

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

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

тема: Не работают куки
 
 автор: SnooPI   (19.05.2007 в 13:26)   письмо автору
 
 

Скажите пожалуйста, почему в нижеприведенном коде не работают куки ?!
<?php
if($_POST['name'] && $_POST['password']) {

    if(!
get_magic_quotes_gpc())
    {
          
$password mysql_escape_string($_POST['password']);
          
$name     mysql_escape_string($_POST['name']);
      } else {
          
$password $_POST['password'];
          
$name     $_POST['name'];
      }

      
$password md5($password);
      
$query "SELECT * FROM `users` WHERE `name` = '".$name."' AND `pass` = '".$password."'";
      
$result mysql_query($query);
      if(!
$result) exit("Ошибка");

    if(
mysql_num_rows($result))
    {
        
$_SESSION['fname'] = $name;
        
$_SESSION['password'] = $password;
         
setcookie('name_cook',$_SESSION['fname'],time()+ 86400 30 12);
          
setcookie('pass_cook',$_SESSION['password'],time()+ 86400 30 12);
        echo 
"<HTML><HEAD><META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php'></HEAD><body>";
      } else {
        echo(
"Неверный пароль");
        echo 
"<HTML><HEAD><META HTTP-EQUIV='Refresh' CONTENT='1; URL=index.php'></HEAD><body>";
    }
     }

    if(
$_GET['do'] == 'logout')
    {
        
setcookie('name_cook'"");
        
setcookie('pass_cook'"");
        
session_destroy();
        echo 
"<HTML><HEAD><META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php'></HEAD></HTML>";
     }

?>

   
 
 автор: Unkind   (19.05.2007 в 13:31)   письмо автору
 
   для: SnooPI   (19.05.2007 в 13:26)
 

Вот этот кусок кода:


<?php
if(!get_magic_quotes_gpc()) 
    { 
          
$password mysql_escape_string($_POST['password']); 
          
$name     mysql_escape_string($_POST['name']); 
      } else { 
          
$password $_POST['password']; 
          
$name     $_POST['name']; 
      }
?>


Лучше заменить на


<?php
    
if(!get_magic_quotes_gpc()) 
    {
    
$password $_POST['password']; 
    
$name mysql_escape_string($_POST['name']);
    }
    else
    { 
    
$password stripslashes($_POST['password']); 
    
$name $_POST['name']; 
    }
?>


Потому как дальше Вы вычисляете хеш из $password. А если там будут лишние бекслеши - только хуже.

   
 
 автор: SnooPI   (19.05.2007 в 14:19)   письмо автору
 
   для: Unkind   (19.05.2007 в 13:31)
 

Вообщем теперь пишет ошибку обычную headers already by sent......
Вот как в моем случае, в моем коде исправить её??не поставить ведь никуда выше :(

   
 
 автор: Trianon   (19.05.2007 в 14:49)   письмо автору
 
   для: SnooPI   (19.05.2007 в 14:19)
 

первым байтом файла является какой символ? Уголок?

   
 
 автор: SnooPI   (19.05.2007 в 15:06)   письмо автору
 
   для: Trianon   (19.05.2007 в 14:49)
 

Вот весь код файла....
<?php

     
include ("header.php");

    echo 
"<form action='auth.php' method='post'>
    Login : <br /><input type='text' name='name' value='"
.$_SESSION['name']."' /><br /><br />
    Pass : <br /><input type='password' name='password' value='"
.$_SESSION['password']."' /><br /><br />
    <input type='submit' value='Войти' title='Войти' />
    </form>"
;

    if(
$_POST['name'] && $_POST['password'])
    {

        if(!
get_magic_quotes_gpc())
        {
              
$password $_POST['password'];
              
$name     mysql_escape_string($_POST['name']);
          } else {
              
$password stripslashes($_POST['password']);
              
$name     $_POST['name'];
          }

          
$password md5($password);
          
$query "SELECT * FROM `users` WHERE `name` = '".$name."' AND `pass` = '".$password."'";
          
$result mysql_query($query);
          if(!
$result) exit("Ошибка");

        if(
mysql_num_rows($result))
        {
            
$_SESSION['fname'] = $name;
            
$_SESSION['password'] = $password;
             
setcookie('name_cook',$_SESSION['fname'],time()+ 86400 30 12);
              
setcookie('pass_cook',$_SESSION['password'],time()+ 86400 30 12);
            echo 
"<HTML><HEAD><META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php'></HEAD><body>";
          } else {
            echo(
"Неверный пароль");
            echo 
"<HTML><HEAD><META HTTP-EQUIV='Refresh' CONTENT='1; URL=index.php'></HEAD><body>";
        }
     }

    if(
$_GET['do'] == 'logout')
    {
        
setcookie('name_cook'"");
        
setcookie('pass_cook'"");
        
session_destroy();
        echo 
"<HTML><HEAD><META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php'></HEAD></HTML>";
     }

    include (
"footer.php");
?>


в header.php сначала идет session_start();
Потом вывод сайта =)

   
 
 автор: Trianon   (19.05.2007 в 15:20)   письмо автору
 
   для: SnooPI   (19.05.2007 в 15:06)
 

Покажите шестнадцатеричный код первых двух байх этого файла и файла header.php.
весь код тут не нужен совершенно.

   
 
 автор: SnooPI   (19.05.2007 в 17:54)   письмо автору
 
   для: Trianon   (19.05.2007 в 15:20)
 

А как мне это сделать?

   
 
 автор: bronenos   (19.05.2007 в 18:36)   письмо автору
 
   для: SnooPI   (19.05.2007 в 17:54)
 

короче до куков не должно быть никакого вывода, ни echo, ни print, ни даже лишних пробелов перед <?php
проверьте это!

   
 
 автор: Trianon   (19.05.2007 в 18:55)   письмо автору
 
   для: SnooPI   (19.05.2007 в 17:54)
 

понятия не имею, честно говоря. Зависит от Ваших предпочтений в инструментарии.
Я это делаю в FAR или NDN. Вы можете применить любую из тех программ, которые это умеют и Вас устраивают. На самый худой конец - сравните файл с другим, наперед отличным от Вашего, командой fc /b file1 file2 | more

   
 
 автор: Unkind   (19.05.2007 в 19:40)   письмо автору
 
   для: Trianon   (19.05.2007 в 18:55)
 

Лучше тогда уж открыть файл в WordPad'е - он Unicode не поддерживает. И удалить лишние символы до "<?php".

   
 
 автор: Trianon   (19.05.2007 в 23:19)   письмо автору
 
   для: Unkind   (19.05.2007 в 19:40)
 

Вот как бы пропатчить PHP, чтоб он сам BOM выкидывал....

   
 
 автор: mefestofel   (20.05.2007 в 00:00)   письмо автору
 
   для: SnooPI   (19.05.2007 в 17:54)
 

Удалите все символы перед <?php, даже пробелы!

   
 
 автор: SnooPI   (20.05.2007 в 02:47)   письмо автору
 
   для: mefestofel   (20.05.2007 в 00:00)
 

Вот это в загнались не в ту сторону проблемы )))
Ошибка эта из-за того что у меня есть вывод хтмл, до setcookie....
Там мне нужен этот вывод...убрать его нельзя, поэтому и спрашиваю у вас, как мне сделать в этом коде правильную устновку куков

   
 
 автор: Trianon   (20.05.2007 в 03:40)   письмо автору
 
   для: SnooPI   (20.05.2007 в 02:47)
 

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

Кроме того, Вы в предыдущих постах утверждали, что до setcookie вывода у Вас нет.
Как это понимать?

   
 
 автор: bronenos   (20.05.2007 в 07:03)   письмо автору
 
   для: Trianon   (20.05.2007 в 03:40)
 

попробуйте через буфер тогда

   
 
 автор: SnooPI   (20.05.2007 в 15:58)   письмо автору
 
   для: bronenos   (20.05.2007 в 07:03)
 

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

   
 
 автор: Trianon   (20.05.2007 в 16:24)   письмо автору
 
   для: SnooPI   (20.05.2007 в 15:58)
 

Запрос и процесс выполнения скрипта, выводящего форму ввода и соответственно -
запрос(путем отправки формы браузером) и процесс выполнения скрипта, обрабатывающего данные формы и создающего куки - это РАЗНЫЕ пары запрос-процесс.

   
Rambler's Top100
вверх

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