所以我设计了一个表单,允许用户输入姓名,地区,年龄和语言。我还制作了一个 PHP 脚本来获取他们输入的数据,但是如果用户将字段留空或他们开始写入名称并删除它,数据库将返回每个字段,因为它与数据库中的每个记录匹配。有没有办法取消包含空字段?如果有人能做名字和地区,我应该能够弄清楚其余的。我设置了jQuery和AJAX,以便如果以任何形式进行按键,它就会执行此搜索功能。我只是想知道是否有比我正在做的更有效的MySQL方法。在查看第一个答案并尝试实现它之后,我不确定如果未设置变量,如何更新 MySQL,除非我执行 20+ if else 语句。
阿贾克斯:
$(function() {
$("#searchform").bind('submit',function() {
var name = $('#name').val();
var region =$('#region').val();
$.get('scripts/searchFunction.php',{name:name, region:region}, function(data){
$("#show").html(data);
});
return false;
});
$("#searchform").keyup(function() {
var name = $('#name').val();
var region =$('#region').val();
$.get('scripts/searchFunction.php',{name:name, region:region}, function(data){
$("#show").html(data);
});
return false;
});
});
搜索功能.php
<?php
include 'connection.php';
session_start();
$name = "%" . $_GET['name'] . "%";
$region = "%" . $_GET['region'] . "%";
$dbuname;
$dbfname;
$dblname;
$dbage;
$dbregion;
$dblanguage;
$stmt = $conn->prepare('SELECT Username, First_Name, Last_Name, Age, Region, Language FROM '. $table .' WHERE First_Name LIKE ? OR Region LIKE ?;');
$stmt->bind_param('ss',$name, $region);
$stmt->execute();
$stmt->bind_result($dbuname, $dbfname, $dblname, $dbage, $dbregion, $dblanguage);
while($stmt->fetch()){
echo '<div class="row">';
echo '<div class="col-md-4">';
if(file_exists("../img/accounts/" .$dbuname . "/Profile.jpg")){
echo '<img src="img/accounts/'. $dbuname .'/Profile.jpg" class="img-fixed"/>';
}else if(file_exists('../img/accounts/' .$dbuname . '/Profile.png"')){
echo '<img src="img/accounts/'. $dbuname .'/Profile.png"/>';
}else{
echo '<img src="img/default-img/default.png" class="img-fixed"/>';
}
echo '</div>';
echo '<div class="col-md-7 col-sm-3 col-sm-offset-1">';
echo '<p>First Name: ' . $dbfname . '</p>';
echo '<p>Last Name: ' . $dblname . '</p>';
if(isset($_SESSION['Loggedin'])){
if($_SESSION['Loggedin'] == 1){
echo '<p>Age: ' . $dbage . '</p>';
echo '<p>Region: ' . $dbregion . '</p>';
echo '<p>Language: ' . $dblanguage . '</p>';
}
}
echo '</div>';
echo '</div>';
echo '<hr class="section-spacer"/>';
echo '<br>';
}
?>
您可以在调用之前添加验证ajax
并检查用户是否输入了任何内容(空格除外),例如:
var str = $('#field').val();
if(val && val.trim().length > 0){
//method call
}
这样,如果输入为 null 或仅包含空格,则不会调用函数。
更新
您需要修改 php 代码以根据传递的参数动态创建和运行查询,例如:
$stmt;
if (!empty($name) and !empty($region)) {
$stmt = $conn->prepare('SELECT Username, First_Name, Last_Name, Age, Region, Language FROM '. $table .' WHERE First_Name LIKE ? OR Region LIKE ?;');
$stmt->bind_param('ss',$name, $region);
}else if (!empty($name)) {
$stmt = $conn->prepare('SELECT Username, First_Name, Last_Name, Age, Region, Language FROM '. $table .' WHERE First_Name LIKE ?;');
$stmt->bind_param('ss',$name);
}else{
$stmt = $conn->prepare('SELECT Username, First_Name, Last_Name, Age, Region, Language FROM '. $table .' WHERE Region LIKE ?;');
$stmt->bind_param('ss',$region);
}