仅查看当前月份的FullCalendar

时间:2016-09-17 18:23:33

标签: php mysql

下午好朋友,我如何只显示月份的事件名称,而不是下面代码中显示的年份。例如,09月有04位用户。

<?php

//Database
$data = array();


$link = mysqli_connect("localhost", "root", "", "agenda");

mysqli_set_charset($link, 'utf8');

if (!$link) {
    echo "Error: Unable to connect to MySQL." . PHP_EOL;
    echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
    echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
    exit;
}

$query = "SELECT * FROM clientes";

if ($result = $link->query($query)) {

    /* fetch object array */
    while ($obj = $result->fetch_object()) {
        $data[] = array(
            'id' => $obj->id,
            'title'=> $obj->title,
            'start'=> $obj->start
        );
    }

    /* free result set */
    $result->close();
}

mysqli_close($link);

?>

<script>

    $(document).ready(function() {

        $('#clientes').fullCalendar({
            header: {
                left: 'prev,next today',
                center: 'title',
                right: 'month,basicWeek,basicDay'
            },
            defaultDate: '<?php echo date('Y-m-d');?>',
            editable: true,
            eventLimit: true, // allow "more" link when too many events
            events : <?php echo json_encode($data);?>
        });

    });

</script>

Sample output

Database schema

这是相同结果的第二个块的代码。

<?php

//Database
$data = array();

$link = mysqli_connect("localhost", "root", "", "agenda");

mysqli_set_charset($link, 'utf8');

$month = date('n');
$year = date('Y');
$query = "SELECT * FROM clientes WHERE MONTH(`start`) = $month AND YEAR(`start`) = $year";


if ($result = $link->query($query)) {

    /* fetch object array */
    while ($obj = $result->fetch_object()) {
        $data[] = array(
            'id' => $obj->id,
            'title'=> $obj->title,
            'start'=> $obj->start
        );
    }

    /* free result set */
    $result->close();
}

mysqli_close($link);

?>

enter image description here

如果代码如此,他警告&#34;无效数据&#34;:

$month = date('n');
$year = date('Y');
if (is_int($month) && is_int($year)) {
    $query = "SELECT * FROM clientes WHERE MONTH(`start`) = $month AND YEAR(`start`) = $year";
} else {
    die ('Invalid data');
}

2 个答案:

答案 0 :(得分:0)

您可以使用SQL来限制返回的行,如下所示:

SELECT * FROM clientes WHERE MONTH(`start`) = 4 AND YEAR(`start`) = 2016;

对其进行编码以处理从表单提交的变量:

$month = filter_var($_POST['month'], FILTER_VALIDATE_INT);
$year = filter_var($_POST['year'], FILTER_VALIDATE_INT);
if (is_int($month) && is_int($year)) {
    $query = "SELECT * FROM clientes WHERE MONTH(`start`) = $month AND YEAR(`start`) = $year";
} else {
    die ('Invalid data');
}

永远不要将尚未转义,验证或清理过的数据提交到数据库。在这种情况下,我使用验证,因为它确保只在查询中使用整数。您也可以使用准备好的语句。

START是MySQL中的保留字,这就是为什么需要`(反引号)。

从服务器获取当前月份和年份并在代码中使用它:

$month = date('n');
$year = date('Y');
$query = "SELECT * FROM clientes WHERE MONTH(`start`) = $month AND YEAR(`start`) = $year";

if ($result = $link->query($query)) {

答案 1 :(得分:0)

我得到了问题制作下一个让路。

按如下方式放置选择。

$query = "select id, title,  concat_ws( '-', year(now()), MONTH(start), DAY(start)) AS start from clientes";