Формат даты в mysql базе данных и HTML тип ввода = "дата" не совпадают. Как мне добавить эту дату в базу данных? - PullRequest
0 голосов
/ 06 марта 2020

Итак, я создаю очень простую форму, в которой я хочу добавить данные из формы HTML, используя PHP, в базу данных MySQL. К сожалению, формат, который мне дает тег input type = "date", таков: html date format, но MySQL требует следующее: enter image description here. Я искал много интернет-источников для решений, но все, кажется, говорят, что форматы не могут быть изменены. Я не хочу менять форматы, я просто хочу иметь возможность добавлять их в базу данных. Вот полный скрипт HTML / PHP, если необходимо:

store. html:

<!DOCTYPE html>
<html>
<head>
    <title>Progress</title>
</head>
<body>
<form action="store.php" method="get">
Customer Name<input type="text" name="cname"><br>
Purchase order date<input type="date" id="podate"/><br>
<label for="yn">Work started?</label>
<select id="yn" name="yn">
    <option value="yes">Yes</option>
    <option value="no">No</option>
</select><br>
<label for="ifno">(If above selected is no)Reason for delay?</label>
<select id="ifno" name="ifno">
    <option value="nodelay">No delay</option>
    <option value="dipl">Delay from DIPL</option>
    <option value="customer">Delay from customer</option>
</select><br>
Tentative start date<input type="date" name="tentdate"><br>
<label for="progress">Progress</label>
<select id="progress" name="progress">
    <option value="started">Just Started</option>
    <option value="almost">Almost Finished</option>
</select><br>
<input type="submit" name="sub" value="Submit">

</form>
</body>
</html>

store. php

<?php 
include 'config.php';
$cname=$_GET['cname'];
$podate=$_GET['podate'];
$started=$_GET['yn'];
$reason=$_GET['ifno'];
$tentdate=$_GET['tentdate'];
$progress=$_GET['progress'];
if($cname=="" || $podate==""||$started=="" || $reason==""||$tentdate=""||$progress=""){
    $message="All fields must be filled";
    echo "<script type='text/javascript'>alert('$message'); 
    window.location.href='store.html';</script>";

}
else{
$sql = "INSERT INTO info (cname, podate, started, reason, tentdate, progress) VALUES ('$cname', '$podate', '$started', '$reason', '$tentdate', '$progress')";
if (mysqli_query($conn, $sql)) {
               //echo "New record created successfully";
                header('Location: store.html');
            } else {
                    $message="Something went wrong. Please try again.";
                    echo "<script type='text/javascript'>alert('$message'); 
                    window.location.href='store.html';</script>";
            }
        }
             mysqli_close($conn);
?>

Моя проблема здесь в том, что форматы HTML и MySQL не совпадают, что не позволяет мне сохранить его в базе данных. Я также пытался использовать DATE_FORMAT () в операторе вставки, но позже узнал, что его можно использовать для отображения, но не для вставки.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 06 марта 2020

Тип ввода даты всегда будет отправляться как гггг-мм-дд. См. Этот ответ

Если вы используете плагин, который изменяет формат даты при отправке, вам необходимо отформатировать дату в yyyy-mm-dd перед ее вставкой.

One путь date('Y-m-d', strtotime($_GET['podate'])); См. PHP strtotime , прежде чем идти с этим.

0 голосов
/ 06 марта 2020

Как указано здесь: Есть ли способ изменить тип ввода = формат "даты"? , формат ввода основан на языковой настройке браузера.

Вы можете использовать phps strtotime, чтобы преобразовать дд / мм / гггг в отметку времени, а затем либо использовать date, чтобы преобразовать ее в формат mysql, например:

date("Y-m-d H:i:s", strtotime($date))

или вместо этого просто сохраните отметку времени

...