【发布时间】:2012-04-18 05:34:35
【问题描述】:
问题:
我无法找到与我的情况相关的文档或相关答案。
基本上,我想通过使用多个 html 表单下拉字段来生成一个 MySQL 就绪日期以供插入。
目前我的插入代码使用单个字段作为日期,我在 MySQL 格式的文本字段中手动输入:
$sql=
" INSERT INTO events (e_date, e_time, e_ampm, e_type, e_name) " .
" VALUES ('{$form_e_date}','{$form_e_time}', '{$form_e_ampm}', '{$form_e_type}','{$form_e_name}')";
我想使用 3 个单独的表单字段(例如 $month、$day、$year)而不是 $form_e_date(我目前使用格式 YYYY-MM-DD 在文本字段中输入),并从下拉选择中选择值盒子。
问题:
有没有一种方法可以连接 3 个变量($year、$month、$day,在 MySQL 中用“-”表示)来代替 $form_e_date,如果可以,您将如何构造这个语法?
我也愿意以更好的方式来解决这个问题(仍然使用 MySQL/PHP);我只需要帮助或指导资源。
非常感谢任何帮助!
附加信息:
附:当前语法是
VALUES ('{$form_e_date}','{$form_e_time}', ... etc.
而不是
VALUES ('$_POST[form_e_date]','$_POST[form_e_time]', ... etc.
作为我收到的未定义索引通知的 PHP 修复的一部分。
还有解决办法
$form_e_date= $_POST['year'] . "-" . $_POST['month'] . "-" . $_POST['day'];
对我来说并不可取,因为它会在新的年、月和日变量上导致未定义的索引通知,即使它们是使用一种可以消除未定义索引通知的技术预先定义的,例如:
if (array_key_exists("year", $_POST))
$year = mysql_real_escape_string($_POST["year"]);
else
$year = null;
代码#abc(用于评论 JT Smith 的回答):
$month = $_POST['month'];
$day = $_POST['day'];
$year = $_POST['year'];
$whole_date = array($year, $month, $day);
$mysql_formatted_date = implode("-", $whole_date);
$sql=
" INSERT INTO events (e_date, e_time, e_ampm, e_type, e_name) " .
" VALUES ('{$mysql_formatted_date}','{$form_e_time}', '{$form_e_ampm}', '{$form_e_type}','{$form_e_name}')";
代码#fgh:
<select name="month">
<option value="01">Jan</option>
<option value="02">Feb</option>
<option value="03">Mar</option>
<option value="04">Apr</option>
<option value="05">May</option>
<option value="06">Jun</option>
<option value="07">Jul</option>
<option value="08">Aug</option>
<option value="09">Sep</option>
<option value="10">Oct</option>
<option value="11">Nov</option>
<option value="12">Dec</option>
</select>
<select name="day">
<?php
for ($i = 1; $i <=31; $i++) {
echo "<option value=\"$i\">$i</option>";
}
?>
</select>
<select name="year">
<option value="2012">2012</option>
<option value="2013">2013</option>
</select>
【问题讨论】:
-
$year.'-'.$month.'-'.$day?此外,直接在查询中输入变量既不好又危险,请检查PDO 和参数 -
感谢您的建议。在这一点上,我并不担心注射,因为我正在本地开发,而且我是唯一使用它的人。虽然我不认为在我的情况下这会特别危险,因为该字段是从选择下拉列表中发布的,而不是文本输入。我也会研究 PDO,尽管我认为现阶段这对我来说可能有点先进。
-
PDO其实很简单,用过几次就喜欢上了。对于 SQL 注入,是否有选择或任何其他输入数据的方式并不重要。即使不打开页面也可以发送数据。即使对于本地页面,尝试阻止它也是一种好习惯
-
问题更新:经过进一步调查,我发现这个问题link 似乎在做我想做的事情,但我尝试了这个,但它仍然没有在我的 e_date 中插入任何内容列(作为日期类型,它仍然插入 0000-00-00;作为 varchar 它插入空)。