【发布时间】:2016-11-10 02:58:16
【问题描述】:
我想将用户头像连接到他们在聊天系统中发送的消息。目前,我已经发展到在聊天中显示每个用户的图像 name.jpg (意思是:我有一个每个用户的 ID 到 INDEX)。
我现在需要拥有它,以便它使用以下代码在聊天中显示为头像
<?php echo "<img width='100' height='100' src='avatars/".$row['imagelocation']."' alt='Profile Pic'>"; ?>
我想将此处包裹在 span 中的头像显示到 $new_str 中,这是要发送的消息
<div id="chat_data">
<span style ="color:orange; font-size:10px;"><?php echo "<a href=http://localhost/db/view_member.php?id=".$row['username'].">My Profile </a>"?><span style ="color:o; font-size:24px;"><?php echo " |".$row['username']." says :"; ?></span></span>
**//LINE I WANT TO ADD THE AVATAR TO**
<span style ="color:white; font-size:20px;"><?php echo $new_str ;?></span>
<span style ="float:right; color:brown;" ><?php echo $row['date']; ?></span>
//THIS LINE DISPLAYS THE IMAGE BUT ON ALL LINES IN THE CHAT
<span style ="float:right; color:brown;" ><?php echo $row['imagelocation']; ?></span>
</div>
上面的第三个 span 标记显示用户头像,但在所有消息上我的查询是从表中选择所有内容,以便所有用户都可以看到消息,我怎样才能让我的查询显示和头像的每一行上的每个用户他们发送的消息(我使用 ID 作为每个用户的索引),但我一直试图在该用户的消息的每一行显示头像
如果我在下面包含 WHERE CLAUSE 来索引用户的 ID,则聊天不会向聊天中的所有其他用户显示所有内容。
$query = "SELECT * FROM chat ORDER BY id DESC";
$run = $con->query($query);
while($row = $run->fetch_array()):
$new_str = str_replace($row['msg']);
?>
我的表格结构 AVID 是用户 ID 表格聊天
下面是我的查询显示我如何获取 ID 和图像路径,然后更新 table tbl1
if(isset($_POST['submit'])){ // RETRIVE + UPLOAD THE IMAGE AVATAR FOR THE USER IF THEY SUBMIT A IMAGE TO UPLOAD
move_uploaded_file($_FILES['file'] ['tmp_name'],"avatars/".$_FILES['file']['name']);
include('..\db.php');
$con = mysqli_connect($dbsrvname, $dbusername, $dbpassword, $dbname);
$q = mysqli_query($con,"UPDATE tbl1 SET imagelocation = '".$_FILES['file']['name']."' WHERE username = '".$_SESSION['CurrentUser']."'");
// $me = mysqli_query($con,"UPDATE chat SET imagelocation = '".$_FILES['file']['name']."' WHERE username = '".$_SESSION['CurrentUser']."'");
}
}
注意安全尚未应用于头像上传选项
<form>
<textarea name="msg" placeholder="enter message"></textarea>
<input type="submit" name="submit" value="Send"/>
</form>
<?php
if(isset($_SESSION['CurrentUser'])){ // if session is true
if(isset($_POST['submit'])){
$name = $_SESSION['CurrentUser'];
$msg = $_POST['msg'];
// GET THE NAME OF FILE FOR THE PATH
$q = mysqli_query($con,"SELECT * FROM tbl1 WHERE username = '".$_SESSION['CurrentUser']."'");
while($row = mysqli_fetch_assoc($q)){
echo $row['imagelocation'];
$path = $row['imagelocation'];
}
////////// SELECT FROM TBL1 TO GET ID OF USER (separate query )
$q = mysqli_query($con,"SELECT * FROM tbl1 WHERE username = '".$_SESSION['CurrentUser']."'");
while($row = mysqli_fetch_assoc($q)){
echo $row['id'];
$onlineid = $row['id'];
}
////////// INSERT USERNAME MSG AND TIME + ID OF USER NAME OF FILE
$query = "INSERT INTO chat (username,msg,date,avid,imagelocation) values ('$name','$msg', now(),'$onlineid','$path')";
$run = $con->query($query);
$me = mysqli_query($con,"UPDATE chat SET imagelocation = '".$path."' WHERE username = '".$_SESSION['CurrentUser']."'");
}
}
else {
echo "You Need to Login to type in this chat";
}
?>
注意:安全性尚未应用于我的查询 提前致谢
【问题讨论】:
-
听起来你需要做一个
join:select * from msgs join users on msg.userid = users.id,这样你才能得到你的头像路径。 -
@MarcB 你能纠正我的查询吗,我还是不确定。
-
言归正传,但您错过了很多安全检查 - 在推进您的软件之前,我会关注您的安全性(即:查询中的 SQL 注入 - 使用 PDO 准备语句!,文件上传 - 你没有检查它的图像而不是恶意脚本!,数据加密 - 使用 SHA256!)
-
@KyleThomas 这不是在实时环境中,我必须稍后对所有查询应用安全性。感谢您指出这一点。我将研究 SHA256
-
我已经添加了一个答案供您查看@0v3kShi3ld3r - stackoverflow.com/a/38256566/5897602