我必须按日期从一个网页到另一个网页过滤一些行:
这是的第一页
<?php while($row = mysql_fetch_array($result)){ ?>
<tr>
<td><a href="meeting_view.php?meet=<?php echo $row[2];?>" target = '_blank' ><?php echo date("d-m-Y", strtotime($row[2]));?></a>
</td><?php}?>
这是meeting_view.php
$meet = $_GET['meet'];
$result = mysql_query("SELECT * FROM meeting WHERE meeting_date=$meet");
它不起作用,我的剧本怎么了?
更改
$result = mysql_query("SELECT * FROM meeting WHERE meeting_date=$meet");
至
$result = mysql_query("SELECT * FROM meeting WHERE meeting_date='$meet'");
虽然William的回答是正确的,并将帮助您解决眼前的问题,但我想再提几个我注意到的问题:
- 您应该避免使用
mysql
扩展,因为它从PHP 5.5开始就被弃用了,请参阅此处 - 您的代码当前易受SQL注入攻击。请查看此处,了解如何保护数据库
干杯
只需进行以下更改:
<td> <a href="meeting_view.php?meet='<?php echo $row[2];?>'" // add quotes
target = '_blank' >
<?php echo date("d-m-Y", strtotime($row[2]));?>
</a>
</td>
同时更改:
$result = mysql_query("SELECT * FROM meeting WHERE meeting_date='".$meet."')";
-
你可能同时有两次会议。要选择正确的,您应该使用id而不是时间。
-
为了使脚本更快更容易,让MySQL进行日期转换。
-
使用关联数组使脚本更易于调试和读取!
-
另一个重要的观点是使用Mysqli代替Mysql!它同样简单,但可以在未来的PHP更新中使用。
-
确保输入是您想要的。使用
intval( $_REQUEST['id'] )
将发送的id转换为整数。否则,有人可能会通过url插入此id:"0; DROP TABLE meeting;
",该url将选择id为0的行并删除整个表。这就是mrun在回答中所说的SQL注入!
我会这样重写所有内容:
// $sql = 'SELECT *, DATE_FORMAT("%d-%m-%Y", meeting_date) AS date FROM meeting';
<?php while($row = mysqli_fetch_assoc($result)){ ?>
<tr>
<td><a href="meeting_view.php?id=<?= $row['id'] ?>"
target='_blank' ><?= $row['date'] ?></a>
</td><?php}?>
和:
$result = mysqli_query('SELECT * FROM meeting WHERE id='
. intval( $_REQUEST['id'] ) );