2013-08-18 5 views
0

J'ai mis en place un système ami sur le projet sur lequel je travaille, mais maintenant j'essaye d'ajouter une fonction "supprimer ami" et de ne pas avoir la même chance.Enlever un script ami

Si des amis ont accepté la valeur est 1, si l'attente il est 0.

Je reçois aucun message d'erreur, mais quand je vérifie dans ma base de données, il est de retirer le dossier de la relation ami.

La fonction

function unfriend(str) 
    { 
     $("#Hint").html('Cancelling friendship..'); 
     $.ajax({ 
      type: "POST", 
      url: "parsers/friend_remove.php", 
      data: "type=uf&the_id=" +str, 
      success: function(msg){ 
       $("#Hint").html(msg); 
      } 
     }); 

<div onclick="unfriend('<?php echo $fetch_invites->id; ?>');" style="cursor:pointer"> 
     <input type="button" value="Remove as Friend"> 
     </div> 

Le fichier php "de friend_remove".

<?php 
include '../core/init.php'; 

$logged_id = $_POST['uid']; 
$friend_id = $_POST['fid']; 

$exist = mysql_query("SELECT 1 FROM friends WHERE `user_id`='{$logged_id}' AND `friend_id`='{$friend_id}'"); 
$exist = mysql_num_rows($exist); 

if($exist > 0) 
{ 
    echo 'Friend request already sent!'; 
}else{ 
    $remove = "DELETE FROM `friends` WHERE user_id='$logged_id' AND friend_id='$friend_id' OR user_id='$logged_id' AND friend_id='$logged_id'"; 
    mysql_query($remove) or die(mysql_error()); 

    echo "<input type='button' value='Friend removed'>"; 
} 
?> 
+0

double possible de [requis OÙ ET clause ajout à plusieurs OR] (http://stackoverflow.com/questions/11673038/required-where-and-clause-in-addition-to-multiple-ors) – JJJ

+2

Vous utilisez [une ** API de base de données obsolète **] (http://stackoverflow.com/q/12859942/19068) et devrait utiliser un [remplacement moderne] (http://php.net/manual/en/mysqlinfo.api.choosing.php). Vous êtes également vulnérable aux [attaques par injection SQL] (http://bobby-tables.com/) ** qu'une API moderne rendrait plus facile à [défendre] (http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php). – Quentin

+0

Comme le dit le premier article .. Je ne reçois aucun message d'erreur, mais quand je vérifie dans ma base de données c'est enlever le disque de la relation d'ami. – user2571547

Répondre

0

Il ressemble

$remove = "DELETE FROM `friends` WHERE user_id='$logged_id' AND friend_id='$friend_id' OR user_id='$logged_id' AND friend_id='$logged_id'" 

ne correspondra jamais à quoi que ce soit dans votre table (à moins que je comprends mal comment la priorité des opérateurs dans SQL fonctionne). Essayez ceci:

$remove = "DELETE FROM `friends` WHERE (user_id='$logged_id' AND friend_id='$friend_id') OR (user_id='$logged_id' AND friend_id='$logged_id')" 

EDIT: En supposant que vous vouliez dire « ne pas supprimer l'enregistrement de la base de données » dans votre question.

+0

Merci pour votre réponse, mais cela n'a toujours pas fonctionné :(relation d'ami est intacte dans la base de données – user2571547

+0

'$ remove =" DELETE FROM 'amis' WHERE (id_utilisateur = '$ id_journalisé' AND ami_id = '$ friend_id') OU (user_id = '$ friend_id' ET friend_id = '$ logged_id') ";'? la deuxième partie de où ne pas clair pour moi ce que vous vérifier? – Axidepuy

+0

il ya 2 wheres comme la demande pourrait être envoyée par utilisateur ou ami, donc les informations des utilisateurs peuvent être à la fois dans les lignes utilisateur et ami. – user2571547

1

D'abord, votre index $ _POST de l'ID ami n'est pas le même que le paramètre ajax que vous publiez. donc ce devrait être $_POST['the_id'] pas $_POST['fid']. Et vous devriez envelopper votre sql comme mentionné par Patric Collins

0
$remove = "DELETE FROM 'friends' WHERE (user_id='$logged_id' AND friend_id='$friend_id') OR (user_id='$friend_id' AND friend_id='$logged_id')"; 

Si vous voulez juste supprimer à la fois la relation (user-> ami, ami-> utilisateur)