Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MYSQL中的验证日期_Php_Mysql - Fatal编程技术网

Php MYSQL中的验证日期

Php MYSQL中的验证日期,php,mysql,Php,Mysql,我有个小问题 如何做到这一点:客户机向表单添加数据 我想在MYSQL中检查现有数据是否由其他客户端设置 所以,在这张照片中,你可以看到我是多么不想成为这样的人 我想返回一些消息告诉客户,请更改另一个日期。您可以使用dated-m-Y d-m-Y means day-month-year格式获取当前日期,然后将其与数据库中的数据日期进行比较,如果它是由另一个客户机设置的。当它属于日期时,请使用php和mysql的日期和时间函数 首先,使用日期类型列在数据库中存储日期。一个简短的示例,如何声明日

我有个小问题

如何做到这一点:客户机向表单添加数据

我想在MYSQL中检查现有数据是否由其他客户端设置

所以,在这张照片中,你可以看到我是多么不想成为这样的人


我想返回一些消息告诉客户,请更改另一个日期。

您可以使用dated-m-Y d-m-Y means day-month-year格式获取当前日期,然后将其与数据库中的数据日期进行比较,如果它是由另一个客户机设置的。

当它属于日期时,请使用php和mysql的日期和时间函数

首先,使用日期类型列在数据库中存储日期。一个简短的示例,如何声明日期列。此示例包含日期列的唯一约束,因此值在此列中只能存储一次

CREATE TABLE example (
    id INT AUTO_INCREMENT PRIMARY KEY,
    description VARCHAR(50) NOT NULL,
    start_date DATE NOT NULL UNIQUE,
);
请记住,这是一个示例表。现在,您可以根据此日期栏完成所有要求的操作

现在,您必须在PHP端处理日期格式。我猜calendar应用程序发布的日期格式如d/m/Y所示。这种格式是可以接受的,但无论是在数据库中还是在php代码中,都不常用于处理日期。通常使用Y-m-d格式。此格式适合数据库的需要

下面的示例采用格式为d\m\Y的日历日期post参数,并用它创建一个php DateTime对象

$data = $_POST['date']; // your date in d/m/Y format like 20/05/2021
$date = DateTime::createFromFormat('d/m/Y');

if ($date === false) {
    throw new Exception('The given date is not in the expected format d/mY.');
}

// create the desired format for the database
$value = $date->format('Y-m-d');

// check for this date in your database
$sql = "SELECT id FROM example WHERE start_date = :start_date";
$statement = $pdo->prepare($sql);
$statement->bindValue(':start_date', $value);
$statement->execute();

// fetch a possible result
$row = $statement->fetch(PDO::FETCH_ASSOC);

// ongoing further processing
var_dump($row);
上面的示例使用PDO从mysql数据库中提取数据。无论使用何种数据库适配器,过程都保持不变。在数据库表中声明唯一的日期列,使用数据时间函数和类并检查数据库中的现有日期


PS:您不必从数据库中预先选择。另一种方法可能是在尝试插入具有已存在日期值的数据集时获取错误。根据数据库表中日期列的唯一约束,insert将导致错误。您可以通过在重复的键更新sql查询中使用类似的方法,或者在数据库适配器周围使用try/catch块捕捉insert语句中的错误,来避免这种行为,如果在这种情况下抛出异常。

当客户机选择一个日期时,您应该发出一个ajax调用,并检查表中是否存在该日期,只需重置日期值并向客户机发送消息以选择另一个日期。此外,还可以在日期值为空时禁用表单提交按钮,以防止意外复制


在Mysql端,将日期列设置为唯一,并在抛出消息时捕获它作为响应,并显示上面@DefinitelynotRafal评论的祝酒词。

1:使日期列唯一/id,这样Mysql本身就阻止它插入。如果您尝试插入相同的日期,这将在php端抛出一个错误。第二:在插入之前,您必须检查日期是否已经存在,或者您是否捕获到异常。请添加一些代码。。。您使用的是框架还是自定义结构?您的mysql表的结构是什么?投票结束此问题以获得更多细节和清晰性@Bogdam用PHP和MySQL标记了这个问题。因为这似乎是完全错误的,所以不清楚究竟什么是表达式,什么是表达式。建议的格式不适合MySQL。Dosen不适合我…不适合我是同一个类别,好像有错误。完全没有任何信息可以帮助你。如果你能更详细地表达自己,那就太好了。什么东西不适合您?我的PHP版本不喜欢DateTime::CreateFormFormFormat'd/m/Y'。代码中有一个输入错误。你不应该只是复制代码。试着去理解,到底发生了什么。DateTime类从PHP5.3开始就可用。