如何将(在表单中)的值插入MySQL日期字段中。我正在尝试这个:
<form action="enviar.php" autocomplete="off" method="post">
<label for="nacimiento" class="youpasswd" data-icon="p">
Fecha de Nacimiento
</label>
<br>
<input id="nacimiento" name="nacimiento"
required type="datetime" placeholder="DD/MM/YYYY" />
</form>
enviar.php
$nacimiento= $_POST['nacimiento'];
mysql_query("INSERT INTO voluntarios(nacimiento) VALUES ('$nacimiento')");`
这适用于所有其他字段,但不适用于日期字段;它是空的。我做错了什么?
谢谢
答案 0 :(得分:4)
你seem to have problems even getting the value from your input
field to the server。这需要先修复。 Debug(var_dump
)您的$_POST
数据并检查发生了什么。 Provide more code如果您需要更多帮助。从你写的东西,我看不出,为什么价值不应该被发送。
获得日期字符串后,convert将值设置为字符串文字格式MySQL recognizes:
$mysqldate = date( 'Y-m-d H:i:s', $phpdate );
然后使用mysqli_query
:
mysqli_query(sprintf("INSERT INTO voluntarios(nacimiento) VALUES ('%s')"),
mysql_real_escape_string($mysqldate));
使用PDO执行此操作:
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
$q = $dbh->prepare("INSERT INTO voluntarios(nacimiento) VALUE (:nacimiento)");
$q->bindParam(':nacimiento', $mysqldate, PDO::PARAM_STR);
$success = $q->execute();
答案 1 :(得分:2)
尝试并回显$_POST['nacimiento'];
并查看它是否有效?您似乎还没有发布整个SQL查询,可能是查询中有错误?
修改:您还可以尝试使用mysql_error
查看错误以下代码容易受到SQL injection
的攻击$nacimiento= $_POST['nacimiento'];
mysql_query("INSERT INTO voluntarios(nacimiento) VALUES ('$nacimiento')");`
停止使用mysql_ *函数,因为它们已被弃用。请改用PHP database objects (PDO),因为PDO允许参数绑定,以保护您免受sql注入。
您可以阅读使用PDO here
答案 2 :(得分:1)
MySQL希望日期文字为YYYY-MM-DD格式as explained in the manual。虽然它接受的东西相当宽松,但你提供的格式是不可接受的。
你可能会逃避一些字符串杂耍,但是帮自己一个忙,做得对 - 也就是说,使用PDO prepared statements。您不仅可以轻松推迟日期解析和解决方案。预先检查PHP,你的代码将更加安全和未来证明。
代码看起来像这样,使用示例中的元素
$stmt = $dbh->prepare("INSERT INTO voluntarios(nacimiento) VALUES (:nacimiento)");
$stmt->bindParam(':nacimiento', $nacimiento);
// WARNING - strtotime strtotime expects '-' separators if you feed it dd-mm-yyyy
// you should modify that in your form.
$nacimiento = strtotime($_POST['nacimiento']);
$stmt->execute();
答案 3 :(得分:1)
您的问题可能是日期需要格式化为SQL标准(YYYY-MM-DD)。
如果您对POST中的内容非常有信心,那么您可以使用:
$formatted_date = date('Y-m-d',strtotime($_POST['nacimiento']));
如果您想确保格式,那么您可以使用以下内容:
preg_match('#^(\d{1,2})/(\d{1,2})/(\d{4})$#', $_POST['nacimiento'], $matches);
if(count($matches))
{
$formatted_date = $matches[3].'-'.str_pad($matches[1],2,0,STR_PAD_LEFT).'-'.str_pad($matches[2],2,0,STR_PAD_LEFT);
// Use formatted date in query
}
else // handle error
答案 4 :(得分:0)
使用STR_TO_DATE
将文本转换为有效的日期格式:
STR_TO_DATE('12/15/2008', '%m/%d/%Y');