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

Posted

技术标签:

【中文标题】如何将 $_SESSION 变量添加到 Ajax 请求中并将数据插入到 mysql 数据库 PHP 中?【英文标题】:How to add $_SESSION variable into an Ajax Request and INSERT data into mysql database PHP? 【发布时间】:2018-02-13 06:46:28 【问题描述】:

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

It looks somethings like this

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

注意:未定义变量:C:\xampp\htdocs\reports\functions.php 第 288 行中的 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 变量为每个用户提供不同的日历和每日报告视图。我希望我能够正确地陈述我的问题,任何帮助将不胜感激。非常感谢!

【问题讨论】:

如果你想使用javascript中的任何函数,你应该在javascript而不是php@Master Pogi中调用它 【参考方案1】:

试试下面的代码:

function getCalendar(target_div,year,month)
        $.ajax(
            type:'POST',
            url:'functions.php',
            data:'func=getCalender&year='+year+'&month='+month + '&uid=<?php echo $u_id ; ?>',
            success:function(html)
                $('#'+target_div).html(html);
            
        );
    

【讨论】:

成功了,谢谢!另外,感谢您的其他回复,我能够从您在我的问题中的所有答案中产生想法【参考方案2】:

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

它会解决你的问题。

【讨论】:

【参考方案3】:

另一种方法是制作一个返回用户 ID 的 api。

喜欢: 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。

【讨论】:

以上是关于如何将 $_SESSION 变量添加到 Ajax 请求中并将数据插入到 mysql 数据库 PHP 中?的主要内容,如果未能解决你的问题,请参考以下文章

将两个会话变量添加到 MYSQL 查询中

设置 SESSION 变量的简单 AJAX 函数

从不同端口上的 AJAX 访问时,$_SESSION 变量为空 [重复]

使用 AJAX 将 lat/long 插入 SESSION 变量不起作用

ajax编写购物车遇到的问题

如何使用 JQUERY 读取 SESSION 变量