我知道我做错了,因为我只是通过名称搜索编辑了它,有人可以帮助我弄清楚我做错了什么吗?尝试搜索,但没有任何显示。
<form name="frmSearch" method="get" action="<?=$_SERVER['SCRIPT_NAME'];?>"
<table class="table table-bordered">
<tr>
<th>Search by date
<input name="ftxtKeyword" type="date" id="ftxtKeyword" value="<?=$_GET["ftxtKeyword"];?>"> Between
<input name="btxtKeyword" type="date" id="btxtKeyword" value="<?=$_GET["btxtKeyword"];?>">
<input type="submit" class="btn btn-primary" value="Search">
</tr>
</table>
</form>
<?
if($_GET["ftxtKeyword"] != "")
{
$objConnect = mysql_connect("localhost","root","1234") or die("Error Connect to Database");
$objDB = mysql_select_db("mydatabase");
$strSQL = "SELECT * FROM service WHERE Service_date BETWEEN ".$_GET["ftxtKeyword"]." AND ".$_GET["btxtKeyword"]."";
$objQuery = mysql_query($strSQL) or die ("Error Query [".$strSQL."]");
?>
您的 SQL 语句没有正确引用日期。
而不是
$strSQL = "SELECT * FROM service WHERE Service_date BETWEEN ".$_GET["ftxtKeyword"]." AND ".$_GET["btxtKeyword"]."";
将其更改为
$strSQL = "SELECT * FROM service WHERE Service_date BETWEEN '".$_GET["ftxtKeyword"]."' AND '".$_GET["btxtKeyword"]."'";
需要注意的几点:
一定要考虑@RiggsFolly的建议...不要使用已弃用的功能,因为当您最终迁移到服务器(或将PHP升级到更高版本)时,您会遇到很多麻烦。
避免在
echo
秒内使用 PHP 短标记。而不是<?=
使用<?php echo
.为什么?想一想,当您将代码移动到php.ini
设置关闭了短标记的环境时会发生什么情况?...头痛。一般来说,我建议使用
POST
作为表单的方法而不是GET
;当你使用GET
时,当你点击提交按钮时,你会在 URL 中暴露参数等......和不要直接在 SQL 语句中使用
POST
或GET
值。使用预准备语句并始终清理用户输入...作为黄金经验法则:永远不要相信用户:)
日期,假设它们的格式正确,需要像这样用引号引起来
BETWEEN '".$_GET["ftxtKeyword"]."' AND '".$_GET["btxtKeyword"]."'";
正确的格式是YYYY-MM-DD