我可以将输入字段的值解析为查询参数,以在同一表单中获得选择字段的值吗?
代码如下:
<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();