За последние 24 часа нас посетили 54979 программистов и 1776 роботов. Сейчас ищут 877 программистов ...

Как удалить значение из сессии при вводе 0

Тема в разделе "PHP для новичков", создана пользователем RazerVG, 10 янв 2015.

  1. RazerVG

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

    С нами с:
    5 дек 2013
    Сообщения:
    103
    Симпатии:
    0
    В форме у меня есть окно ввода( код ниже) туда я ввожу значение, заношу его в сессию( так как на странице у меня две формы) и вывожу. При перезагрузке страницы делаю проверку на существование сессии, если она существует, то вывожу из нее значение. Так вот когда я стираю значение из сессии и ввожу 0. При нажатии на кнопку у меня 0 не появляется, а выводиться значение сессии. Как сделать вывод 0.
    Код (Text):
    1. <input type="text" name="Down" value="<?php if($_POST['Down'])
    2.                                                                     {
    3.                                                                         $_SESSION['down'] = $_POST['Down'];
    4.                                                                         echo $_POST['Down'];
    5.                                                                         unset($_POST['Down']);
    6.                                                                     }
    7.                                                                     elseif($_POST['Down'] == "") {
    8.                                                                         echo 0;
    9.                                                                     }
    10.                                                                     elseif($_SESSION['down'])
    11.                                                                     {
    12.                                                                         echo $_SESSION['down'];
    13.                                                                     }?>"/>
    Добавлено спустя 1 минуту 55 секунд:
    Если это убрать тоже не работает

    Код (Text):
    1. unset($_POST['Down']);
     
  2. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    [ offtopic ]
    открой для себя тернарный оператор и короткий способ написания <?php echo ?>, будет выглядеть намного читабельнее:
    Код (PHP):
    1. <?= $if $then : $else ?>
    [ /offtopic ]Логика твоего скрипта хитра и загадочна. Что-то ты перемудрил с цепочкой if-elseif. И из твоего описания непонятно чего ты хочешь, прям не знаю что посоветовать.

    Попробуй заново сформулировать хотелку.
     
  3. RazerVG

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

    С нами с:
    5 дек 2013
    Сообщения:
    103
    Симпатии:
    0
    Я передаю с предыдущей страницы значение $_POST['Down'], оно выводиться в окне input. Так как у меня на странице две формы, то я заношу его в сессию, потому что при нажатии на кнопку во второй форме значения из первой изчезает. Так вот в чем проблема: К примеру я переслал 3, и изменил на 4, нажимаю кнопку вижу 4. Делаю изменения в другой форме, в первой форме значения остаются неизменными. ПРАВИЛЬНО.

    Мне необходимо чтобы при вводе 0. И нажатии на кнопку, после обновления выводился 0, а не значение из сессии. ( то есть 4, в моем случае)
     
  4. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Абзац про то «как сейчас» пропускаю, т.к. там косяк — ты сам это объявил. Давай подробнее про то, что хочется.

    Ты хочешь, чтобы:
    Если введен "0", в поле должен оставаться "0".
    А если данные еще не отправлялись, то в поле должно выводиться… что?
    А если введена пустая строка, то в поле должно вывестить… что?
    А если введен не "0" и не пустая строка, то в поле должно вывестить… что?
     
  5. RazerVG

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

    С нами с:
    5 дек 2013
    Сообщения:
    103
    Симпатии:
    0
    Там по умолчанию с предыдущей страницы всегда прилетает число. Допустим 5. Пользователь зайдя на эту страницу может его изменить или оставить как есть.

    А если данные еще не отправлялись, то в поле должно выводиться - на эту страницу не возможно зайти не проходя предыдущей, там у меня стоит header.

    А если введена пустая строка, то в поле должно вывестить - 0

    А если введен не "0" и не пустая строка, то в поле должно вывестить - значение которое введено( То есть цифра)

    Добавлено спустя 2 минуты 8 секунд:
    Я просто думал, что 0 и пустая строка это одно и тоже.
     
  6. RazerVG

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

    С нами с:
    5 дек 2013
    Сообщения:
    103
    Симпатии:
    0
    Я сейчас все еще раз проверил и проблема такая: если делать проверку сразу пустое или нет. К примеру если я введу 0, то я могу написать чтобы был вывод 0. Если введу цифру, то ее вывод. То есть проверять $_POST['Down'] и заносит в зависимости от этого значение в сессию, но вот в чем проблема. При использовании второй формы $_POST['Down'] у нас удаляется. И получаеться всегда выводиться 0.
     
  7. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Бро, сконцентрируйся. Твоя проблема в том, что ты постоянно смешиваешь суп с мухами. Изолируй задачи, избавляйся от лишних зависимостей и будь проще. Доступ к странице это вообще где-то отдельно. Удалять что-то из POST не надо.

    Я тебя прошу сформулировать коротко: как вывод атрибута input value зависит от только что введенных данных.
    Вроде получается, что всегда должен отображаться последний ввод пользователя. Что надо выводить если значение $_POST['Down'] не определено?

    Вот такая строка понятна?
    Код (PHP):
    1. <input type="text" name="Down" value="<?= $_POST['Down'] ?: '0' ?>" >
    P.S. Подозреваю, как только ты разберешся с выводом, запоминание в сессию решится как бы само собой :)
     
  8. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  9. RazerVG

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

    С нами с:
    5 дек 2013
    Сообщения:
    103
    Симпатии:
    0
    В моем случае получаеться

    Код (Text):
    1. <input type="text" name="Down" value="<?= (isset($_POST['Down'])) ? $_POST['Down'] : '0' ?>" >
    Получаеться condition ? true : false;
     
  10. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Красавчик! И в сессию должно попадать то же самое значение, верно?
    Код (PHP):
    1. <?php
    2. ...
    3. $_SESSION['down'] = isset($_POST['Down']) ? $_POST['Down'] : '0';
    4. ...
    5. ?>
    6. <input type="text" name="Down" value="<?= $_SESSION['down'] ?>" >
    Не просто, а очень просто ;)
     
  11. RazerVG

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

    С нами с:
    5 дек 2013
    Сообщения:
    103
    Симпатии:
    0
    Оно всегда будет определено, ну или если пользователь не ввел в input ничего, то есть оставил пустую строку - должен присваиваться 0.
     
  12. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Есть нюанс у isset(), которого ты возможно не знаешь. isset проверяет существует ли указанная переменная и, если существует, хранит ли она "непустое" значение. Непустое это значит != null. Пустая строка тоже не равна null.

    Добавлено спустя 2 минуты 11 секунд:
    Код (PHP):
    1. $x = '';
    2. echo isset($x) ? 't' : 'f'; // выведет 't'   
    Добавлено спустя 2 минуты 43 секунды:
    В твоем случае возможно лучшим решением будет
    Код (PHP):
    1. !empty($_POST['Down']) ? $_POST['Down'] : '0'
    !empty() истинно если переменная существует и не равна null, false, 0, '0' или ''