如何将 $_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 中?的主要内容,如果未能解决你的问题,请参考以下文章
从不同端口上的 AJAX 访问时,$_SESSION 变量为空 [重复]