PHP komut dosyasını silmek, 'viewsubjects.php? Classroom_id = HAYIR DEĞER' dönün

6 Cevap php

Başlık devletler gibi ... Ben derslik görüntülemek için bir 'sınıf' bir 'konu' silme ediyorum, o sınıf için konuyu görüntülemek için bir sınıf üzerine tıklayabilirsiniz. Yani konuları inceleyen am bağlantı gibi görünüyor:

viewsubjects.php?classroom=23

Kullanıcı bir sınıftan bir konu çıkarmak için (üst üste) silme düğmesi seçtiğinde, ben sadece kullanıcı sınıf için konuların listesine geri yönlendirilmesini istiyorsanız (önce onlar tam olarak!)

Yani olsa bu sadece benim silme komut dosyası içindeki sınıf ID çağıran bir durumdur. İşte ne var:

EDIT: (bu sorun değildi) kod yazım hatası düzeltildi

    $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();

Konu DB kaldırılır ediliyor, ama geri yönlendirildi zaman tanım gibi boş bir sınıf kimliği ile görüntülüyor:

viewsubjects.php? classroom_id =

Bu kullanıcı geri sayfaya yönlendirileceksiniz sağlayan, sonra görüntülenebilir böylece silme komut dosyası aracılığıyla başarıyla aracılığıyla sınıf kimliğini taşımak için bir yolu var mı? Herhangi bir yardım için teşekkür ederiz!

6 Cevap

Kodunuzu Yazım hata?

Change line 2 to: $classroom_id = $_GET['classroom'];

Harika: Bu bir yönetici işlev ise, sadece, dikkat.

Bu ön ucunda ise, sitenizin içine kesmek çok kolay olurdu subject_id temiz olduğundan emin dikkate almak gerekir.

Bu $classroom_id = $_GET['classroom']; olmalıdır

Not: $classroom_id = $_GET['classrom_id'];

EDIT Sen kodunuzu düzenlenmiş ama yok var $ _GET değişkeni maçta dize URL bu dize?

Niye gizli bir alanda silme forma classroom_id katmayan?

Bu biraz ayrıntılı olması ... ama hadi ne görelim

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();

(O da SQL Injection açığı giderir)

Yukarıdaki yanıt eğer, daha kolay todo olurdu:

if (!isset($_GET['subject_id']) || empty($_GET['subject_id']) || !is_numeric($_GET['subject_id'])) {
 throw new exception('Subject Id is not set');
}