我正在尝试将一个出生日期插入到数据库中的一个表中,但它正在插入0000-00-00
。我的表单采用date
输入或<input type="date">
。我的插入命令是:
if (($myname = $_GET['your_name']) && ($phone = $_GET['phone']) &&
($dob = date('Y-m-d', strtotime($_GET['dob'])))) {
$command = "INSERT INTO form_data (id, name, phone, dob)
VALUES ('', '".$db->real_escape_string($myname)."',
'".$db->real_escape_string($phone)."', '".$db->$dob."')";
除$dob
外,我的脚本无效。如何正确处理HTML5输入“日期”输入类型到数据库? (当我在这里尝试他们的建议时,我搜索但似乎没有工作)。
答案 0 :(得分:1)
您将date('Y-m-d', strtotime($_GET['dob'])
分配给$dob
,但稍后您尝试将其引用为$db->$dob
。您可能希望它像其他变量一样处理它并使用$db->real_escape_string($dob)
:
$command = "INSERT INTO form_data (id, name, phone, dob)
VALUES ('', '".$db->real_escape_string($myname)."',
'".$db->real_escape_string($phone)."', '".$db->real_escape_string($dob)."')";
为了使其更具可读性,我会使用sprintf
。
$command = sprintf("INSERT INTO form_data (id, name, phone, dob) VALUES ('', '%s', '%s', '%s')",
$db->real_escape_string($myname),
$db->real_escape_string($phone),
$db->real_escape_string($dob));
答案 1 :(得分:1)
我建议您格式化代码,以便更容易阅读,而不是在if
块内进行分配。
$myname = $_GET['your_name'];
$phone = $_GET['phone'];
$dob = strtotime( $_GET['dob'] );
if( !empty( $myname ) && !empty( $phone ) && $dob !== false ) {
$dob = date('Y-m-d', $dob );
$stmt = $dbConnection->prepare('INSERT INTO form_data ( id, name, phone, dob ) VALUES ( \'\', ?, ?, ? )');
$stmt->bind_param('s', $myname);
$stmt->bind_param('s', $phone);
$stmt->bind_param('s', $dob);
$stmt->execute();
$result = $stmt->get_result();
}
注意我是如何使用mysqli而不是mysql_的。它更安全。
答案 2 :(得分:0)
通过在$db->$dob
集中使用VALUES
,您尝试访问$db
成员,并将其设置为$dob
。您应该使用$dob
代替。