2009-08-12 183 views
7

Estoy usando php/mysql y protype.js para eliminar registros de una tabla. El problema es que el registro en la base de datos no se elimina.Eliminar registros de la base de datos con una solicitud de Ajax

index.php:

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

Script es

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); funciona correctamente pero el código después de que no lo es.

+1

+1 aunque simple, bien explicado. ;-) – Shoban

Respuesta

9

Está utilizando una petición GET, desde JS:

{method:'get'} 

Y su código PHP utiliza datos que piensa llega como POST:

$ID = $_POST['id']; 

debería utilizar el mismo método en ambos lados.

(Como se va a modificar/borrar los datos, probablemente debería utilizar la POST)


Como comentario, usted debe escapar definitivamente/protected/comprobar los datos que se está utilizando en la consulta SQL, a evite las inyecciones de SQL, usando, por ejemplo, intval ya que está trabajando con un entero; usarías mysql_real_escape_string si estuvieras trabajando con una cadena.

Otra forma sería la de dejar de usar la antigua extensión mysql, y comenzar a usar mysli o PDO, lo que significa que podría utilizar declaraciones preparadas (mysqli, pdo)


EDITAR después del comentario: también , ahora que la solicitud se realiza en POST, es necesario cambiar la forma en que se pasan los parámetros: ya no se deben pasar en la URL.

supongo que algo como esto debería funcionar:

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

O también se podría usar algo como esto, la construcción de la cadena de parámetros de sí mismo:

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

(No se ha probado, por lo que podría tiene que cambiar algunas cosas ;-))

Para obtener más información, eche un vistazo a Ajax.Request y Ajax options :-)

+0

bien querido, he hecho {method: 'post'} y el archivo php $ ID = $ _POST ['id']; pero no funcionan –

+0

También necesita cambiar la forma en que se pasa el parámetro: si está utilizando POST, el parámetro no se debe pasar en la URL, pero usando la opción 'parámetros'; ver http://www.prototypejs.org/api/ajax/request y http://www.prototypejs.org/api/ajax/options para más información –

+0

Ok ahora el registro puede ser eliminado pero necesito actualizar la página, para ver los cambios Entonces, ¿cómo puedo codificar para eliminar ese registro de la página actual? La respuesta del servidor sería bool para que podamos determinar si el registro se borró o no. ¿Me puedes ayudar a desarrollar esto? –

0

Parece que su solicitud ajax está utilizando GET pero su script de eliminación está tratando de recuperar la identificación a través de POST. Intente configurar {method:'get'} en {method:'post'}.

+0

bien querido lo he hecho {method: 'post'} a {method: 'post'}. pero no hay resultados –

0

Cambiar borrar.php como esta:

<?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, alternativamente, se utiliza en frío $ _REQUEST en lugar de $ _GET (o $ _POST en el primer ejemplo), puesto que agrega $ _GET y $ _POST matrices.

+0

Ok hermano, ahora el registro se puede eliminar pero necesito actualizar la página, para ver los cambios. Entonces, ¿cómo puedo codificar para eliminar ese registro de la página actual? La respuesta del servidor sería bool para que podamos determinar si el registro se borró o no. ¿Me puedes ayudar a desarrollar esto? –

Cuestiones relacionadas