【问题标题】:how to send web push to all users in database?如何向数据库中的所有用户发送网络推送?
【发布时间】: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


【解决方案1】:

更多细节请从 sql.php 文件中复制 saveNotif 和 listNotifUser 函数。

我发现,ajax.php 代码从 SESSION 中读取了选定的用户。如果您知道如何在 php 中编写代码,您可以通过 mysql 查询选择所有用户,并使用 foreach 循环向所有用户发送通知。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 2013-06-13
    相关资源
    最近更新 更多