我刚刚开始进行Web开发,我正在使用Ajax尝试PHP中的一些东西。我最近下载了一个使用php,jquery和ajax的脚本。它的作用是显示一个日历,一旦用户点击特定日期就可以输入,并在用户点击“添加”按钮后将数据添加到数据库。
之后,我修改了数据库表,其中我添加了一个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变量为每个用户提供不同的日历和每日报告视图。我希望我能够正确地陈述我的问题,任何帮助将不胜感激。非常感谢你!
答案 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参数。
它将解决您的问题。