如何将HTML输入字段中的值插入MySQL?

时间:2012-07-23 22:33:51

标签: php mysql html forms date

如何将(在表单中)的值插入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')");`

这适用于所有其他字段,但不适用于日期字段;它是空的。我做错了什么?

谢谢

5 个答案:

答案 0 :(得分:4)

seem to have problems even getting the value from your input field to the server。这需要先修复。 Debugvar_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');