【发布时间】:2021-03-09 06:25:00
【问题描述】:
我正在尝试构建一个简单的广播消息菜单。在那个管理员应该能够向他的用户发送通知。此代码将向选定的用户发送网络推送。但我想向数据库中的所有用户发送通知。我必须在这里改变什么?
广播.php
<?php SESSION_START(); include "isLogin.php"; include "dbconn.php"; include "sql.php"; $sql = new sql();
$user = $sql->listUser();
?>
<!DOCTYPE html>
<html>
<head>
<title>Broadcast Menu</title>
</head>
<body>
<center><div class = "boxed">
<h2>Simple Broadcast Message Menu</h2>
<a href="index.php">Home</a> | <a href="logout.php">Logout</a>
<hr>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>
">
<table>
<tr>
<td>Message</td>
<td><textarea name="msg" cols="50" rows="4"></textarea></td>
</tr>
<tr>
<td>Broadcast time</td>
<td><select name="time"><option>Now</option></select> </td>
</tr>
<tr>
<td>Loop</td>
<td><select name="loops">
<?php
for ($i=1; $i<=5 ; $i++) { ?>
<option value="<?php echo $i ?>"><?php echo $i ?></option>
<?php } ?>
</select> time</td>
</tr>
<tr>
<td>Loop Every</td>
<td><select name="loop_every">
<?php
for ($i=1; $i<=60 ; $i++) { ?>
<option value="<?php echo $i ?>"><?php echo $i ?></option>
<?php } ?>
</select>Minute</td>
</tr>
<tr>
<td>For</td>
<td><select name="user" id="user">
<?php foreach ($user[1] as $key) { ?>
<option value="<?php echo $key['username'] ?>"><?php echo $key['username'] ?></option>
<?php } ?>
</select></td>
</tr>
<tr>
<td colspan=2>
<hr>
</td>
</tr>
<tr>
<td><button name="submit" type="submit">Broadcast </button></td>
</tr>
</table>
</form>
<?php if (isset($_POST['submit'])) { if(isset($_POST['msg']) and isset($_POST['time']) and
isset($_POST['loops']) and isset($_POST['loop_every']) and isset($_POST['user'])) { $msg =
$_POST['msg'];
$time = date('Y-m-d H:i:s'); $loop= $_POST['loops']; $loop_every=$_POST['loop_every']; $user =
$_POST['user']; /*save Notification*/ $save = $sql>saveNotif($msg,$time,$loop,$loop_every,$user);
if($save[0] == true)
{
echo '* save new notification success';
}else{
echo 'error save data : '.$save[1];
}
}else{
echo '* completed the parameter above';
}
}
?>
<table border=1>
<thead>
<tr>
<td>No</td>
<td>Next Schedule</td>
<td>Message</td>
<td>Remains</td>
<td>User</td>
</tr>
</thead>
<tbody>
<?php $a =1; $list = $sql->listNotif();
foreach ($list[1] as $key) {
?>
<tr>
<td><?php echo $a ?></td>
<td><?php echo $key['notif_time'] ?></td>
<td><?php echo $key['notif_msg'] ?></td>
<td><?php echo $key['notif_loop']; ?></td>
<td><?php echo $key['username'] ?></td>
</tr>
<?php $a++; } ?>
</tbody>
</table>
</body>
<style>
.boxed{
width: 500px;
border: 15px solid green;
padding: 50px;
margin: 20px;
}
</style>
</html>
ajax.php
<?php SESSION_START();
include "isLogin.php";
include "dbconn.php";
include "sql.php";
$sql = new sql();
$array=array();
$rows=array();
$listnotif = $sql->listNotifUser($_SESSION['username']);
foreach ($listnotif[1] as $key) {
$data['title'] = 'From admin';
$data['msg'] = $key['notif_msg'];
$data['icon'] = 'http://localhost/notification/avatar2.png';
$data['url'] = 'https://cbra.co.in';
$rows[] = $data;
// update notification database
$nextime = date('Y-m-d H:i:s',strtotime(date('Y-m-d H:i:s'))+($key['notif_repeat']*60));
$sql->updateNotif($key['id'],$nextime);
}
$array['notif'] = $rows;
$array['count'] = $listnotif[2];
$array['result'] = $listnotif[0];
echo json_encode($array);
?>
mynotif.js
$(document).ready(function() {
checknotif();
setInterval(function(){ checknotif(); }, 10000);
});
function checknotif() {
if (!Notification) {
$('body').append(' <h4 style="color:red">*Browser does not support Web Notification</h4>');
return;
}
if (Notification.permission !== "granted")
Notification.requestPermission();
else {
$.ajax(
{
url : "ajax.php",
type: "POST",
success: function(data, textStatus, jqXHR)
{
var data = jQuery.parseJSON(data);
if(data.result == true){
var data_notif = data.notif;
for (var i = data_notif.length - 1; i >= 0; i--) {
var theurl = data_notif[i]['url'];
var notifi = new Notification(data_notif[i]['title'], {
icon: data_notif[i]['icon'],
body: data_notif[i]['msg'],
});
notifi.onclick = function () {
window.open(theurl);
notifi.close();
};
setTimeout(function(){
notifi.close();
}, 5000);
};
}else{
}
},
error: function(jqXHR, textStatus, errorThrown)
{
}
});
}
};
数据库表
username password
ronaldo 123
admin admin
nila 123
shobi 123
等待帮助。请帮我向数据库中的所有用户发送网络推送
【问题讨论】:
-
简单的更新是您可以将用户选择框更改为复选框并循环插入所选值。
-
@SKos 我已经像这样更改了 for 部分
For 如果我选择了多个人,它会发送通知最后选择的人我现在要做什么
标签: javascript php web-push