MySQL,PHP;检测 dateTimePicker 日期是不是已被使用并禁用它

Posted

技术标签:

【中文标题】MySQL,PHP;检测 dateTimePicker 日期是不是已被使用并禁用它【英文标题】:MySQL, PHP; Detect if dateTimePicker date is already taken and disable itMySQL,PHP;检测 dateTimePicker 日期是否已被使用并禁用它 【发布时间】:2018-02-21 09:54:38 【问题描述】:

我正在使用 dateTimePicker.js、mysqlphp 来生成一个在线活动日历,它允许用户在日历中设置一个日期并用他们的名字进行注册,所有数据都存储在一个 MySQL 数据库中。

数据是这样存储在表中的:

    if (isset($_POST['from'])) 



    if ($_POST['from']!="") 
    

        // Recibimos el fecha de inicio y la fecha final desde el form

        $inicio = _formatear($_POST['from']);
        // y la formateamos con la funcion _formatear

        $final  = _formatear($_POST['from']);

        // Recibimos el fecha de inicio y la fecha final desde el form

        $inicio_normal = $_POST['from'];

        // y la formateamos con la funcion _formatear
        $final_normal  = $_POST['from'];

        // Recibimos los demas datos desde el form
        $titulo = evaluar($_POST['title']);

        // y con la funcion evaluar
        $body   = evaluar($_POST['title']);

        // reemplazamos los caracteres no permitidos
        $clase  = evaluar($_POST['class']);

//checar si fecha existe

              // insertamos el evento
        $query="INSERT INTO eventos VALUES(null,'$titulo','$body','','$clase','$inicio','$final','$inicio_normal','$final_normal')";
        $query2="INSERT INTO dbbackup VALUES(null,'$titulo','$body','','$clase','$inicio','$final','$inicio_normal','$final_normal')";
        // Ejecutamos nuestra sentencia sql
        $conexion->query($query); 
        $conexion->query($query2); 

        // Obtenemos el ultimo id insertado
        $im=$conexion->query("SELECT MAX(id) AS id FROM eventos");
        $row = $im->fetch_row();  
        $id = trim($row[0]);

        // para generar el link del evento
        $link = "$base_url"."descripcion_evento.php?id=$id";

        // y actualizamos su link
        $query="UPDATE eventos SET url = '$link' WHERE id = $id";

        // Ejecutamos nuestra sentencia sql
        $conexion->query($query); 

        // redireccionamos a nuestro calendario

    

然后显示在日历中:

 var calendar = $('#calendar').calendar(options); 

            $('.btn-group button[data-calendar-nav]').each(function()
            
                    var $this = $(this);
                    $this.click(function()
                    
                            calendar.navigate($this.data('calendar-nav'));
                    );
            );

            $('.btn-group button[data-calendar-view]').each(function()
            
                    var $this = $(this);
                    $this.click(function()
                    
                            calendar.view($this.data('calendar-view'));
                    );
            );

            $('#first_day').change(function()
            
                    var value = $(this).val();
                    value = value.length ? parseInt(value) : null;
                    calendar.setOptions(first_day: value);
                    calendar.view();
            );
    (jQuery));

所以它看起来像这样: enter image description here

然后用户保存这样的日期:

enter image description here

蓝色和红色的点是已经使用的日期,颜色只是表示不同的类别,我已锁定周日和周六以及当前日期之前的日期,但我不知道如何禁用已经被占用了。

我尝试使用查询来获取“inicio_normal”,这是存储在我的表中的日期值,然后我将它与“$inicio”进行比较,这是用户从日历中选择的值(在它被格式化为日期之前MySQL 可以存储),所以如果值相同,我知道日期已经被采用,并且使用 IF 我可以显示一条消息或类似的东西,但它不起作用。

我的数据库是这样的:

 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(150) COLLATE utf8_spanish_ci DEFAULT NULL,
  `body` text COLLATE utf8_spanish_ci NOT NULL,
  `url` varchar(150) COLLATE utf8_spanish_ci NOT NULL,
  `class` varchar(45) COLLATE utf8_spanish_ci NOT NULL DEFAULT 'event-important',
  `start` varchar(15) COLLATE utf8_spanish_ci NOT NULL,
  `end` varchar(15) COLLATE utf8_spanish_ci NOT NULL,
  `inicio_normal` varchar(50) COLLATE utf8_spanish_ci NOT NULL,
  `final_normal` varchar(50) COLLATE utf8_spanish_ci NOT NULL,
  PRIMARY KEY (`id`)

有什么帮助吗?,谢谢。

【问题讨论】:

dateTimePicker.js 可以是任何东西。这就是你碰巧在你的系统上有一个名为的文件。如果它是一个常用的 jquery 库,那么您应该包含一个指向它的链接。如果是自定义代码,您应该直接将其包含在您的问题中。 【参考方案1】:

如果您已经在数据库中选择了日期.. 只需搜索是否有巧合。喜欢。。

SELECT * FROM TABLE WHERE DATE = '$datetime'

这将带来任何巧合,如果与您尝试输入的日期巧合,那么只需在您的代码中放置一个 if / else 即可。

if( $query != 0 )  // insert new calendar event 
else  // display message informing an event is already set on that time 

【讨论】:

谢谢!,您的回答对我不起作用,因为我的记录曾经有分钟和秒,我只是禁用了它,现在它正在工作。【参考方案2】:

我找到了一种非常简单的方法来实现这一点,datetimepricker 本身没有启用/禁用已拍摄日期或时间的功能,因此使用查询将新寄存器与我数据库中的寄存器进行比较是最好的.

  if (isset($_POST['MY_INPUT_FIELD'])) 


$chek= $_POST['MY_INPUT_FIELD'];

        $queryt ="SELECT * FROM my_table WHERE my_tIme_in_my_table='$chek'";
        $RESULT_OF_QUERY = $conexion->query($queryt);

if (mysqli_num_rows($RESULT_OF_QUERY)>0)
    
//It pops up a message to the user
        $message = "La fecha ya ha sido tomada, ingresa una nueva";
        echo "<script type='text/javascript'>alert('$message');</script>";

    
    elseif($_POST['MY_INPUT_FIELD']!="") 
    
//DO ALL THE STUFF 
     

一个问题是 DateTimePicker 允许用户添加时间,显然由于秒差,两个用户的 DATE 永远不会相同,所以我在 datetimepciker.js 中禁用了时间,以防您需要使用分钟和秒。

【讨论】:

以上是关于MySQL,PHP;检测 dateTimePicker 日期是不是已被使用并禁用它的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP 日期时间值设置 datetimepicker 默认值

随手写的一个检测php连接mysql的小脚本

PHP PHP中的Mysql查询具有正确的错误检测

将mysql日期转换为日期时间选择器

我可以使用 PHP 检测和处理 MySQL 警告吗?

简单php-mysql注入检测