分析输入字段的值以查询参数


Parse value of input field to query parameters

我可以将输入字段的值解析为查询参数,以在同一表单中获得选择字段的值吗?

代码如下:

<FORM ACTION="login.php" METHOD=get>
    <label for="email">Email: </label>
    <input id="email" name="email" type="text" ><br>
    <label for="pin">Password: </label>
    <input id="pin" name="pin" type="password" ><br>
    <label for="company">Company</label>
            <select name="Company" id="company">
            <option>Select Company:</option>
            <?php
                $conn= new mysqli($servername,$username,$password,$db);
                if ($conn->connect_error) {
                    die("Connection failed: " . $conn->connet_error);
                }
                $email = isset($_GET['email'])?$_GET['email']:"";
                $sql="select company from accounts WHERE email = '$email';";
                $results = mysqli_query($conn, $sql);
                if ($results->num_rows > 0){
                    while ($row = mysqli_fetch_array($results)){
                        echo "<option value='"company1'">" .$row['company'] . "</option>";
                    }
                }
            ?>
            </select>
    <input class="submit_btn" type="submit" value="Login"></input><br>
    <a id="cust-nopin" href="javascript:;"><p class="text_centered_pass">Click here if you don't have a password</p></a>
</FORM>

这不可能吗?

在这种情况下,您最好选择Ajax。

您的表单页面:

<form action="login.php" method=get>
    <label for="email">Email: </label>
    <input id="email" name="email" type="text" ><br>
    <label for="pin">Password: </label>
    <input id="pin" name="pin" type="password" ><br>
    <label for="company">Company</label>
    <select name="Company" id="company">
        <option value="">Select Company:</option>
    </select>
    <input class="submit_btn" type="submit" value="Login"></input><br>
    <a id="cust-nopin" href="javascript:void(0);"><p class="text_centered_pass">Click here if you don't have a password</p></a>
</form>

现在JQuery部分:

$(function () {
        $(document).on("change, blur, keydown", "#email", function () {
            $.ajax({
                url: 'path/to/ajaxfile.php',
                type: 'GET',
                dataType: 'json',
                data: {email: $(this).val()},
            })
            .done(function(response) {
                if (response.status) {
                    var html = '<option value="">Select Company:</option>' + response.html;
                    $("#company").html(html);
                } else {
                    console.log(status.message);
                }
            })
            .fail(function(data) {
                alert("Something went wrong please try again later.");
                console.log(data.responseText);
            });
        });
    });

然后是路径/to/ajaxfile.php:

$conn = new mysqli($servername,$username,$password,$db);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connet_error);
}
if (! empty($_GET['email'])) {
    $email = mysqli_real_escape_string($conn, $_GET['email']);
    $sql = "SELECT company FROM accounts WHERE email = '$email'";
    $results = mysqli_query($conn, $sql);
    if ($results->num_rows > 0){
        $html = "";
        while ($row = mysqli_fetch_array($results)){
            $html .= '<option value="' . $row['company'] . '">' . $row['company'] . '</option>';
        }
        echo json_encode(array("status" => true, "html" => $html));
    } else {
        echo json_encode(array("status" => false, "message" => "There is no company with that email address."));
    }
} else {
    echo json_encode(array("status" => false, "message" => "No email is there to lookup."));
}

这应该可以帮助你实现你想要做的事情…

我希望它能有所帮助。

当然可以使用输入字段的值作为查询的参数。这是一种非常常见的情况。

您的查询不起作用,因为您已将$email变量包含在单引号中。所以这应该有效:

$sql="select company from accounts WHERE email = $email";

(不需要末尾的分号)。

但是

这种使用用户输入查询数据库的方式是一种糟糕的做法,因为它会使代码容易受到SQL注入的攻击。

为了防止SQL注入,建议使用Prepared Statements

所以你应该这样查询数据库:

$sql="select company from accounts WHERE email = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("s", $email);
$stmt->execute();