2010-10-23 130 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