如何将$ _SESSION变量添加到Ajax请求中并将数据插入到mysql数据库PHP中?

时间:2017-09-05 04:31:54

标签: php jquery mysql ajax mysqli

我刚刚开始进行Web开发,我正在使用Ajax尝试PHP中的一些东西。我最近下载了一个使用php,jquery和ajax的脚本。它的作用是显示一个日历,一旦用户点击特定日期就可以输入,并在用户点击“添加”按钮后将数据添加到数据库。

It looks somethings like this

之后,我修改了数据库表,其中我添加了一个user_id作为列,因为我希望日历每日报告只能由向其添加数据的用户查看。现在,我的问题是我无法将$ _SESSION ['userSession']用于Ajax请求。我试图将变量添加到mysqli查询中,但不幸的是,它产生了这种错误:

注意:未定义的变量:第288行的C:\ xampp \ htdocs \ reports \ functions.php中的u_id

我有两个PHP文件,一个用于主页面,另一个用于处理日历和日历的其他功能。

以下是我的reports.php文件:

 <?php
session_start();
include_once 'dbconnect.php';
include_once('functions.php');

if (!isset($_SESSION['userSession'])) {
    header("Location: index.php");
}

$query = $DBcon->query("SELECT * FROM users WHERE user_id=".$_SESSION['userSession']);
$userRow=$query->fetch_array();
$DBcon->close();

$u_id = $_SESSION['userSession']; //this  is the variable that I am trying to pass to the functions.php file

    ?>
<!-- The echo below produces the calendar view -->
<div id="calendar_div">
    <?php echo getCalender(); ?>
</div>

现在这里是functions.php的示例:

<?php


if(isset($_POST['func']) && !empty($_POST['func'])){
    switch($_POST['func']){
        case 'getCalender':
            getCalender($_POST['year'],$_POST['month']);
            break;
        case 'getEvents':
            getEvents($_POST['date']);
            break;
        //For Add Event
        case 'addEvent':
            addEvent($_POST['date'],$_POST['title'],$_POST['week'],$_POST['hours']);
            break;
        default:
            break;
    }
}

?>



<script type="text/javascript">
    function getCalendar(target_div,year,month){
        $.ajax({
            type:'POST',
            url:'functions.php',
            data:'func=getCalender&year='+year+'&month='+month,
            success:function(html){
                $('#'+target_div).html(html);
            }
        });
    }

    function getEvents(date){
        $.ajax({
            type:'POST',
            url:'functions.php',
            data:'func=getEvents&date='+date,
            success:function(html){
                $('#event_list').html(html);
                $('#event_add').slideUp('slow');
                $('#event_list').slideDown('slow');
            }
        });
    }
    //For Add Event
    function addEvent(date){

        $('#eventDate').val(date);
        $('#eventDateView').html(date);
        $('#event_list').slideUp('slow');
        $('#event_add').slideDown('slow');
    }
    //For Add Event
    $(document).ready(function(){
        $('#addEventBtn').on('click',function(){
            var date = $('#eventDate').val();
            var title = $('#eventTitle').val();
            var week = $('#eventWeek').val();
            var hours = $('#eventHours').val();
            $.ajax({
                type:'POST',
                url:'functions.php',
                data:'func=addEvent&date='+date+'&title='+title+'&week='+week+'&hours='+hours,
                success:function(msg){
                    if(msg == 'ok'){
                        var dateSplit = date.split("-");
                        $('#eventTitle').val('');
                        $('#eventWeek').val('');
                        $('#eventHours').val('');
                        alert('Daily report has been added.');
                        getCalendar('calendar_div',dateSplit[0],dateSplit[1]);
                    }else{
                        alert('Some problem occurred, please try again.');
                    }
                }
            });
        });
    });

function getEvents($date = ''){
    //Include db configuration file
    include 'dbconnect.php';
    $eventListHTML = '';
    $date = $date?$date:date("Y-m-d");
    //Get events based on the current date
    $result = $DBcon->query("SELECT title,hours FROM ojt_student_report WHERE date = '".$date."' AND status = 1 and user_id = '"$u_id"'");

    if($result->num_rows > 0){

        $eventListHTML = '<h2>Daily Report on '.date("l, d M Y",strtotime($date)).'</h2>';
        $eventListHTML .= '<ul class="list-group">';
        while($row = $result->fetch_assoc()){ 
            $eventListHTML .= '<li class="list-group-item"> <b>Daily Report:  </b><br>'.nl2br($row['title']). '<br>  <b>Working Hours: </b>' .$row['hours']. '</li>';
        }
        $eventListHTML .= '</ul>';

    }
    echo $eventListHTML;
}

/*
 * Add event to date
 */
function addEvent($date,$title,$week,$hours){
    //Include db configuration file
    include 'dbconnect.php';
    $currentDate = date("Y-m-d H:i:s");
    //Insert the event data into database 
    $insert = $DBcon->query("INSERT INTO ojt_student_report (title,date,week,hours,created,modified,user_id) VALUES ('".$title."','".$date."','".$week."','".$hours."','".$currentDate."','".$currentDate."','"$u_id"')");
    if($insert){
        echo 'ok';
    }else{
        echo 'err';
    }
}
?>

基本上,我想要做的是使用$ _SESSION变量为每个用户提供不同的日历和每日报告视图。我希望我能够正确地陈述我的问题,任何帮助将不胜感激。非常感谢你!

3 个答案:

答案 0 :(得分:2)

尝试以下代码:

ContextMenuStrip.Items

答案 1 :(得分:1)

另一种方法是创建一个api,返回用户ID。

像: 的 returnSessionId.php

echo $_SESSION['userSession'];

在你的HTML中:

function getCalendar(target_div,year,month){
    $.ajax({
        type:'POST',
        url:'returnSessionId.php',

        success:function(sessionID){
            console.log(sessionID);
        }
    });
}

这样,即使您的脚本与php文件不在同一页面上,您也可以获得所需的ID。

答案 2 :(得分:0)

您是否将calendar_div元素中的会话用户ID隐藏为具有适当的类或ID。 (即)隐藏输入类型并放置您的会话值。在addEvent单击函数中,您可以使用id / class获取该会话值,并传递为ajax参数。

它将解决您的问题。