我需要插入三个文本框的日期。年份的文本框应该有四个数字的长度,两个长度为月,两个为一天。另外用户不应该插入单词。
<label for="textfield"></label>
<label for="t1">year</label>
<input type="text" name="t1" id="textfield" width="50" />
<label for="t2">month</label>
<input type="text" name="t2" id="textfield" width="30" />
<label for="t3">day</label>
<input type="text" name="t3" id="textfield" width="30" />
我的数据库中有一个日期格式的表。如何将这些字段插入到我的表的日期字段中?
答案 0 :(得分:2)
您必须检查日期是否存在。然后你可以进行查询。还尝试使用prepare语句来避免SQL注入。
$date = $_GET['t1'].'-'.$_GET['t2'].'-'.$_GET['t3'];
if (is_int($_GET['t1']) && is_int($_GET['t2']) && is_int($_GET['t3']) && checkdate($_GET['t2'], $_GET['t3'], $_GET['t1'])) {
//You can use also:
//filter_var($_GET['t1'], FILTER_VALIDATE_INT) && filter_var($_GET['t2'], FILTER_VALIDATE_INT) && filter_var($_GET['t3'], FILTER_VALIDATE_INT)
//Validate your inputs and use prepare statements, this is only for demonstrating purposes
$sql = "INSERT INTO your_table (date_field) VALUES('$date')";
//Execute your sql query here
} else {
echo 'Date does not exist.';
}
使用PDO:
try {
//Make your connection handler to your database
$conn = new PDO("mysql:host=".$servername.";dbname=".$database, $username, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
if (is_int($_GET['t1']) && is_int($_GET['t2']) && is_int($_GET['t3']) && checkdate($_GET['t2'], $_GET['t3'], $_GET['t1'])) {
//You can use also:
//filter_var($_GET['t1'], FILTER_VALIDATE_INT) && filter_var($_GET['t2'], FILTER_VALIDATE_INT) && filter_var($_GET['t3'], FILTER_VALIDATE_INT)
$date = $_GET['t1'].''.$_GET['t2'].''.$_GET['t3'];
$sql = "INSERT INTO your_table (date_field) VALUES(:date_field)";
$stmt = $conn->prepare($sql);
$stmt->execute(array(':date_field'=>$date));
} else {
echo 'Date does not exist.';
}
} catch(PDOException $e) {
echo $e->getMessage();
die();
}
答案 1 :(得分:0)
要首先限制输入到表单中的内容,您可以使用html5支持的输入类型&#34; number&#34;以及maxlength属性。
<input type="number"maxlength="4">
但是我会废除这三个字段而只使用一个字段。并使用字段掩码来限制可以放入的内容。例如此插件https://igorescobar.github.io/jQuery-Mask-Plugin/或http://robinherbots.github.io/jquery.inputmask/