用户组通知

时间:2017-02-18 17:45:19

标签: php

我正在研究一个事件管理器,我想为一组用户创建一个通知系统。 当管理员创建一个新事件时,php会在mysql中创建一个状态为0的通知,如果没有读取,则会在读取时更改为状态1。

问题是我使用的是组ID而不是用户ID,当第一个登录用户单击通知时,它会更新通知状态,以便其他用户不会查看通知。也许为每个用户插入一行进入数据库可以解决这个问题?我是否需要使用用户ID的数组?

这就是我到目前为止所做的:

session_start();

// admin id 
$userid = $_SESSION['user_id'];

include('../../../config/database.php');

$event_title = $_POST['titleevent'];
$event_color = $_POST['eventcolor'];
$event_start = $_POST['startevent'];
$new_start_date = date('Y-m-d 00:00:00', strtotime($event_start));
$event_end = $_POST['endevent'];
$new_end_date = date('Y-m-d 23:59:00', strtotime($event_end));
$event_group = $_POST['usergroup'];
$event_description = $_POST['eventdescription'];

    if ($create_event = mysqli_prepare($conn, "INSERT INTO user_events (event_title, event_description, event_start, event_end, event_color, event_group)
                    VALUES (?, ?, ?, ?, ?, ?)" )) {

    mysqli_stmt_bind_param($create_event, 'sssssi', $event_title, $event_description, $new_start_date, $new_end_date, $event_color, $event_group);
    mysqli_stmt_execute($create_event);

        // get event id
        $event_id = mysqli_insert_id($conn);

        $event_start_date = date('d-m-Y', strtotime($new_start_date));
        $notification = "Nuovo evento <span class='text-warning'><strong>$event_title</strong></span> inizia il $event_start_date";
        $notification_status = "0";
        $notification_category= "events";

        $event_notification = mysqli_prepare($conn, "INSERT INTO event_notifications (e_notification_sent_by, e_notification_sent_to, e_notification_message, e_notification_time, e_notification_status, e_notification_category, e_notification_category_id) VALUES(?,?,?,now(),?,?,?)");
        mysqli_stmt_bind_param($event_notification, 'iisisi', $userid, $event_group, $notification, $notification_status, $notification_category, $event_id);
        mysqli_stmt_execute($event_notification);
        mysqli_stmt_close($event_notification);


     echo "event created";

    mysqli_stmt_close($create_event);


    }else{

        echo "Ops, error";

    }

非常感谢你的帮助

UPDATE我已经设法使用数组和foreach以这种方式工作:

$event_start_date = date('d-m-Y', strtotime($new_start_date));
        $notification = "Nuovo evento <span class='text-warning'><strong>$event_title</strong></span> inizia il $event_start_date";
        $notification_status = "0";
        $notification_category= "events";


        $sql = "SELECT user_join_id FROM user_group_join WHERE group_join_id='$event_group'";

        $result= mysqli_query($conn,$sql);

        $datas= array();

        if(mysqli_num_rows($result) > 0){

            while($row=mysqli_fetch_array($result, MYSQLI_ASSOC)){

            $datas[]= $row;

            }

        }

        foreach($datas as $data) {

        $id_cliente = $data['user_join_id'];

        $event_notification = mysqli_prepare($conn, "INSERT INTO user_notifications (notification_sent_by, notification_sent_to, notification_message, notification_time, notification_status, notification_category, notification_category_id) VALUES(?,?,?,now(),?,?,?)");
        mysqli_stmt_bind_param($event_notification, 'iisisi', $userid, $id_cliente, $notification, $notification_status, $notification_category, $event_id);
        mysqli_stmt_execute($event_notification);
        mysqli_stmt_close($event_notification);

        }

现在的问题是我怎么能用准备好的声明转换它?而且看起来我将使用大量服务器资源查询每个用户ID的数据库,有没有办法优化foreach循环?

非常感谢

0 个答案:

没有答案