Bir Ajax isteği ile veritabanından kayıtları silme

3 Cevap php

Ben bir tablodan kayıt silmek için php / mysql ve protype.js kullanıyorum. Sorun veritabanında kaydı silinmiş olmasıdır.

index.php:

       <a href="javascript: deleteId('<?php echo $studentVo->id?>')">Delete</a></td>

Script

   function deleteId(id)
   {
       alert("ID : "+id);
       new Ajax.Request('delete.php?action=Delete&id='+id,{method:'post'});
       $(id).remove(); // because <tr id='".$row[id]."'> :)

   }

delete.php

     <?php
      /* Database connection */
      include('configuration.php');
      echo "hello,...";
      if(isset($_POST['id'])){
          $ID = $_POST['id'];
          $sql = 'DELETE FROM student where id="'.$ID.'"';
          mysql_query($sql);
      } 
      else { echo '0'; }
     ?>

alert("ID : "+id); düzgün çalışan ama bundan sonra kod değildir.

3 Cevap

Sen JS, bir GET isteği kullanıyor:

{method:'get'}

Ve PHP kodu o POST olarak geldiğinde düşünüyor verileri kullanır:

$ID = $_POST['id'];

Her iki tarafta aynı yöntemi kullanmanız gerekir.

(As you are modifying / deleting data, you should probably use POST)


As a sidenote, you should definitly escape/protected/check the data you are using in the SQL query, to avoid SQL injections, using, for instance, intval as you are working with an integer ; you'd use mysql_real_escape_string if you were working with a string.

Başka bir yolu da hazır deyimleri ({[(3) kullanabilirsiniz anlamına gelir, eski mysql uzantısını kullanarak durdurmak için olacak, ve mysli veya PDO ile başlamak istiyorum ]}, pdo)


EDIT after the comment : you also, now that the request is made in POST, need to change the way parameters are passed : they should not be passed in the URL anymore.

Ben böyle bir şey işe gerektiğini varsayalım:

var myAjax = new Ajax.Request(
  'delete.php',
  {
    method: 'post',
    parameters: {action: id}
  });

Ya da parametreleri dize kendiniz bina, bu gibi bir şey kullanabilirsiniz:

var myAjax = new Ajax.Request(
  'delete.php',
  {
    method: 'post',
    parameters: 'action=' + id
  });

(Not tested, so you might have to change a few things ;-) )

Daha fazla bilgi almak için, Ajax.Request and Ajax options :-) bir göz atın

Ajax isteği GET kullanıyor ancak silme komut POST üzerinden kimliği almak için çalışıyor gibi görünüyor. {method:'get'} ayarını try {method:'post'}.

Bu gibi delete.php değiştirin:

<?php
      /* Database connection */
      include('configuration.php');
      echo "hello,...";
      if(isset($_GET['id'])){
          $ID = $_GET['id'];
          $sql = 'DELETE FROM student where id="'.$ID.'"';
          mysql_query($sql);
      } 
      else { echo '0'; }
     ?>

O $ _GET ve $ _POST diziler agrega olarak veya alternatif olarak $ _GET (ya da ilk örnekte $ _POST) yerine $ _REQUEST kullanın soğuk.