За последние 24 часа нас посетили 10398 программистов и 909 роботов. Сейчас ищут 340 программистов ...

Проблема с куками.

Тема в разделе "PHP для новичков", создана пользователем Sofia, 13 янв 2021.

  1. Sofia

    Sofia Активный пользователь

    С нами с:
    25 сен 2008
    Сообщения:
    957
    Симпатии:
    2
    Всем привет.
    Ошибка с куками возникает:
    Warning: Cannot modify header information - headers already sent by (output started at D:\***\shop-era.php:1) in D:\***\shop-era.php on line 33

    Пробелов нет. Документ начинается со строки:
    HTML:
    1. <!doctype html>
    2. <html lang="ru">
    3. ...
    В 33 строке:
    PHP:
    1. setcookie('my_name',$name,time() + (86400 * 5));
    Вот кусочек кода, с которым пытаюсь разобраться:
    PHP:
    1. <h1>Hello, world!</h1>
    2.    
    3.     <?
    4.     if (isset($_COOKIE['my_name'])) echo "Оператор: " . $_COOKIE["my_name"] . "<br>";
    5.     ?>
    6.     <select id="my_name" class="form-select form-select-lg mb-3" aria-label=".form-select-lg example">
    7.       <option selected>Выберите оператора</option>
    8.       <option value="1">Семенов Андрей</option>
    9.       <option value="2">Антелина Жанна</option>
    10.       <option value="3">Тихомирова Анна</option>
    11.     </select>
    12.    
    13.     <?
    14.     $name = '1';
    15.     setcookie('my_name',$name,time() + (86400 * 5));
    16.     ?>
    Подскажите решение плз.
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.180
    Симпатии:
    1.197
    Адрес:
    Лень
    http://phpfaq.ru/newbie/headers
    Параграф "Как исправить" - 3 абзац.
     
  3. Sofia

    Sofia Активный пользователь

    С нами с:
    25 сен 2008
    Сообщения:
    957
    Симпатии:
    2
    К сожалению нет, работаю в Notepad++ и документ сохранен в UTF8 без BOM
    Ошибка где-то таится в другом месте =(
     
  4. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.071
    Симпатии:
    220
    Вот эту часть вашего кода:
    PHP:
    1. setcookie('my_name',$name,time() + (86400 * 5));
    переместите в самое начало сценария
     
  5. Sofia

    Sofia Активный пользователь

    С нами с:
    25 сен 2008
    Сообщения:
    957
    Симпатии:
    2
    Переместила в самый верх, но мне всегда казалось, что переменные должны быть сперва определены.
    Получается тогда, что сперва пытаюсь вывести переменную, а в 30 строке у меня переменная определяяется. Таким образом ошибки нет, но и переменная не выводится.
    --- Добавлено ---
    ок, смысл понятен. Спасибо =)
    Пришлось так вот сделать:
    PHP:
    1. setcookie('my_name',$_POST['my_name']);
     
  6. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.180
    Симпатии:
    1.197
    Адрес:
    Лень
    Это не мешает прочтению статьи по выданной ссылки.
     
  7. Sofia

    Sofia Активный пользователь

    С нами с:
    25 сен 2008
    Сообщения:
    957
    Симпатии:
    2
    Статью я прочитала полностью, не только третий параграф, о чем резюмировала выше.
    Обычно, когда люди не знают ответа или не могут сформулировать предложение, то ссылаются на иные источники. Если хотели помочь, помогайте а не вводите в заблуждение.

    П.С. прошу прощение за оффтоп. Вопрос решен через костыли, хоть и не верно, но работает.
     
  8. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.180
    Симпатии:
    1.197
    Адрес:
    Лень
    @Sofia, с головой дружишь или коронавирус жмет ? o_O
    Какое к черту заблуждение ? Это faq толковая статья.

    Не.. даже на вопросы не отвечай, горите в аду блондинки...
     
  9. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.151
    Симпатии:
    1.644
    И нифига не поняли. До set_cookie не должно быть не только BOM, но и вообще, никаких echo, никакого HTML-кода. Или тут @Fell-x27 советовал использовать буферизацию вывода ob_start() как дефолт (ещё такая настройка есть, сейчас не помню на вскидку)
     
    Вероломство нравится это.