Съобщение до всички !

kenwood10

Registered
Здравейте на всички имам следния php код за изпращане на съобщения

PHP:
<?php session_start(); ?>
<html>
<head>
<title>
Изпрати Съобщение
</title>
</head>
<body>
<?php
$link=mysql_connect("localhost", "root", "") or die (mysql_error());/* променете в зависимост от вашите настройки*/
mysql_query("SET NAMES cp1251");
mysql_select_db("rallybul_topracers") or die (mysql_error()); /*на мястото на "test" напишете името на базата данни, която използвате*/
function get_logged_id($username)
{$query = mysql_query("SELECT * FROM `users` WHERE `username`='{$username}';")or die(mysql_error()); $rowe = mysql_fetch_object($query);  return $rowe->id;}
$user_id=get_logged_id($_SESSION['username']);
if (isset($_POST['submit'])){
if(!empty($_POST['title'])&&!empty($_POST['receiver'])&&!empty($_POST['message'])){
        $receiver=htmlspecialchars(mysql_real_escape_string($_POST['receiver']));
        $title=htmlspecialchars(mysql_real_escape_string($_POST['title']));
        $message=htmlspecialchars(mysql_real_escape_string($_POST['message']));
            $q="SELECT id
                FROM users
                WHERE username='$receiver'";
            $r=mysql_query($q, $link)or die (mysql_error());
            if (mysql_num_rows($r)==1){
            $row=mysql_fetch_array($r);
            $receiver_id=$row['id'];
            $time=time();
            $sql = "INSERT INTO `messages` 
            (
            `id`, 
            `sender_id`, 
            `receiver_id`, 
            `title`, 
            `message`, 
            `time`, 
            `read`)
            VALUES 
            (NULL, '$user_id', '$receiver_id', '$title', '$message', '$time', '0');";
            $sql_result=mysql_query($sql)or die (mysql_error());
            echo "<p>Съобщението изпратено успешно!</p>";
            $done=1;
            } else {
                echo "<div style='background-color:#ff8888' align='center'>Не е намерен потребител с такова име!</div>";
            }
        } else {
            echo "<div style='background-color:#ff8888' align='center'>Всички полета са задължителни!</div>";
    }
}
    if ($done==0){
    ?>
<form target="" method="post">
<div style="float:left;width:100px;" align="right">
До потребител:<br />
Относно:<br />

Съобщение:<br /><br /><br /><br /><br />
</div>
<div style="float:left;width:650px;">
<input type="text" name="receiver"
<?php
if (isset($_GET['user'])){
$user=htmlspecialchars(mysql_real_escape_string($_GET['user']));
echo "value='";
echo $user . "'";
}
?>><br />
<input type="text" name="title"><br />
<textarea rows="5" cols="70" name="message">
</textarea>
<input type="submit" name="submit" value="Изпрати">
</form>
</div>
<?php
}
?>
</body>
</html>

<? include("footer.php"); ?>[php]
Как ще стане тази работа примерно искам да изпратя съобщение до всички потребители от таблицата "users" ? Ако Ви трябват и други файлове казваите :) Благодаря предварително
 
Варианта да го пращаш на всеки потребител поотделно с цикъл... не мисля, че е добър. защото ако сега имаш 100 потребителя, к'во ще стане когато потребителите ти станат 10 000 000 (хипотетично)?

10 000 000 заявки?

Иначе ще стане с цикъл...

Нее...

Върти ми се в главата следното , нещо..

Да речем , че /не/прочетените съобщения ги изкарваш така

[sql]SELECT * FROM `table` WHERE `open`='0'; //непрочетени
SELECT * FROM `table` WHERE `open`='1'; //прочетени[/sql]

Тогава, ще добавиш ОЩЕ една колона: `massive` , която да приема само стойностите: 0/1
0 - непрочетено
1 - прочетено

По подразбиране да бъде 0

Следователно, правиш заявката така;
[sql]SELECT * FROM `table` WHERE `open`='0' AND `massive`='1';//така ще изкараш непрочетените съобщения и тези , които са МАСОВИ[/sql]

ОКЕЙ, сега при изпращането на масовото съобщение ще стане така:

[sql]INSERT INTO `table` (open, massive, text) VALUES ('0', '1', 'blablablablabla');[/sql]

А, когато съобщението се изпраща от потребител към потребител:
[sql]INSERT INTO `table` (open, massive, text) VALUES ('0', '0', 'blablablablabla');[/sql]

Абе.. дървено го обясних, но може и да не стане, а може и да проработи. Ако не успееш да го направиш пиши, но искам да видя, че си ОПИТАЛ да направиш нещо, а не просто да чакаш готов код.
 
nom3r

Според мен също може да се направи ето така:


Само си промени таблиците и полетата в заявките.

PHP:
$message='Съобщението';

$getid_row=mysql_query("SELECT id FROM `users`");

while($getid=mysql_fetch_assoc($getid_row)){
$getid=$getid['id'];

mysql_query("INSERT INTO `msg` (`message`) VALUES ('$message') WHERE user_id_msg='$getid'");


}
 
Явно не си ми прочел цялото мнение.. :}

Варианта да го пращаш на всеки потребител поотделно с цикъл... не мисля, че е добър. защото ако сега имаш 100 потребителя, к'во ще стане когато потребителите ти станат 10 000 000 (хипотетично)?

10 000 000 заявки?

Предполагам ме разбираш к'во искам да кажа.

Иначе, варианта е;
PHP:
<?php
if(isSet($_POST['submit'])) {
	$title = $_POST['zaglavie'];
	$message = $_POST['message'];
	$date = time();
	$usr = "От кой потребител да изпраща";
	$query = mysql_query("SELECT `username` FROM `users`") or die(mysql_error());

	while($rin = mysql_fetch_assoc($query)) {
		$reciver = $rin['username'];
		mysql_query("INSERT INTO messages (`from`,`to`,``date`,`title`,`message`) VALUES ('".$usr."','".$reciver."','".$date."','".addslashes($title)."','".addslashes($message)."')") or die(mysql_error());
	}
} else {
?>
<form action="" method="POST">
<input type="text" name="zaglavie"/><input type="text" name="message"/>
<input type="submit" name="submit" value="Давай!"/>
</form>
<?php
}
?>

..
 
Еми ще се бави този цикъл, но предполагам няма да се пращат масови съобщения през 1 минута. Незнам точно с каква цел му трябва.



ЕДИТ:

Само да добавя на полетата "id" слагай index ключове. Попринцип index ключовете се слагат на полета където масово се използват при WHERE клаузите. Един вид така оптимизираш заявката.
 

Back
Горе