Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何将HTML输入字段中的值插入MySQL?_Php_Mysql_Html_Forms_Date - Fatal编程技术网

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

Php 如何将HTML输入字段中的值插入MySQL?,php,mysql,html,forms,date,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="nacimi

如何将表单中的值插入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>
这适用于所有其他字段,但不适用于日期字段;它是空的。我做错了什么


谢谢

使用
STR\u TO\u DATE
将文本转换为有效的日期格式:

STR_TO_DATE('12/15/2008', '%m/%d/%Y'); 

使用
STR_TO_DATE
将文本转换为有效的日期格式:

STR_TO_DATE('12/15/2008', '%m/%d/%Y'); 

尝试并回显
$\u POST['nacimiento']并查看它是否有任何作用?您似乎没有发布整个SQL查询,也许查询中有错误

编辑:您还可以尝试查看使用的错误


以下代码易受攻击

停止使用mysql_*函数,因为它们已被弃用。改为使用,因为PDO允许参数绑定,从而保护您免受sql注入的影响


你可以阅读使用PDO的文章

Try和echo
$\u POST['nacimiento']并查看它是否有任何作用?您似乎没有发布整个SQL查询,也许查询中有错误

编辑:您还可以尝试查看使用的错误


以下代码易受攻击

停止使用mysql_*函数,因为它们已被弃用。改为使用,因为PDO允许参数绑定,从而保护您免受sql注入的影响

您可以使用PDO阅读您需要的内容。这需要先解决。()你的
$\u发布
数据并检查发生了什么。如果你需要更多的帮助。从您所写的内容来看,我不明白为什么不应该发送值

获取日期字符串后,将值转换为字符串文字格式:

然后使用以下方法插入:

使用以下命令可以执行此操作:

你。这需要先解决。()你的
$\u发布
数据并检查发生了什么。如果你需要更多的帮助。从您所写的内容来看,我不明白为什么不应该发送值

获取日期字符串后,将值转换为字符串文字格式:

然后使用以下方法插入:

使用以下命令可以执行此操作:


MySQL需要YYYY-MM-DD格式的日期文本。虽然它接受的内容相当宽松,但您提供的格式是不可接受的

也许你可以玩一些弦乐杂耍,但是帮你自己一个忙,把它做好——也就是说,使用。您不仅能够轻松地将日期解析和预检查推迟到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();

MySQL需要YYYY-MM-DD格式的日期文本。虽然它接受的内容相当宽松,但您提供的格式是不可接受的

也许你可以玩一些弦乐杂耍,但是帮你自己一个忙,把它做好——也就是说,使用。您不仅能够轻松地将日期解析和预检查推迟到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();

您的问题可能是需要将日期格式化为SQL标准(YYYY-MM-DD)

如果你对帖子中的内容相当有信心,那么你可以使用以下方法:

$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

您的问题可能是需要将日期格式化为SQL标准(YYYY-MM-DD)

如果你对帖子中的内容相当有信心,那么你可以使用以下方法:

$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

使用参数化SQL查询,否则您将受到攻击。您的站点当前对SQL注入开放。请参阅mysql_u函数已弃用(即,它们将在将来被删除)。切换到mysqli_uu,或者更好地切换到PDO。关于您的问题,您确定您的数据库将接受格式为dd/mm/yyyy的日期字符串吗?正确的格式很可能必须是YYYY-MM DDAs@Lusitanian,您应该使用参数化查询(例如PDO),除非您有很好的理由不这样做。否则,您可以这样做:
nacimiento=mysql\u real\u escape\u string($\u POST['nacimiento'])mysql\uu
而不是
mysqli\u
。使用和
mysqli_查询($conn,“插入到voluntarios(nacimiento)值(“.”.mysqli_real_escape_字符串($nacimiento)。“”)”使用参数化SQL查询,否则您将被黑客攻击。您的站点当前对SQL注入开放。请参阅mysql_u函数已弃用(即,它们将在将来被删除)。切换到mysqli_uu,或者更好地切换到PDO。关于您的问题,您确定您的数据库将接受格式为dd/mm/yyyy的日期字符串吗?正确的格式很可能必须是YYYY-MM DDAs@Lusitanian,您应该使用参数化查询(例如PDO),除非您有很好的理由不这样做。否则,您可以这样做:
nacimiento=mysql\u real\u escape\u string($\u POST['nacimiento'])mysql\uu
而不是
mysqli\u
。使用和
mysqli_查询($conn,“插入到voluntarios(nacimiento)值(“.”.mysqli_real_escape_字符串($nacimiento)。“”)”或使用比PDO更简单的mysqli。无论哪种方式,原始mysql函数都不推荐使用;结果是empty@Aatch-simpler只是一个意见问题,但我认为PDO被更广泛地采用,这就是我推荐它的原因:)查询的第一部分是mysql_connect(“localhost”、“user”、“password”);mysql_select_db(“db”)@kush PDO代表未受数据库保护的PHP数据对象
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