我对post变量到sql查询感到困惑, 这是我的report.php代码的样本
<form action="report.php">
<select id="status" name="status">
<option value="MARRIED">married</option>
<option value="SINGLE">Single</option>
<option value="ALL">ALL</option>
</select>
<input type="submit" value="Seach">
</form>
<?php
$status= $_GET['status'];
// Create DB connection
$sql = "SELECT * FROM member WHERE status ='$status'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo "<B>id: </B>" . $row["user_id"]. " -- <b>Date Record:</b> " . $row["created"]. " -- <b>Last Seen</b> " . $row["last_seen"]. " -- <b>Status: </b> "
}
} else {
echo "0 results";
}
$conn->close();
?>
如何选择“ALL”条件?
答案 0 :(得分:4)
我不知道PHP所以这不是确切的代码,但概念应该是这样的
if( $status == 'ALL' )
$sql = "SELECT * FROM member";
else
$sql = "SELECT * FROM member WHERE status ='$status'";
答案 1 :(得分:2)
在这种情况下,将$ status变量存储在POST中是非常明智的,因为SQL查询取决于URL中存储的值,因此向用户公开。
另一件事,因为你在这里处理遗留代码是为了更加确保你尽可能地过滤用户输入和SQL查询。使用较旧和过时功能的事情是,无论采取何种预防措施,您仍然容易受到XSS和SQL注入攻击,因此强烈建议您使用MySQLi或PDO(PHP)数据对象)扩展,因为它们提供更稳定和高级的功能。
$status = htmlspecialchars($_GET['status'], ENT_QUOTES);
$where = '';
if ($status != 'ALL') {
$where = 'WHERE status = "$status"';
}
$sql = mysql_real_escape_string('SELECT * FROM member ' . $where);
$results = mysql_query($sql);
答案 2 :(得分:0)
在PHP文件中
<?php
$status= $_GET['status'];
if($status == 'ALL'){
$where = '';
}else{
$where = 'status = '".$status."' ';
}
// Create DB connection
$sql = "SELECT * FROM member WHERE ".$where." ";
?>