[英]HTML form values submit to PHP and query
我想知道是否有一两个人有一双备用眼睛。 我看到的问题在于我的问题。 它忽略了第一个初始isset($ lastName),似乎总是选择isset($ title)。 我还要提到的是,这些值是从HTML表单中发布的,用于搜索数据库中的姓氏或标题。
我的问题是,有人可以帮助解决逻辑问题吗? 我也知道它很容易进行SQL注入,但是它位于本地数据库中,我将很快对其进行仔细研究。 如果有人可以提出建议,我绝对有兴趣听取他们的建议。
根据建议的HTML表单。
<form name="lookup" method="post" action="searchEmployeeList.php" autocomplete="off">
<fieldset>
<p>Conduct a search</p>
<table width="600">
<tr>
<td width="150">Surname:</td>
<td>
<input type="text" name="lastName" value="" maxlength="25" placeholder="Employees surname">
</td>
</tr>
<tr>
<td width="150">Title:</td>
<td>
<input type="text" name="title" value="" maxlength="25" placeholder="Job role">
</td>
</tr>
<tr>
<td></td>
<!--Blank row-->
<td>
<input type="submit" name="submit" value="Search now">
<input type="submit" name="show_all" value="Show all">
</td>
</tr>
</table>
</fieldset>
</form>
if (isset($_POST['lastName'])) {
include 'DBConDetails.php';
if (isset($lastName)) {
$sql = "SELECT * FROM employee_data Where last_name = '".$_POST['lastName'].
"'";
}
if (isset($_POST['title'])) {
$sql = "SELECT * FROM employee_data Where title = '".$_POST['title'].
"'";
}
$result = mysqli_query($con, $sql);
if ($result - > num_rows > 0) {
echo "<table id = 'searchResults'> < tr >
< td > ID < /td> < td > Name < /td> < td > Age < /td><td>Title</td > < td > Years of Service < /td> < td > Salary < /td> < /tr>";
//multiple echos plainly for readability
while ($row = $result - > fetch_assoc()) {
echo '<tr>';
echo '<td>' . $row["employee_id"] . '</td>';
echo '<td>' . $row["first_name"] . ' ' . $row["last_name"] . '</td>';
echo '<td>' . $row["age"] . '</td>';
echo '<td>' . $row["title"] . '</td>';
echo '<td>' . $row["yos"] . '</td>';
echo '<td>' . $row["salary"] . '</td>';
echo '</tr>';
}
} else {
echo "I'm afraid we could not find any matches, try editing your criteria.";
}
echo "</table>";
}
如果将来有人遇到类似的问题,那么问题在于两个if语句都为true,这将导致执行和后者覆盖第一个if()
语句。 应该已经注意到了 !
我认为您需要检查:
isset($_POST['lastName']);
代替
isset($lastName);
因为后者将被设置,但等于一些未定义的值(也许是空字符串?)。 标题变量也是如此。
首先,我认为最好检查if ($_SERVER['REQUEST_METHOD'] == 'POST')
请参阅: $ _POST与$ _SERVER ['REQUEST_METHOD'] =='POST'
之后,您可以使用isset
检查$_POST
变量,也许也可以使用strlen
检查变量会有所帮助。 使用strlen
,可以trim
strlen
不必要的空格。
例:
<?php
if($_SERVER['REQUEST_METHOD'] == "POST") {
if(isset($_POST['lastName']) && strlen(trim($_POST['lastName'])) > 0) {
// Do some action
}
}
?>
首先,您要覆盖第一个查询/条件语句。
您要说的是, “如果已设置,请执行此操作。如果已设置,请执行此操作”。
我觉得您可能想做的是检查两者是否都已设置,然后一次性将这些变量传递到查询中。
例如,并使用!empty()
代替isset()
:
if (!empty($_POST['lastName']) && !empty($_POST['title']) ) {
$lastName = $_POST['lastName'];
$title = $_POST['title'];
$sql = "SELECT * FROM employee_data
Where last_name = '" . $lastName . "'
AND title = '" . $title . "'";
}
如果此处的目标是检查一个或另一个(看起来是这种情况),则可以使用OR
运算符将上面的代码修改为:
if (!empty($lastName) || !empty($title) ) {
$lastName = $_POST['lastName'];
$title = $_POST['title'];
$sql = "SELECT * FROM employee_data
Where last_name = '" . $lastName . "'
OR title = '" . $title . "'";
}
并摆脱:
if (isset($title)) {
$sql = "SELECT * FROM employee_data Where title = '" . $title . "'";
}
旁注:该OR
- ||
运算符也可以在PHP条件语句中使用。 &&
是AND
; 选择一个适合您想要实现的目标。
如果我的上述操作因MySQL抱怨的字符(例如撇号)而引发错误,那么您将需要使用mysqli_real_escape_string()
来转义数据。
旁注:如果要使用上述内容,请确保首先连接到数据库,并放置include 'DBConDetails.php';
作为第一行。 首先连接通常很好。
另外,您的代码易于进行SQL注入。 使用准备好的语句:
另外, if (isset($_POST['lastName'])) {
语句之前没有打开的PHP标记。 如果那是您的实际代码。
它应显示为
<?php
if (isset($_POST['lastName'])) {
...
脚注:
DBConDetails.php
您正在使用哪个MySQL API, DBConDetails.php
。 从连接到查询,您需要使用相同的API。 不同的MySQL API不会相互混合。
还针对您的查询检查错误:
如果您想分开提交按钮的操作
<input type="submit" name="submit" value="Search now">
<input type="submit" name="show_all" value="Show all">
您将需要使用单独的条件语句并使用相关的name属性。
即:
if (isset($_POST['submit'])) {
// do something, as in include other conditionals, code etc.
}
和
if (isset($_POST['show_all'])) {
// do something, as in include other conditionals, code etc.
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.