HTML表单值提交给PHP并查询

时间:2015-10-25 19:58:51

标签: php

我想知道是否有人在一两分钟内有一双备用的眼睛。我看到的问题在于我的问题。它忽略了第一个初始的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语句都是真的,这导致执行和后者都覆盖了第一个if()语句。 应该注意到

3 个答案:

答案 0 :(得分:1)

我认为你需要检查:

isset($_POST['lastName']); 

而不是

isset($lastName);

后者会被设置,但是等于某个未定义的值(也许是空字符串?)。这同样适用于您的标题变量。

答案 1 :(得分:0)

首先,我认为最好选中class Base { public: void display() { foo(); } virtual void foo() { cout << "Base.foo()" << endl; } }; class Derived : public Base { public: void foo() { cout << "Derived.foo()" << endl; } }; int main() { Derived* derived = new Derived(); derived->display(); }

请参阅:$_POST vs. $_SERVER['REQUEST_METHOD'] == 'POST'

之后,您可以使用if ($_SERVER['REQUEST_METHOD'] == 'POST')检查$_POST变量,也可以使用isset检查变量。使用strlen时,strlen可以删除不必要的空格。

示例:

trim

答案 2 :(得分:0)

首先,你要覆盖你的第一个查询/条件语句。

你告诉它要做的是,“如果已设置,请执行此操作。如果已设置,则执行此操作”。

我觉得你可能想要做的就是检查两者是否都已设置,然后一次性在查询中传递这些变量。

例如并使用!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 另一个(看起来是这种情况),您可以修改上述代码,并使用OR运算符:< / p>

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。您需要使用从连接到查询的相同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.
}