Лични съобщения - ново съобщение

sn1p3r

Registered
Здравейте, имам система за лични съобщения искам когато пратят Съобщение в менюто където е лични съобщения да излезе (1) (или колкото са новите съобщения). Мисля, че ме разбрахте :)

Ето и кода на системата за съобщения:

Код:
<?
include "config.php";
if ($username) {
switch ($_GET['page']) {
default: 
echo "<a href='test.php?page=inbox'>Входящи</a><br />
<a href='test.php?page=write'>Изпрати</a><br />";
break;
case "inbox" :
echo "<table><tr><td>От:</td><td>Тема</td><td>Виж</td><tr>";
$sql = "SELECT * FROM messages WHERE touser = '$username'";
$res = mysql_query($sql) or die (mysql_error());
while($row = mysql_fetch_assoc($res)) {
echo "<tr><td>$row[from]</td><td>$row[title]</td><td>
<a href='test.php?page=view&id=$row[id]'>Виж</a> | 
<a href='test.php?page=delete&id=$row[id]'>Изтрий</a></td><tr>";

}
echo "</table>";
break;
case "write":
?>
<form method="post" action="">
До: <input type="text" name="touser" /><br />
Тема: <input type="text" name="title" /><br />
Съобщение: <textarea name="message" cols="25" rows="10">
</textarea><br />
<input type="submit" name="submit" value="Изпрати" />
</form>
<?
if ($_POST['submit']) {
$touser = $_POST['touser'];
$title = $_POST['title'];
$message = $_POST['message'];
$sql = "INSERT INTO messages (`from`, `touser`, `title`, `message`) VALUES ('$username', '$touser', '$title', '$message')";
$result = mysql_query($sql) or die (mysql_error());
echo "Съобщението е изпратено.";
}
break;
case "view" :
$id = $_GET['id'];
if ($id) {
$sql = "SELECT * FROM messages WHERE id='$id'";
$result = mysql_query($sql) or die (mysql_error());
$row = mysql_fetch_assoc($result);
if ($row[touser] == $username) {
echo "От: $row[from]<br />
Тема: $row[title]<br />
Съобщение: <br />
$row[message]<br />
<br />";
?>
<form method='post' action='test.php?page=view&id=<?= $id; ?>'> <br />
До: <br /> <input type='text' name='touser' value='<?= $row[from]; ?>' /> <br />
Тема: <br /> <input type='text' name='title' /><br />
Съобщение: <br />
<textarea name='message' cols='15' rows='10'>
</textarea><br />
<input type='submit' name='submit' value='Изпрати' />
</form>
<?
if ($_POST['submit']) {
	$title = $_POST['title'];
	$touser = $_POST['touser'];
	$message = $_POST['message'];
	$sql = "INSERT INTO messages (`from`, `touser`, `title`, `message`) VALUES ('$username', '$touser', '$title', '$message')";
	mysql_query($sql) or die (mysql_error());
	echo "Съобщението е изпратено успешно.";
}
}
else {
echo "Ти не си получател на това съобщение";
}
}
else {
echo "Избери съобщения";
}
break;
case "delete" :
$id = $_GET['id'];
	if ($id) {
	$sql = "SELECT * FROM messages WHERE id='$id'";
	$res = mysql_query($sql) or die (mysql_error());
	$data = mysql_fetch_assoc($res);
	if ($data[touser] == $username) {
		$zaqvka =  "DELETE FROM messages WHERE id='$id'";
		mysql_query($zaqvka) or die (mysql_error());
		echo "Съобщението е изтрито. <a href='test.php'>Назад </a>";
	}
	else {
	echo "Ти не си получател и неможеш да го изтриеш.";
	}
	}
	else {
	echo "Избери съобщение.";
	}
break;
}
}
else {
echo "Нямаш достъп.";
}
?>
 
Само едно уточнение - необходим ти е флаг за ново/прочетено съобщение и съм предположил че си си добавил полето newMsg int в таблицата със съобщения:

PHP:
<?
include "config.php";
if ($username) {
switch ($_GET['page']) {
default:

// изнасяме заявката тук, за да можем да я извикаме само един път и да я ползваме по-долу за списъка и тук за броя съобщения
$sql = "SELECT * FROM messages WHERE newMsg=1 and touser = '$username'";
$res = mysql_query($sql) or die (mysql_error());

// колко съобщения има потребителя
$msgCount = mysql_num_rows($res);
// показваме ги
echo "<a href='test.php?page=inbox'>Входящи ($msgCount)</a><br />
<a href='test.php?page=write'>Изпрати</a><br />";
break;
case "inbox" :
echo "<table><tr><td>От:</td><td>Тема</td><td>Виж</td><tr>";
while($row = mysql_fetch_assoc($res)) {
echo "<tr><td>$row[from]</td><td>$row[title]</td><td>
<a href='test.php?page=view&id=$row[id]'>Виж</a> |
<a href='test.php?page=delete&id=$row[id]'>Изтрий</a></td><tr>";

}
echo "</table>";
break;
case "write":
?>
<form method="post" action="">
До: <input type="text" name="touser" /><br />
Тема: <input type="text" name="title" /><br />
Съобщение: <textarea name="message" cols="25" rows="10">
</textarea><br />
<input type="submit" name="submit" value="Изпрати" />
</form>
<?
if ($_POST['submit']) {
$touser = $_POST['touser'];
$title = $_POST['title'];
$message = $_POST['message'];

// тук маркираме съобщението като нов със запис на 1 в newMsg
$sql = "INSERT INTO messages (`from`, `touser`, `title`, `message`, `newMsg`) VALUES ('$username', '$touser', '$title', '$message', 1)";
$result = mysql_query($sql) or die (mysql_error());
echo "Съобщението е изпратено.";
}
break;
case "view" :
$id = $_GET['id'];
if ($id) {
$sql = "SELECT * FROM messages WHERE id='$id'";
$result = mysql_query($sql) or die (mysql_error());
$row = mysql_fetch_assoc($result);
if ($row[touser] == $username) {

// тук маркираме съобщението като прочетено
mysql_query("update messages set newMsg=0 where id=$id");
echo "От: $row[from]<br />
Тема: $row[title]<br />
Съобщение: <br />
$row[message]<br />
<br />";
?>
<form method='post' action='test.php?page=view&id=<?= $id; ?>'> <br />
До: <br /> <input type='text' name='touser' value='<?= $row[from]; ?>' /> <br />
Тема: <br /> <input type='text' name='title' /><br />
Съобщение: <br />
<textarea name='message' cols='15' rows='10'>
</textarea><br />
<input type='submit' name='submit' value='Изпрати' />
</form>
<?
if ($_POST['submit']) {
   $title = $_POST['title'];
   $touser = $_POST['touser'];
   $message = $_POST['message'];
   $sql = "INSERT INTO messages (`from`, `touser`, `title`, `message`) VALUES ('$username', '$touser', '$title', '$message')";
   mysql_query($sql) or die (mysql_error());
   echo "Съобщението е изпратено успешно.";
}
}
else {
echo "Ти не си получател на това съобщение";
}
}
else {
echo "Избери съобщения";
}
break;
case "delete" :
$id = $_GET['id'];
   if ($id) {
   $sql = "SELECT * FROM messages WHERE id='$id'";
   $res = mysql_query($sql) or die (mysql_error());
   $data = mysql_fetch_assoc($res);
   if ($data[touser] == $username) {
      $zaqvka =  "DELETE FROM messages WHERE id='$id'";
      mysql_query($zaqvka) or die (mysql_error());
      echo "Съобщението е изтрито. <a href='test.php'>Назад </a>";
   }
   else {
   echo "Ти не си получател и неможеш да го изтриеш.";
   }
   }
   else {
   echo "Избери съобщение.";
   }
break;
}
}
else {
echo "Нямаш достъп.";
}
?>
 
PHP:
$check_count = "SELECT COUNT(title) FROM messages WHERE touser = '$username' AND newMsg = '1'";
$do_count = mysql_query($check_count);
$get_count = mysql_fetch_row($do_count);
$broi = $get_count[0];

Променливата $broi ти е номера на новите непрочетени съобщения и можеш да си го изкараш вече където поискаш с echo.
 
Направих го, но като сложа

Код:
<?php echo"$broi"; ?>

Ми излиза 0 и си пращам ново съобщение и си продължава да седи 0
 
ей тук не съм видял че пак инсъртваш.

това:
PHP:
if ($_POST['submit']) {
   $title = $_POST['title'];
   $touser = $_POST['touser'];
   $message = $_POST['message'];
   $sql = "INSERT INTO messages (`from`, `touser`, `title`, `message`) VALUES ('$username', '$touser', '$title', '$message')";
   mysql_query($sql) or die (mysql_error());
   echo "Съобщението е изпратено успешно.";
}

трябва да е:
PHP:
if ($_POST['submit']) {
   $title = $_POST['title'];
   $touser = $_POST['touser'];
   $message = $_POST['message'];
   $sql = "INSERT INTO messages (`from`, `touser`, `title`, `message`,`newMsg`) VALUES ('$username', '$touser', '$title', '$message',1)";
   mysql_query($sql) or die (mysql_error());
   echo "Съобщението е изпратено успешно.";
}
 
Виж полето в базата ти данни дали е int(80) - може и да не е 80, просто дали е int.

Виж правилни ли са полетата в заявката и дали съответстват на тези в базата ти данни.
 
Int си е всичко е ок. Но сега се сетих, че в сайта този целия код го разделих всеки самостоятелно (viewmessage.php, sendmessage.php, delete) правеше ми някакъв проблем но навсякъде промених както е тук.
 
Човека се оплете защото му даваме два различни алгоритъма със сходни компоненти !

Снипи избери си да ползваш заявка или mysql_num_rows - и с двете може ама не едновременно :)
 
Пак няма промяна един въпрос:

Този код:

Код:
$check_count = "SELECT COUNT(title) FROM messages WHERE touser = '$username' AND newMsg = 1";
$do_count = mysql_query($check_count);
$get_count = mysql_fetch_row($do_count);
$broi = $get_count[0];

Е на отделен php файл за менюто нали не трябва да е при кода на message?
 
Ей така го направи и си готов.

Код:
$check_count = "SELECT title FROM messages WHERE touser = '$username' AND newMsg = 1";
$do_count = mysql_query($check_count);
$get_count = mysql_num_rows($do_count);
echo $get_count;
 
Не става. :\ Сложих в echo както написа $get_count, но не става пак. Сложих и в echo $msgCount и веднага ми показва колко са общо писмата :\, но колко са непрочетени никаква промяна.
 
А направих го :) Обаче с $msgCount. Не беше направено да зададе 0 когато се прочете съобщението затова не ставаше на view беше

Код:
mysql_query("UPDATE messages SET `newMsg`='1' Where id='$_GET[id]'") or die (mysql_error());

Видях го и го промених на:

Код:
mysql_query("UPDATE messages SET `newMsg`='0' Where id='$_GET[id]'") or die (mysql_error());

:) Ето ако някой случайно иска да ползва системата да знае как да си го направи го пиша ;) Благодаря на всеки помогнал нямаше да се справя без вас :)

Имам и един друг проблем да не правя нова тема да го напиша тук :) Когато пращам съобщение трябва да спазвам главни и малки букви иначе съобщението отива в кутията му и не може да се отвори някаква идея как да го направя и с малки да е то само да си ги промени :)
 
Не си чел внимателно:

// тук маркираме съобщението като прочетено
mysql_query("update messages set newMsg=0 where id=$id");


функцията
mb_strtoupper( $touser, 'UTF-8')
конвертира вси1ки букви в малки. Използвай я преди да запишеш ново съобщение върху from / to.
 

Back
Горе