2009-08-12 7 views
7

Sto utilizzando php/mysql e protype.js per eliminare record da una tabella. Il problema è che il record nel database non viene cancellato.Elimina record dal database con una richiesta Ajax

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); funziona correttamente, ma il codice dopo che non è.

+1

+1 anche se semplice, ben spiegato. ;-) – Shoban

risposta

9

Si utilizza una richiesta GET, da JS:

{method:'get'} 

E il vostro codice PHP utilizza i dati che pensa arriva come POST:

$ID = $_POST['id']; 

si dovrebbe usare lo stesso metodo su entrambi i lati.

(Come si modifica/cancellazione dei dati, probabilmente si dovrebbe usare POST)


Come sidenote, si dovrebbe sicuramente sfuggire/protetta/check i dati in uso nella query SQL, ad evitare le iniezioni SQL, usando, ad esempio, intval mentre si lavora con un numero intero; useresti mysql_real_escape_string se stavi lavorando con una stringa.

Un altro modo sarebbe quello di smettere di usare il vecchio mysql estensione, e iniziare a utilizzare mysli o PDO, il che significa che è possibile utilizzare le istruzioni preparate (mysqli, pdo)


EDIT dopo il commento: anche voi , ora che la richiesta è fatta in POST, è necessario cambiare il modo in cui i parametri vengono passati: non dovrebbero più essere passati nell'URL.

suppongo che qualcosa del genere dovrebbe funzionare:

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

Oppure si potrebbe anche usare qualcosa come questo, la costruzione della stringa di parametri da soli:

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

(non testato, per cui si potrebbe devo cambiare alcune cose ;-))

Per ulteriori informazioni, dare un'occhiata a Ajax.Request e Ajax options :-)

+0

ok caro ho fatto {metodo: 'post'} e file php $ ID = $ _POST ['id']; ma non funzionano –

+0

È inoltre necessario modificare il modo in cui il parametro viene passato: se ora si utilizza il POST, il parametro non deve essere passato nell'URL, ma utilizzando l'opzione 'parametri'; vedi http://www.prototypejs.org/api/ajax/request e http://www.prototypejs.org/api/ajax/options per ulteriori informazioni –

+0

Ok ora il record può essere cancellato ma ho bisogno di aggiornare la pagina, per vedere i cambiamenti. Quindi, come posso codice per rimuovere quel record dalla pagina corrente? La risposta del server sarebbe bool in modo da poter determinare che il record sia eliminato o meno. Puoi aiutarmi a sviluppare questo ?? –

0

Sembra che la richiesta ajax utilizzi GET ma lo script di eliminazione sta cercando di recuperare l'ID tramite POST. Prova a impostare {method:'get'} su {method:'post'}.

+0

ok caro ho fatto {metodo: 'post'} a {metodo: 'post'}. ma non ci sono risultati –

0

Cambia eliminazione.php in questo modo:

<?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 in alternativa si utilizza il freddo $ _REQUEST invece di $ _GET (o $ _POST nel primo esempio), in quanto aggrega $ _GET e $ _POST array.

+0

OK fratello, ora il record può essere cancellato ma ho bisogno di aggiornare la pagina, per vedere le modifiche. Quindi, come posso codice per rimuovere quel record dalla pagina corrente? La risposta del server sarebbe bool in modo da poter determinare che il record sia eliminato o meno. Puoi aiutarmi a sviluppare questo ?? –

Problemi correlati