2014-05-12 36 views
-1

我正在为志愿者团队创建一个留言板。在这个委员会上,人们可以写信息。这些消息可以标记为已读。在每条消息下方显示一张带有成员照片的表格。该照片的网址存储在数据库中。如果一个会员点击他的照片,这张照片会变成另一张图片,所以他知道他有红色的信息。这个功能工作得很好。php/mysql的成员和标记函数

但是所有这些照片都是手动添加到脚本中的。这意味着每当一个新的志愿者加入我们的俱乐部时,我必须更改代码(添加他的名字)以便让他标记。

我需要的是志愿者自动连接到桌子上。所以,如果我在数据库中添加志愿者姓名(不需要编辑代码),他的照片也会显示出来。每当我删除一名志愿者时,他的照片将不再显示。

我可以通过创建一个包含所有志愿者姓名的数据库并在邮件下创建一个mysql_fetch_array函数来实现此目的。但是当我这样做,志愿者A点击他的照片时,志愿者A的所有照片都会发生变化,而不仅仅是他刚刚阅读的消息,而且所有其他消息也被标记。我需要每封邮件都有一串可以标记的照片,以便用户知道他标记了单个邮件,而不是所有邮件。

这是如何实现的?

我现在所拥有的:

数据库db_users

id (AI), primary 
name (varchar), 255 
address (varchar), 255 
email (varchar), 255 
stillActive (varchar), 5 //if `value` is set to yes, his photo is displayed beneath a message. If `value` is set to no, his photo won't be visibile anymore. 

数据库db_messages

id (AI), primary 
name (varchar), 255 //the name wo entered the message 
message (varchar), 999 //the message itself 
urlUserA // the url of the photo of volunteer A 
urlUserB // the url of the photo of volunteer B 
urlUserC // the url of the photo of volunteer C 

的mark_read.php

$sql2 = "SELECT * FROM $tbl_name WHERE id = ".$_GET['id']; //to get the specific message 
$result2 = mysql_query($sql2); 
$url = $_GET['url']; // the url of the MARKED image    
$recover = $_GET['recover']; // the url of the UNMARKED image  
$tabel = $_GET['tabel']; 
$id = $_GET['id']; 
$date = $_GET['date']; 
$row = mysql_fetch_assoc($result2);   
$tabel_content = $row[$tabel]; 

if ($tabel_content == $url){ 
    $sql = "UPDATE " . mysql_real_escape_string($tbl_name) . 
     " SET ".$_GET['tabel']." = '".$_GET['recover']. 
     "' WHERE id = ".$_GET['id']; 
    $result = mysql_query($sql); 
} 
elseif ($tabel_content == $recover) { 
    $sql = "UPDATE " . mysql_real_escape_string($tbl_name) . 
     " SET ".$_GET['tabel']." = '".$_GET['url']. 
     "' WHERE id = ".$_GET['id']; 
    $result = mysql_query($sql); 
} 

上面的if代码用于查看用户是否已经标记了消息。如果它被标记并且他将再次点击他的照片,则照片将再次被取消标记。你可以看到,如果我需要添加一个新的志愿者,我必须添加一个表到数据库,更改add_message.php的代码。很多工作。我需要一些东西,只要我将用户加入db_user并保存,他就可以标记消息,而无需在使用之前创建新表urlUserD

对此的任何帮助将非常感激。

--- UPDATE ---

没关系,用这个页面增加消息:

addMSG.php

mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 

$subject = $_POST['subject']; 
$date = $_POST['date']; 
$message = $_POST['message']; 
$name = $_POST['name']; // the name from the person who posted the msg 

$sql="INSERT INTO $tbl_name(
date, 
archive, 
year, 
message, 
name, 
subject 
) 
VALUES(
'$date', 
'no', 
'2014', 
'$message', 
'$name', 
'$subject' 
)"; 

$result = mysql_query($sql); 

如何(在哪里)我做添加您的代码,以便将所有用户绑定到新创建的消息?

回答

0

你有一些数据库模式的问题,直到你解决它们,将继续使你的生活困难。具体而言,您应该有一张表格,将用户与预期给他们的消息相关联。所以你的模式可能更好的是这样的:

db_users

id (AI), primary 
name (varchar), 255 
address (varchar), 255 
email (varchar), 255 

db_messages

​​

db_message_queue

message_id // foreign key to db_messages.id first column in compound primary key 
user_id // foreign key to db_users.id second column in compound primary key 
message_read // tinyint field with 0/1 value to indicate whether message has been read 

现在,创建消息时,您需要向消息表中添加一行,并在消息队列中为所有目标收件人添加一行。当预期收件人读取队列中的邮件时,您会将其标记为已读。

+0

我想我可以处理您的建议。我准备好后会通知您;)感谢您的支持! –

+0

好的,在这里不太确定。我如何将正确的内容添加到'db_message_queue'中?有些代码需要为每个用户创建内容到数据库中。这段代码需要检查数据库中有多少用户才能将它们全部放入队列中。完成之后,消息的ID需要设置为“db_message_queue:message_id”。一旦数据存储在'db_message_queue'内,我想我知道如何继续,但是我坚持创建需要输入到'db_message_queue'中的变量。这个怎么做? –

+0

@JeffreyvanZwam你知道你在队列中输入的消息ID,而用户标识的消息是正确发送的?此时,只需执行一条“INSERT”语句即可将该数据存入表格。例如,如果要将所有用户添加为消息的收件人,则可以使用以下简单操作:INSERT INTO db_message_queue(message_id,user_id)SELECT $ message_id,id FROM db_users WHERE id <> $ user_id_who_created_message' –