Пишу чат на php, при попытке залогиниться, в сессию записывается user_id
, после успешной попытки, появляется страница чата, где написаны все сообщения(т.к чат общий), но дело в том, что мне выводятся все сообщения написаны якобы мной, хотя некоторые сообщения были написаны другими юзерами с другими email.В чем может быть проблема? Вот код логина:
<?php
session_start();
include 'db.php';
if (isset($_POST['email-e']) && isset($_POST['password-pass'])) {
$email_e = mysqli_real_escape_string($mysqli,$_POST['email-e']);
$password_pass = crypt($_POST['password-pass']);
$query = "SELECT id, email, password FROM users_data WHERE email = '$email_e' AND password = '$password_pass'";
$sql = mysqli_query($mysqli,$query) or die(mysqli_error());
if (mysqli_num_rows($sql) == 1) {
$row = mysqli_fetch_assoc($sql);
$_SESSION['user_id'] = $row['id'];
$_SESSION['email-e'] = $row['email'];
setcookie("CookieMy", $row['email'], time()+60*60*24*10);
}
else {
echo 'Пользователь не найден!';
header("Location: login.html");
}
}
if (isset($_SESSION['email-e'])){
header("Location: chat.php");
} else {
$email_e = '';
if (isset($_COOKIE['CookieMy'])){
$email_e = htmlspecialchars($_COOKIE['CookieMy']);
}
}
?>
А вот код самого чата:
<?php
session_start();
include 'db_chat.php';
// header('Content-Type: text/html; charset=utf-8');
//echo trim($_SESSION['email-e'])." <br />"."Вы авторизованы <br />";
?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Chat</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
<title>Chat</title>
<style>
form,p,span{margin:0;padding:0}
input{font:12px arial}
a{color:#00f;text-decoration:none}
a:hover{text-decoration:underline}
#wrapper,
#loginform{margin:0 auto;padding-bottom:25px;background:#ebf4fb;width:504px;border:1px solid #acd8f0}#loginform{padding-top:18px}#loginform p{margin:5px}
#chatbox{text-align:left;margin:0 auto;margin-bottom:25px;padding:10px;background:#fff;height:270px;width:430px;border:1px solid #acd8f0;overflow:auto}
#usermsg{
margin: 0 auto;
width:395px;
border:1px solid #acd8f0
}
#submit{width:60px}
.error{color:#f00}
#menu{padding:12.5px 25px 12.5px 25px}
.welcome{float:left}
.logout{float:right}
.msgln{margin:0 0 2px 0}
</style>
</head>
<body>
<div id="wrapper">
<div id="menu">
<p class="welcome">Welcome,<?php echo trim($_SESSION['email-e'])?><b></b></p>
<p class="logout" name="logout">
<a name="logout" id="exit" href="#">Exit Chat</a>
</p>
<div style="clear:both"></div>
</div>
<div id="chatbox">
<?php
if(isset($_POST['submitmsg'])) {
if(!empty($_POST['usermsg']) && is_string($_POST['usermsg'])) {
$usermsg = trim($_POST['usermsg']);
$sql_chat ="INSERT INTO `users_chat` (usermsg)(user_id)
VALUES('{$usermsg}','{$user_id}')";
$res = mysqli_query($mysqli_chat,$sql_chat);
}
}
$query_chat = "SELECT * FROM `users_chat`";
$res = mysqli_query($mysqli_chat,$query_chat);
while($row_chat = mysqli_fetch_array($res)) {
echo "Email: ".$_SESSION['email-e']."<br>\n";
echo "Message: ".$row_chat['usermsg']."<br>\n";
//echo date('Y.m.d H:i',$row_chat['time']);
}
?>
</div>
<form name="message" action="" method="post">
<input name="usermsg" type="text" id="usermsg"/ style="margin: 0 auto;">
<input name="submitmsg" type="submit" id="submitmsg" value="Send"/><br>
</form>
</div>
</body>
</html>
С БД все в порядке, все работает и записывается, но показывается только email юзера, который залогинился и все сообщения якобы от его имени,а нудно всех, кто писал и какое писал сообщение.
Проблема из-за того, что email автора берётся из сессии, а судя по коду, в сессии хранится email авторизованного пользователя. По идее email нужно брать из $row_chat['email-e']
Так же было бы неплохо использовать изолирование от HTML для вывода сообщений (дока)
UPD Пример изолирования от HTML:
<?php
if(isset($_POST['submitmsg'])) {
if(!empty($_POST['usermsg']) && is_string($_POST['usermsg'])) {
$usermsg = trim($_POST['usermsg']);
$sql_chat ="INSERT INTO `users_chat` (usermsg)
VALUES('{$usermsg}')";
$res = mysqli_query($mysqli_chat,$sql_chat);
}
}
$query_chat = "SELECT * FROM `users_chat`";
$res = mysqli_query($mysqli_chat,$query_chat);
while($row_chat = mysqli_fetch_array($res)):?>
Email: <?=$row_chat['email-e']?> <br>
Message: <?=$row_chat['usermsg']?> <br>
<?php endwhile;
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
подскажите как передать значения цикла в переменную, чтобы отправило на почту данныеJS отправляет JSON, Далее идет обработчик:
Как передать из метода actionIndex передать переменную в конструктор AdminBase? Переменная нужна для того чтобы передать в User::checkLogged()
В коде используется PHPMailer для заявок с сайта, там есть 2 адреса no-reply@mydomainru который отправляет заявки на sales@mydomain
При загрузки видео в шаблон для письма, используя плагин TinyMCE не приходит видео на почту mailru