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

У меня есть эта форма и страница процесса.
На странице формы есть два скрытых значения идентификатора ввода и значения reg_time, которые устанавливаются в ноль в конце, когда при выполнении идентификатора не возникает никаких проблем, но в строке reg_time я получаю 0000-00-00 00:00:00 установленная отметка времени
в таблице пользователи.
Есть предложения почему?

  function post($POST)
{
$POST = array_map('trim', $_POST);
$hash = "$2y$10$";
$salt = "nekiludistringzahash22";
$his = $hash . $salt;
$POST['pass'] = crypt($_POST['pass'],$his);
return $POST;
}

$sql = "insert into users values(:" . implode(",:", array_keys(post($_POST))) . ");";try{
$db = new PDO('mysql:host=localhost;charset=utf8;dbname=dbname','root','');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

}catch (PDOException $e)

{

die("Conn problem " . $e->getMessage());
}

$reg = $db->prepare($sql);
$reg->execute(post($_POST));

и форма

 <form action="exp2.php" method="post">
<input type="hidden" name="id" value="null">

<input type="text"name="uname">
<input type="text"name="pass">
<input type="text"name="name">
<input type="text"name="lname">
<input type="submit">

<input type="hidden" name="reg_time" value = "null">
</form>

1

Решение

Ваша проблема довольно распространенная.

Многие ученики не могут сказать NULL значение из строки, состоящей из четырех букв «NULL». Пока последнее не имеет абсолютно никакого особого значения.

Также есть и плохие новости: протокол HTTP основан на тексте. Означает, что никто не может отправить ничего, кроме строки, используя метод HTTP, и, таким образом, NULL значение не может быть отправлено через HTTP POST.

Чтобы этот код работал, вы должны добавить свои NULL на стороне сервера, так же, как вы делаете это для пароля:

function post($POST)
{
$POST = array_map('trim', $_POST);
$hash = "$2y$10$";
$salt = "nekiludistringzahash22";
$his = $hash . $salt;
$POST['pass'] = crypt($_POST['pass'],$his);
$POST['reg_time'] = NULL;
$POST['id'] = NULL;
return $POST;
}

Однако это не главная проблема с вашим кодом. Худшая новость в том, что ваш код сильно уязвимы для инъекций sql, несмотря на, казалось бы, правильное связывание.

Чтобы сделать это безопасным, сделайте вашу функцию приемлемой список допустимых полей, и назначить NULL значение для отсутствующих:

function post($allowed)
{
$post = array();
foreach ($allowed as $key)
{
if (isset($_POST[$key])) $post[$key] = trim($_POST[$key]);
else $_POST[$key] = NULL;
}
$hash = "$2y$10$";
$salt = "nekiludistringzahash22";
$his = $hash . $salt;
$POST['pass'] = crypt($_POST['pass'],$his);
}

А затем назовите это так:

$post = post(array('id','uname','pass','name','lname','reg_time'));
$sql = "insert into users values(:" . implode(",:", array_keys($post)).");";
$reg = $db->prepare($sql);
$reg->execute($post);

таким образом у вас будут отфильтрованы все имена полей.

В качестве бонуса вы сможете назначить пользовательское значение вашей кнопке отправки;)

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]