Как преобразовать строку в тип данных даты

Я хочу сохранить дату в своей базе данных MySQL, но получаю эту ошибку:

user::__construct() должен быть экземпляром даты, заданной строки

Я попытался преобразовать результат даты моего типа ввода в метку времени, используя эту строку:

$myDate = date('Y-m-d', strtotime($_POST['birthdate']));

И я получил эту ошибку:

Примечание. Неопределенный индекс: 2020-11-11
user::__construct() должен быть экземпляром даты, задан нулевым значением.

Когда я пытаюсь повторить тип данных переменной $myDate, он дает мне String.

Вот мой код:

if (isset($_POST['name']) and isset($_POST['surname']) and 
isset($_POST['birthdate']) and isset($_POST['email']) 
and isset($_POST['password'])){

//$myDate = date('Y-m-d', strtotime($_POST['birthdate']));
//echo $myDate;
//echo gettype($myDate);

$user1= new 
user($_POST['name'],$_POST['surname'],$_POST['birthdate'],$_POST['email'],$_POST['password']);
$userCores= new userCores();
$userCores->addUser($user1);

//header('Location: showUser.php');

}
else 
{
echo "Missing fields" ; 
}

HTML:

              <form name="RegisterForm" method="POST" action="register.php">
            <div class="form-group">
              <label for="nom">Nom <sup class="text-danger">*</sup></label>
              <input type="text" class="form-control" id="name" name="name"  placeholder="Entrer 
            votre nom" >
            </div>
            <div class="form-group">
              <label for="prenom">Prenom <sup class="text-danger">*</sup></label>
              <input type="text" class="form-control" id="surname" name="surname"  
            placeholder="Entrer votre prenom" >
            </div>
            <div class="form-group">
              <label for="birthDate">date de naissance <sup class="text-danger">*</sup></label>
              <input type="date" class="form-control" id="birthdate" name="birthdate"  
            placeholder="Entrer votre date de naissance" >
            </div>
            <div class="form-group">
              <label for="email">Email <sup class="text-danger">*</sup></label>
              <input type="email" class="form-control" id="email" name="email"  placeholder="Entrer 
            votre email" >
            </div>
            <div class="form-group">
              <label for="password">Mot de passe <sup class="text-danger">*</sup></label>
              <input type="password" class="form-control" id="password" name="password" 
             placeholder="Mot de passe" >
            </div>
            <button  type="submit" class="btn btn-primary-color w-100"  >Envoyer</button>
            
          </form>

PS: я использую PHP 7.4, поэтому вот мой конструктор:

private String $id;
private String $name;
private String $surname;
private date $birthdate;
private String $email;
private String $password;


function __construct(String $name, String $surname,date $birthdate, String $email,String $password){
    $this->name = $name;
    $this->surname = $surname;
    $this->birthdate = $birthdate;
    $this->email = $email;
    $this->password = $password;
}

(Когда я меняю тип на строку и тип ввода на текст, он работает нормально, поэтому я не думаю, что проблема в моем запросе).

Вот скриншот, когда я передаю временную метку объекту

введите здесь описание изображения

Этот экран, когда я передаю дату типа ввода

введите здесь описание изображения


person Amine Missaoui    schedule 08.11.2020    source источник
comment
пожалуйста, покажите содержимое $_POST['дата рождения']   -  person nbk    schedule 08.11.2020
comment
Он показывает дату, которую я вставил во входное имя = дата рождения.   -  person Amine Missaoui    schedule 08.11.2020
comment
вы уверены, пожалуйста, проверьте это, я бы предположил, что его не существует   -  person nbk    schedule 08.11.2020
comment
Смотрите скрин в моем посте   -  person Amine Missaoui    schedule 08.11.2020
comment
на снимке экрана ясно видно, что он получает NULL вместо даты, как я уже сказал   -  person nbk    schedule 08.11.2020
comment
я добавил другой захват, когда я передаю входное значение, пожалуйста, внимательно читайте сообщения в следующий раз.   -  person Amine Missaoui    schedule 08.11.2020
comment
Хорошо, теперь это движение, еще не свидание. но вы верите, что это $_POST, а не $myDate   -  person nbk    schedule 08.11.2020
comment
gettype($_POST['дата рождения']) возвращает строку, gettype($myDate) также возвращает строку   -  person Amine Missaoui    schedule 08.11.2020
comment
@nbk ясно, что я использую PHP ООП, в моем конструкторе я установил дату рождения как тип даты, поэтому объект ожидает дату, а не строку. вопрос теперь ясен?   -  person Amine Missaoui    schedule 08.11.2020
comment
я понял проблему с самого начала, но я не могу проверить, будет ли работать DateTime::createFromFormat, возможно, это неправильный подход   -  person nbk    schedule 08.11.2020
comment
Можете ли вы поделиться точным кодом, вызывающим эту проблему? Кроме того, как эта ошибка PHP связана с MySQL?   -  person Nico Haase    schedule 10.11.2020
comment
В PHP нет класса с именем date, но есть класс с именем DateTime. Это то, что вы хотели? Если это так, вам следует создать экземпляр этого класса и вместо этого передать его.   -  person Dharman    schedule 16.11.2020


Ответы (1)


попробуй сделать

$myDate = date("Y-m-d H:i:s", strtotime($_POST['birthdate'])); 

вместо

$myDate = date('Y-m-d', strtotime($_POST['birthdate']));
person shankarsh15    schedule 08.11.2020
comment
Спасибо, но он возвращает null в объекте. : ibb.co/bLvXy2z - person Amine Missaoui; 08.11.2020