问题描述
我想制作一个基于 Javascript 的日历来管理假期。 我的问题是,我使用 sql 数据库来存储我正在使用 PHP 访问的假期。如何在 JS 脚本中使用 PHP 查询的结果?
例如,要为员工添加假期,我必须这样做:
<?PHP $req='select Nom,DateDebut,DateFin,NbJour from conge where Statut="Valide"';
$res=MysqLi_prepare($connect,$req);
$var=MysqLi_stmt_execute($res);
$var=MysqLi_stmt_bind_result($res,$Nom,$DateDebut,$DateFin,$NbJour);
while(MysqLi_stmt_fetch($res)) {
// ???
}
?>
<!-- partial -->
<script src='https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.2.7/semantic.min.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.1.0/fullcalendar.min.js'></script><script>
$(document).ready(function() {
$('#calendar').fullCalendar({
header: {
left: 'prev,next today',center: 'title',right: 'month,basicWeek,basicDay'
},defaultDate: '<?PHP echo date("Y-m-d");?>',navLinks: true,editable: true,eventLimit: true,events: [
{
title: '<?PHP echo $_SESSION["Login"]?>',start: '2021-04-30',end: '2021-05-03'
}
当我只使用 <?PHP echo $_SESSION ?>
时,它运行良好。但是当我尝试围绕 stmt_fetch($res)
进行循环时,它不起作用。我怎么能这样做?
解决方法
由于最佳实践要求您应该尽可能地将 PHP 和表示代码分开,因此您要做的是在 PHP 中构建数据数组,然后在需要时将其安全地转储到 JavaScript 中。从 PHP 向 JavaScript 插入数据时始终使用 json_encode()
以确保正确转义值。
我也建议不要使用 mysqli;但如果必须,至少使用面向对象的接口。它更易于使用,并且代码看起来更现代。
<?php
$query = 'SELECT Nom,DateDebut,DateFin,NbJour FROM conge WHERE Statut="Valide"';
$stmt = $connect->prepare($query);
$stmt->execute();
$stmt->bind_result($Nom,$DateDebut,$DateFin,$NbJour);
$events = [];
while($stmt->fetch()) {
$events[] = [
"title" => "Vacances de $Nom","start" => $DateDebut,"end" => $DateFin
];
}
?>
$(document).ready(function() {
$('#calendar').fullCalendar({
header: {
left: 'prev,next,today',center: 'title',right: 'month,basicWeek,basicDay'
},defaultDate: '<?= json_encode(date("Y-m-d"),\JSON_HEX_TAG) ?>',navLinks: true,editable: true,eventLimit: true,events: <?= json_encode($events,\JSON_HEX_TAG) ?>
});
})();