2010-10-23 59 views
0

我正在嘗試添加朋友的一個小項目。 當您點擊添加朋友按鈕時,您將向該add.php文件發送帶有朋友標識&用戶名(它們是每個添加按鈕的標識和名稱屬性)的Ajax呼叫。 (MYSQL結構爲:1個用戶表+ X表中指定的用戶名(列:friendid,ispending)) 在PHP文件只有2個MySQLi的疑問:這是爲補充文件的代碼:PHP + Ajax:添加朋友系統

session_start(); 
$friendid = $_POST['id']; 
$myname = $_SESSION['username']; 
$friendname = $_POST['name']; 
$myid = $_SESSION['id']; 
$add = new Mysqlconnect(); 
$add->db->query("INSERT INTO $myname VALUES($friendid, 'yes')"); 
$add->db->query("INSERT INTO $friendname VALUES ($myid, 'yes')"); 
$add->db_Close(); 

Mysqlconnect類是必需的,我只是不希望這裏的代碼太長。 這裏的Ajax調用:

$('.add').click(function(){ 
var name = $(this).attr("name"); 
var id = $(this).attr("id"); 
    $.ajax({ 
     type: "POST", 
     data: "&name="+name+"&id="+id, 
     url: 'add.php', 
     success: function(){ 
     alert("success"); 
     } 
    }); 
}); 

問題: 當我點擊「加爲好友」它確實警報「成功」,但只有一個表得到更新,每次甚至沒有桌子都沒有。 雖然有一次我點擊它,它確實工作(我沒有改變代碼,我嘗試每20秒點擊一次)。

我該如何解決這個問題?

+1

首先,你應該逃避$ _POST值... – Robus 2010-10-23 09:47:07

+0

看來你有一個單獨的表爲所有的用戶...(「INSERT INTO $ myname VALUES」)...你爲什麼要用這個。這將是更好的創建關係 – 2010-10-23 10:14:43

+0

這是要解決問題嗎?如果我這樣做,ajax電話會一直工作嗎? – user484957 2010-10-23 10:59:27

回答

1

如果我理解正確的,你你似乎是爲每個用戶創建的朋友一個新的表(1 users表+ X表中指定的用戶名)這個心不是一個好辦法,你會只用2更好表:用戶和user_friends如下:

drop table if exists users; 
create table users 
(
user_id int unsigned not null auto_increment primary key, 
username varbinary(32) unique not null 
) 
engine=innodb; 

drop table if exists user_friends; 
create table user_friends 
(
user_id int unsigned not null, 
friend_user_id int unsigned not null, 
created_date datetime not null, 
primary key (user_id, friend_user_id) -- note clustered composite PK (innodb only) 
) 
engine=innodb; 

一個完整的示例腳本可以在這裏找到:http://pastie.org/1242699

希望這有助於。

+0

如果我會這樣做,記錄會翻倍嗎?例如:5是10的朋友,10是5的朋友。有沒有辦法來防止這種情況發生,或者就這樣離開? – user484957 2010-10-23 12:15:11

+0

爲什麼要阻止它,是不是有可能爲用戶5刪除他與10的友誼鏈接,因爲也許他們不再經常聊天,但用戶10決定保持與5的友誼關係。 – 2010-10-23 14:28:17