PHP скрипт удаления, вернитесь к 'viewsubjects.php? Classroom_id = NO VALUE' - PullRequest
0 голосов
/ 18 марта 2010

Как гласит заголовок ... Я удаляю «предмет» из «классной комнаты», я просматриваю классные комнаты, затем могу щелкнуть классную комнату, чтобы просмотреть предмет для этой классной комнаты. Так что ссылка, по которой я просматриваю предметы, выглядит так:

viewsubjects.php?classroom=23

Когда пользователь выбирает кнопку удаления (в ряд), чтобы удалить предмет из класса, я просто хочу, чтобы пользователь был перенаправлен обратно в список предметов для класса (именно там, где они были раньше !!)

Так что я думаю, что это просто случай вызова идентификатора класса в моем скрипте удаления. Вот что у меня есть:

РЕДАКТИРОВАТЬ: исправлена ​​орфографическая ошибка в коде (это не было проблемой)

    $subject_id = $_GET['subject_id'];
    $classroom_id = $_GET['classroom_id'];

$sql = "DELETE FROM subjects WHERE subject_id=".$subject_id;
$result = mysql_query($sql, $connection)
    or die("MySQL Error: ".mysql_error());


header("Location: viewsubjects.php?classroom_id=".$classroom_id);
exit();

Тема удаляется из БД, но когда меня перенаправляют обратно, URI отображается с пустым идентификатором класса, как:

viewsubjects.php? Classroom_id =

Есть ли способ успешно передать идентификатор класса через скрипт удаления, чтобы он мог отображаться после, позволяя перенаправить пользователя обратно на страницу? Спасибо за любую помощь!

Ответы [ 6 ]

3 голосов
/ 18 марта 2010

орфографическая ошибка в вашем коде?

Измените строку 2 на: $classroom_id = $_GET['classroom'];

2 голосов
/ 18 марта 2010

Просто чтобы заметить, если это функция администратора: отлично.

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

2 голосов
/ 18 марта 2010

должно быть $classroom_id = $_GET['classroom'];

Не: $classroom_id = $_GET['classrom_id'];

РЕДАКТИРОВАТЬ Вы отредактировали свой код, но соответствует ли строка в переменной $ _GET этой строке в URL?

0 голосов
/ 18 марта 2010

Если ответ на выше, было бы проще сделать:

if (!isset($_GET['subject_id']) || empty($_GET['subject_id']) || !is_numeric($_GET['subject_id'])) {
 throw new exception('Subject Id is not set');
}
0 голосов
/ 18 марта 2010

Это может быть немного многословно ... но давайте посмотрим, что происходит с

if ( !isset($_GET['subject_id']) ) {
  echo 'DEBUG: missing GET parameter subject_id';
  var_dump($_GET);
  die;
}
if ( !isset($_GET['classrom_id']) ) {
  echo 'DEBUG: missing GET parameter classroom_id';
  var_dump($_GET);
  die;
}
else if ( 0===strlen(trim($_GET['subject_id'])) ) {
  echo 'DEBUG: empty GET parameter subject_id';
  var_dump($_GET);
  die;
}
else if ( 0===strlen(trim($_GET['classrom_id'])) ) {
  echo 'DEBUG: empty GET parameter classroom_id';
  var_dump($_GET);
  die;
}

$subject_id = mysql_real_escape_string($_GET['subject_id'], $connection);

$sql = "DELETE FROM subjects WHERE subject_id='$subject_id'";
$result = mysql_query($sql, $connection) or die("MySQL Error: ".mysql_error());
if ( 0===mysql_affected_rows($connection) ) {
  echo 'no such subject_id found. no records have been deleted';
  die;
}

header("Location: viewsubjects.php?classroom_id=".urlencode($_GET['classrom_id']));
exit();

(также исправляет уязвимость SQL-инъекций)

0 голосов
/ 18 марта 2010

Почему бы вам не добавить classroom_id в форму удаления в скрытом поле?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...