提交时无法在数据库中插入时间戳

下一个

我有此表单和过程页面。
在表单页面上,当执行id的任何问题但在reg_time行下时,有两个隐藏的输入id和reg_time值在“ end”处设置为null,但我在表用户中设置了名叫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>
你的常识

您的问题很普遍。

许多学习者无法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);

这样,您将过滤掉所有字段名称。

作为奖励,您将能够为您的Submit按钮分配一个自定义值;)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在数据库中插入时间戳?

来自分类Dev

jsp在数据库中插入时间

来自分类Dev

无法使用C#在数据库中插入当前时间戳

来自分类Dev

在数据库中存储数据时自定义时间戳格式雄辩模型

来自分类Dev

PHP oop在数据库中插入日期/时间

来自分类Dev

插入MySQL数据库时间戳

来自分类Dev

时间戳未插入数据库

来自分类Dev

无法使用json在数据库中插入数据

来自分类Dev

无法使用php在数据库中插入值

来自分类Dev

无法使用php在数据库中插入值

来自分类Dev

无法在数据库表中插入值

来自分类Dev

将存储在数据库中的php time()更改为ISO 8601时间戳

来自分类Dev

Codeigniter上传:在数据库中插入时,图像的文件名返回null

来自分类Dev

提交后无法插入数据库

来自分类Dev

在数据库中插入值

来自分类Dev

如何在Access数据库(VB Net)中插入时间

来自分类Dev

如何告诉休眠在数据库中创建日期而不是时间戳?

来自分类Dev

如何在cakephp中保存当前时间戳在数据库中?

来自分类Dev

将日期插入MySQL数据库时如何忽略时间戳

来自分类Dev

在数据库中插入记录时,在asp.net中插入两次

来自分类Dev

PreparedStatement.setTimestamp未将时间戳插入数据库

来自分类Dev

PreparedStatement.setTimestamp未将时间戳插入数据库

来自分类Dev

创建PHP时间戳以插入到MySQL数据库中

来自分类Dev

在MySQL中插入时间戳

来自分类Dev

在Oracle中插入时间戳

来自分类Dev

在HREF中插入时间戳

来自分类Dev

在文件中替换/插入时间戳

来自分类Dev

如何使用php在数据库的DateTime列类型中插入日期时间对象

来自分类Dev

无法使用选项(文本区域)在数据库中插入数据

Related 相关文章

热门标签

归档