我正在使用mysql和php工作,我试图为学习目的取得一些成果。
所以我尝试的是制作会话消息系统,我有以下内容:
我有2个表,第一个会话和第二个conversation_messages
第一个表格会话如下所示:
c_id,user_one,user_two
第二个表 conversation_messages 如下所示:
m_id,text,date,created_by,status,c_id
所以在消息表中我设置了对话ID,当用户点击对话打开它时,url会更改为messages.php?c_id = 1或类似的东西......那很好,因为我从c_id获取c_id网址等等。
我的问题如下:
假设我不想获取所有会话消息c_id = 1.如何查询表格并获取该会话ID的所有消息。此外,我需要查询,只有当记录的用户参与对话时才会返回结果...所以登录的用户只有在他/是用户A(user_one)或用户B(user_two)时才能看到对话消息。我该怎么做,我需要加入表格。那么最好的方法是什么。
因此,当用户手动登录到url messages.php?c_id = 3时,如果他没有参与该对话,我就不希望他看到它。
抱歉,我是新来的,并且不知道如何正确格式化代码或其他任何内容。
提前致谢。
答案 0 :(得分:1)
您需要从会话中获取已记录的用户ID并将其放入查询中
SELECT * FROM conversation_message, conversation
WHERE conversation.c_id = $ID_OF_CONVERSATION
AND (user_one = $ID_LOGGED_USER OR user_two = $ID_LOGGED_USER)
AND conversation_message.c_id = conversation.c_id
答案 1 :(得分:0)
从广义上看,如果要为某个端点添加安全性,则需要在验证用户输入后允许或拒绝访问。在您给出的示例中,您的用户输入是c_id值3.在一个简单的PHP示例中,您可以执行以下操作:
$user_id = $_SESSION['user_id'];
$can_access = false;
$convo_id = $_GET['c_id'];
$safe_id = mysql_real_escape_string( $convo_id );
$rli = mysql_query( "SELECT * FROM conversation WHERE c_id = {$safe_id}" );
if( mysql_num_rows( $rli ) ) {
$convo = mysql_fetch_object( $rli );
$can_access = $convo->user_one == $user_id || $convo->user_two == $user_id;
}
请注意,在此示例中,我从会话中提取了“登录”用户的ID,该会话假定您正在使用会话。创建“登录”用户视图有许多不同的方法,这有点超出了本答案的范围。这里的最终结果是一个布尔值变量$ can_access,它指示用户是否可以访问该页面。假设他们可以访问该页面,您可以从现在验证的对话中提取所有消息,如下所示:
$rli = mysql_query("SELECT * FROM conversation_messages WHERE c_id = {$safe_id}");
$messages = array();
while( $message = mysql_fetch_object( $rli ) ) {
$messages[ $message->m_id ] = $message;
}
上面给出了一个PHP数组,其中包含与对话关联的所有消息。希望这足以让你开始。