Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Зациклилась кнопка, нужна консультация
Форумы портала PHP.SU » » Вопросы новичков » Зациклилась кнопка, нужна консультация

Страниц (1): [1]
 

1. yesinmsg - 26 Января, 2019 - 17:05:30 - перейти к сообщению
Здравствуйте, есть 3 кнопки: выключить, перезагрузить и выполнить, отрабатывают они нормально. Однако после перезагрузки страницы выполняется действие последней нажатой кнопки. Я искал как очищать пост запросы, но это не помогает

Выполнять unset в теле кнопок после действия я так же пробовал, не очищается после перезагрузки страницы

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.    if(!empty($_POST)){
  3.       unset($_POST);
  4.       header('location:'.$_SERVER['PHP_SELF']);
  5.       die();
  6. }
  7.     if(isset($_POST['controlkeys1']))
  8. {
  9. exec("sudo shutdown");
  10. header("Refresh:0");
  11. }
  12.     if(isset($_POST['controlkeys2']))
  13. {
  14. exec("sudo reboot");
  15. header("Refresh:0");
  16. }
  17.     if(isset($_POST['controlkeys3']) && !empty($_POST['txtName']))
  18. {
  19. exec($_POST['txtName']);
  20. header("Refresh:0");
  21. }
  22.  
  23. ?>
  24. <center>
  25. <form method="POST">
  26.     <button type="submit" name="controlkeys1" value="shutdown" />Выключить</button>
  27.     <button type="submit" name="controlkeys2" value="reset" />Перезагрузить</button>
  28.     <br/>
  29.     <input type="text"   name="txtName" size="40" maxlength="35" value="sudo ls /">
  30.     <button type='submit' name="controlkeys3" value="runcmd" />Выполнить команду</button>
  31. </form>
  32. </center>


reset так же пробовал
2. difight - 29 Января, 2019 - 14:27:22 - перейти к сообщению
а unset случайно не после header("Refresh:0"); вставляли ?Улыбка Если да, то попробуйте перед ним вставить
3. Мелкий - 29 Января, 2019 - 14:30:58 - перейти к сообщению
Сделайте редирект как в 4 строке.
unset для любых $_POST, $_GET, $_COOKIE, $_SERVER делать бесполезно, их присылает клиент и если клиент их опять пришлёт - конечно они никуда не пропадут.
4. difight - 29 Января, 2019 - 14:34:18 - перейти к сообщению
Мелкий пишет:
Сделайте редирект как в 4 строке.
unset для любых $_POST, $_GET, $_COOKIE, $_SERVER делать бесполезно, их присылает клиент и если клиент их опять пришлёт - конечно они никуда не пропадут.

А разве unset не очистит $_POST, поидее должен и тогда он в условия свои не попадет
5. Мелкий - 29 Января, 2019 - 14:49:45 - перейти к сообщению
difight, во время которого из запусков скриптов?
Если не поняли, почему я спрашиваю именно так - вы просто не понимаете, как работает shared nothing архитектура PHP. Между разными запусками одного скрипта нет совершенно никакой связи. Кроме той, что запрограммируете самостоятельно.
Да, вы можете сделать unset($_POST); Он выполнится, удалит эту переменную, затем скрипт завершится, браузер пришлёт новый запрос, PHP инициализирует окружение заново. Почему здесь не должно быть $_POST, если клиент его прислал?

difight пишет:
а unset случайно не после header("Refresh:0"); вставляли ?

Кстати сюда тоже прокомментирую: не имеет значения. header не прерывает поток выполнения скрипта и как правило не будет отправлен клиенту до начала вывода страницы (или завершения скрипта).
6. difight - 29 Января, 2019 - 15:04:11 - перейти к сообщению
Мелкий пишет:
difight, во время которого из запусков скриптов?
Если не поняли, почему я спрашиваю именно так - вы просто не понимаете, как работает shared nothing архитектура PHP. Между разными запусками одного скрипта нет совершенно никакой связи. Кроме той, что запрограммируете самостоятельно.
Да, вы можете сделать unset($_POST); Он выполнится, удалит эту переменную, затем скрипт завершится, браузер пришлёт новый запрос, PHP инициализирует окружение заново. Почему здесь не должно быть $_POST, если клиент его прислал?

difight пишет:
а unset случайно не после header("Refresh:0"); вставляли ?

Кстати сюда тоже прокомментирую: не имеет значения. header не прерывает поток выполнения скрипта и как правило не будет отправлен клиенту до начала вывода страницы (или завершения скрипта).

Понял о чем вы, спасибо за разъяснение Улыбка
7. yesinmsg - 30 Января, 2019 - 18:26:22 - перейти к сообщению
Мелкий пишет:
Сделайте редирект как в 4 строке.
unset для любых $_POST, $_GET, $_COOKIE, $_SERVER делать бесполезно, их присылает клиент и если клиент их опять пришлёт - конечно они никуда не пропадут.


Выполнять редирект после нажатия кнопки я не могу, так как сервер либо выключается либо идет на перезагрузку, перенаправление просто не успеет выполнится, соответственно если я отправляю $_POST даже после перезагрузки страницы почему не выполняется это условие изначально, в этой проверке ведь происходит редирект
PHP:
скопировать код в буфер обмена
  1.    if(!empty($_POST)){
  2.       unset($_POST);
  3.       header('location:'.$_SERVER['PHP_SELF']);
  4.       die();
  5. }


Спасибо

 

Powered by ExBB FM 1.0 RC1