В форме у меня есть окно ввода( код ниже) туда я ввожу значение, заношу его в сессию( так как на странице у меня две формы) и вывожу. При перезагрузке страницы делаю проверку на существование сессии, если она существует, то вывожу из нее значение. Так вот когда я стираю значение из сессии и ввожу 0. При нажатии на кнопку у меня 0 не появляется, а выводиться значение сессии. Как сделать вывод 0. Код (Text): <input type="text" name="Down" value="<?php if($_POST['Down']) { $_SESSION['down'] = $_POST['Down']; echo $_POST['Down']; unset($_POST['Down']); } elseif($_POST['Down'] == "") { echo 0; } elseif($_SESSION['down']) { echo $_SESSION['down']; }?>"/> Добавлено спустя 1 минуту 55 секунд: Если это убрать тоже не работает Код (Text): unset($_POST['Down']);
[ offtopic ] открой для себя тернарный оператор и короткий способ написания <?php echo ?>, будет выглядеть намного читабельнее: Код (PHP): <?= $if ? $then : $else ?> [ /offtopic ]Логика твоего скрипта хитра и загадочна. Что-то ты перемудрил с цепочкой if-elseif. И из твоего описания непонятно чего ты хочешь, прям не знаю что посоветовать. Попробуй заново сформулировать хотелку.
Я передаю с предыдущей страницы значение $_POST['Down'], оно выводиться в окне input. Так как у меня на странице две формы, то я заношу его в сессию, потому что при нажатии на кнопку во второй форме значения из первой изчезает. Так вот в чем проблема: К примеру я переслал 3, и изменил на 4, нажимаю кнопку вижу 4. Делаю изменения в другой форме, в первой форме значения остаются неизменными. ПРАВИЛЬНО. Мне необходимо чтобы при вводе 0. И нажатии на кнопку, после обновления выводился 0, а не значение из сессии. ( то есть 4, в моем случае)
Абзац про то «как сейчас» пропускаю, т.к. там косяк — ты сам это объявил. Давай подробнее про то, что хочется. Ты хочешь, чтобы: Если введен "0", в поле должен оставаться "0". А если данные еще не отправлялись, то в поле должно выводиться… что? А если введена пустая строка, то в поле должно вывестить… что? А если введен не "0" и не пустая строка, то в поле должно вывестить… что?
Там по умолчанию с предыдущей страницы всегда прилетает число. Допустим 5. Пользователь зайдя на эту страницу может его изменить или оставить как есть. А если данные еще не отправлялись, то в поле должно выводиться - на эту страницу не возможно зайти не проходя предыдущей, там у меня стоит header. А если введена пустая строка, то в поле должно вывестить - 0 А если введен не "0" и не пустая строка, то в поле должно вывестить - значение которое введено( То есть цифра) Добавлено спустя 2 минуты 8 секунд: Я просто думал, что 0 и пустая строка это одно и тоже.
Я сейчас все еще раз проверил и проблема такая: если делать проверку сразу пустое или нет. К примеру если я введу 0, то я могу написать чтобы был вывод 0. Если введу цифру, то ее вывод. То есть проверять $_POST['Down'] и заносит в зависимости от этого значение в сессию, но вот в чем проблема. При использовании второй формы $_POST['Down'] у нас удаляется. И получаеться всегда выводиться 0.
Бро, сконцентрируйся. Твоя проблема в том, что ты постоянно смешиваешь суп с мухами. Изолируй задачи, избавляйся от лишних зависимостей и будь проще. Доступ к странице это вообще где-то отдельно. Удалять что-то из POST не надо. Я тебя прошу сформулировать коротко: как вывод атрибута input value зависит от только что введенных данных. Вроде получается, что всегда должен отображаться последний ввод пользователя. Что надо выводить если значение $_POST['Down'] не определено? Вот такая строка понятна? Код (PHP): <input type="text" name="Down" value="<?= $_POST['Down'] ?: '0' ?>" > P.S. Подозреваю, как только ты разберешся с выводом, запоминание в сессию решится как бы само собой
RazerVG тернарный оператор https://php.net/manual/ru/language.operators.comparison.php ... on.ternary
В моем случае получаеться Код (Text): <input type="text" name="Down" value="<?= (isset($_POST['Down'])) ? $_POST['Down'] : '0' ?>" > Получаеться condition ? true : false;
Красавчик! И в сессию должно попадать то же самое значение, верно? Код (PHP): <?php ... $_SESSION['down'] = isset($_POST['Down']) ? $_POST['Down'] : '0'; ... ?> <input type="text" name="Down" value="<?= $_SESSION['down'] ?>" > Не просто, а очень просто
Оно всегда будет определено, ну или если пользователь не ввел в input ничего, то есть оставил пустую строку - должен присваиваться 0.
Есть нюанс у isset(), которого ты возможно не знаешь. isset проверяет существует ли указанная переменная и, если существует, хранит ли она "непустое" значение. Непустое это значит != null. Пустая строка тоже не равна null. Добавлено спустя 2 минуты 11 секунд: Код (PHP): $x = ''; echo isset($x) ? 't' : 'f'; // выведет 't' Добавлено спустя 2 минуты 43 секунды: В твоем случае возможно лучшим решением будет Код (PHP): !empty($_POST['Down']) ? $_POST['Down'] : '0' !empty() истинно если переменная существует и не равна null, false, 0, '0' или ''