2010-05-28 3 views
0

J'ai une petite application web personnelle sur laquelle je travaille. J'ai un lien qui, lorsqu'on clique dessus, est supposé faire un appel ajax à un php censé supprimer cette information d'une base de données. Pour une raison inconnue, il ne supprimera pas réellement la ligne de la base de données. J'ai essayé tout ce que je sais, mais toujours rien. Je suis sûr que c'est quelque chose d'incroyablement facile ... Voici les scripts impliqués.jQuery ajax delete script pas réellement de suppression

sortie de base de données:

$sql = "SELECT * FROM bookmark_app"; 
    foreach ($dbh->query($sql) as $row) 
{ 
echo '<div class="box" id="',$row['id'],'"><img src="images/avatar.jpg" width="75" height="75" border="0" class="avatar"/> 
    <div class="text"><a href="',$row['url'],'">',$row['title'],'</a><br/> 
    </div> 
      /*** Click to delete ***/ 
    <a href="?delete=',$row['id'],'" class="delete">x</a></div> 
    <div class="clear"></div>'; 
     } 

    $dbh = null; 

Ajax scénario:

$(document).ready(function() { 
$("a.delete").click(function(){ 

var element = $(this); 

var noteid = element.attr("id"); 

var info = 'id=' + noteid; 

    $.ajax({ 
    type: "GET", 
    url: "includes/delete.php", 
    data: info, 
    success: function(){ 
    element.parent().eq(0).fadeOut("slow"); 
    } 
    }); 
return false; 
}); 
}); 

Code Supprimer:

include('connect.php'); 

//delete.php?id=IdOfPost 
if($_GET['id']){ 

$id = $_GET['id']; 

//Delete the record of the post 
$delete = mysql_query("DELETE FROM `db` WHERE `id` = '$id'"); 

//Redirect the user 
header("Location:xxxx.php"); 

} 
+1

$ id = intval ($ _ GET ['id']); jamais entendu parler de l'injection SQL? –

+0

SQL et maintenant? Je plaisante :) C'est toujours sur un localhost en stage de développement. Je vais pars les i et croiser les t quand il va vivre. – werm

Répondre

3

Ah juste repéré votre erreur, dans le href vous vous êtes générer ne pas définir l'attribut id. Il devrait être quelque chose comme:

<a href="..." id="'. $row['id'] . '" class="delete">x</a> 

Bien sûr, c'est juste un exemple immédiat, vous devez échapper à ce genre de choses, mais cela, vous devez laisser accéder à l'élément jQuery.

+3

N'oubliez pas que les requêtes 'destructives' doivent être effectuées via POST, sinon la simple navigation sur la 'mauvaise' URL peut entraîner la suppression des enregistrements. – Alistair

+0

Eh bien, ça a marché ... jusqu'à ce que je l'ai déplacé vers mon serveur web. Maintenant, FireBug me dit "Attention: mysql_query() [fonction.mysql-query]: Impossible de se connecter au serveur MySQL local via le socket '/var/run/mysqld/mysqld.sock' (2) dans xxxx/includes/delete .php sur la ligne 20. Stupid Media Temple – werm

+0

Peut-être http://kb.mediatemple.net/questions/4/Why+can%27t+I+connect+to+my+MySQL+database+from+PHP%3F pourrait vous aider à vous connecter? Ils ont des exemples de code en fonction de la façon dont vous êtes configuré. – Alistair

0

Vous souhaiterez peut-être modifier votre script de suppression pour ne pas rediriger uniquement après la requête DB. Comme il est appelé via AJAX, faites revenir au moins un code succès/erreur au javascript:

// can't return $delete unconditionally, since *_query() returns an object 
if ($delete) { 
    return(json_encode(array('code' => 1, 'msg' => 'Delete succeeded'))); 
} else { 
    return(json_encode(array('code' => 0, 'msg' => 'Delete failed: ' . mysql_error())); 
} 

Il est une mauvaise pratique de prendre un appel de base de données a réussi.