Вывод сообщений php

535
22 ноября 2017, 00:46

Есть задача. Страница (страница подтверждения удаления файла) содержит сообщение «Вы действительно хотите удалить этот файл?» и форма с двумя радио-кнопками выбора и кнопкой отправки формы (submit).

При выборе и отправке первого варианта, вместо стандартного сообщения появляется «Файл успешно удалён» и через пять секунд перенаправление на files.php.

При выборе и отправке второго — просто перенаправление на files.php.

Всё очень желательно реализовать средствами php!

Вот такой код я нацарапал, но он не работает :(

  $article = simplexml_load_file('../xml/' . $_GET['id'] . '.xml');
  if (isset($_POST['select'])) {
  $_POST['select'] = $select;
  $select = 0;
  if ($select == 'no') {
     header('location: files.php');
  } 
  elseif ($select == 'yes') {
     echo 'Страница' . $article->headline . ' удалена!';
     $filename = '../xml/' . $_GET['id'] . '.xml';
     unlink($filename);
     sleep(5);
     header('location: files.php');
  }
  else {
     echo 'Вы действительно хотите удалить статью <em>' . $article->headline . '</em>?';
  }
  }
  echo '<form action="" method="post">
  <p><input type="radio" name="select" id="no" value="no" /><label for="no"> Отмена</label></p>
  <p><input type="radio" name="select" id="yes" value="yes" /><label for="yes"> Удалить</label></p>
  <input type="submit" name="submit" id="submit" value="Подтвердить" />
  </form>';

А не работает вот что: при переходе на эту страницу не отображается сообщение «Вы действительно хотите удалить этот файл?»; при выборе обоих вариантов, просто идёт перенаправление, не выводится сообщение «Файл успешно удалён» (в первом случае) и не удаляется сам файл.

Answer 1

Давайте разбираться с Вашим кодом

if (isset($_POST['select'])) {  // Проверка, что произошел запуск обработчика формы и была нажата хоть одна радиокнопка
  $_POST['select'] = $select;  // строка не поддающаяся расшифровке. Что имелось в виду?
  $select = 0;  // Присвоили переменной $select значение 0
  if ($select == 'no') {  // проверка равна ли переменная $select "no" (а она не равна, потому, что мы присвоили ей значение 0)
    header('location: files.php');  // перенаправляем на другую страницу
  }
  elseif($select == 'yes') {  // сюда мы тоже не попадем
    echo 'Страница'.$article - > headline.
    ' удалена!';  // выводим сообщение
    $filename = '../xml/'.$_GET['id'].'.xml';  // формируем имя файла, при этом форма у нас ушла POST запросом и никаких GET параметров мы не передавали
    unlink($filename);  // удаляем файл
    sleep(5);  // делаем на сервере паузу в 5 секунд. Пользователь по прежнему ничего не видит
    header('location: files.php');  // пытаемся перенаправить на другую страницу, хотя на странице уже был вывод данных и сервер нас пошлет и мы отгребем "headers already sent"
  }
  else {  // собственно запуск текущей страницы
    echo 'Вы действительно хотите удалить статью <em>'.$article - > headline.
    '</em>?';
  }
}

В общем, как Вы поняли, работать Ваш код не может. Как его нужно модифицировать?

if (isset($_POST['select'])) {  // Проверка, что произошел запуск обработчика формы и была нажата хоть одна радиокнопка
  switch($_POST['select']) {
    case 'no':
      header('location: files.php');
      exit;
    case 'yes':
      $filename = '../xml/'.$_POST['id'].'.xml';
      unlink($filename);  // удаляем файл
      header('location: wait.php?id=' . $_POST['id']);
      exit;
  }
}
// собственно запуск текущей страницы
echo 'Вы действительно хотите удалить статью <em>'.$article - > headline. '</em>?';
echo '<form action="" method="post">
  <p><input type="radio" name="select" id="no" value="no" /><label for="no"> Отмена</label></p>
  <p><input type="radio" name="select" id="yes" value="yes" /><label for="yes"> Удалить</label></p>
  <input type="hidden" name="id" value="'.$_GET['id'] . // добавляем hidden поле для передачи id файла
  '" />
  <input type="submit" name="submit" id="submit" value="Подтвердить" />
  </form>';

Страница wait.php должна вывести сообщение о том, что файл удален, запустить JavaScript сценарий, который через 5 секунд сделает перенаправление на files.php или сделает перенаправление через <meta http-equiv="refresh"

READ ALSO
Правильный JSON

Правильный JSON

Есть файл с данными из которого нужно выбрать определенные данные, сформировать JSON и отправить по запросу на клиентПока это выглядит так

259
Проблема с RedBeanPHP

Проблема с RedBeanPHP

выдает ошибку

225