php - PHP 搜索 / 考虑多个输入的最佳结果 / Ingore 空输入
问题描述
隔离时间让我尝试一些练习代码,但我真的在这一个中积累了。
看看我的文件。顺便说一句,我的数据库连接很好
数据库
CREATE TABLE `excavated` (
`owner_name` varchar(255) NOT NULL,
`area` varchar(255) NOT NULL,
`street` varchar(255) NOT NULL,
`building_block` varchar(255) NOT NULL,
`year` varchar(255) NOT NULL,
`number` varchar(255) NOT NULL,
`archeologist` varchar(255) NOT NULL,
`key_words` varchar(255) NOT NULL,
`filename` varchar(255) NOT NULL,
`size` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
download_index.php(我的表格)
<form id="form" action="filesLogicDownload.php" method="post">
<?php include 'download_info.php'; ?>
<div id="preview"><img src="" width="150px"/></div><br>
<input class="btn btn-success" type="submit" value="Search">
</form>
download_info.php(用户可以给出的所有值。他不必全部给出)
<!--Όνομα Ιδιοκτήτη -->
<div class="form-group">
<label>Όνομα Ιδιοκτήτη</label>
<input type="text" class="form-control" id="owner_name" name="owner_name" placeholder="Όνομα Ιδιοκτήτη" >
</div>
<!--Περιοχή -->
<div class="form-group">
<label>Περιοχή</label>
<input type="text" class="form-control" id="area" name="area" placeholder="Περιοχή" >
</div>
<!--Οδός / Θέση -->
<div class="form-group">
<label>Οδός / Θέση</label>
<input type="text" class="form-control" id="street" name="street" placeholder="Οδός / Θέση" >
</div>
<!--Οικοδομικό Τετράγωνο -->
<div class="form-group">
<label>Οικοδομικό Τετράγωνο (Ο.Τ)</label>
<input type="text" class="form-control" id="building_block" name="building_block" placeholder="Οικοδομικό Τετράγωνο (Ο.Τ)" >
</div>
<!--Έτος Ανασκαφής -->
<div class="form-group">
<label>Έτος Ανασκαφής</label>
<input type="text" class="form-control" id="year" name="year" placeholder="Έτος Ανασκαφής" >
</div>
<!--Αριθμός Σχεδιαστικόυ Αρχείου -->
<div class="form-group">
<label>Αριθμός Σχεδιαστικού Αρχείου</label>
<input type="text" class="form-control" id="number" name="number" placeholder="Αριθμός Σχεδιαστικού Αρχείου" >
<!--Λέξεις Κλειδία -->
</div>
<div class="form-group">
<label>Λέξεις Κλειδία</label>
<input type="text" class="form-control" id="key_words" name="key_words" placeholder="Λέξεις Κλειδία" >
</div>
<!--Αρχαιολόγος -->
<div class="form-group">
<label>Αρχαιολόγος</label>
<input type="text" class="form-control" id="archeologist" name="archeologist" placeholder="Αρχαιολόγος" >
</div>
filesLogicDownload.php(在这里我想在他按下按钮时显示值)
<?php
include 'database_connection.php';
if(!empty($_POST['owner_name'])){
$owner_name = $_POST['owner_name'];
}else {
$owner_name = "0";
}
if(!empty($_POST['area'])){
$area = $_POST['area'];
}else {
$area = "0";
}
if(!empty($_POST['street'])){
$street = $_POST['street'];
} else {
$street = "0";
}
if(!empty($_POST['building_block'])){
$building_block = $_POST['building_block'];
}else {
$building_block = "0";
}
if(!empty($_POST['year'])){
$year = $_POST['year'];
}else {
$year = "0";
}
if(!empty($_POST['number'])){
$number = $_POST['number'];
}else {
$number = "0";
}
if(!empty($_POST['key_words'])){
$key_words = $_POST['key_words'];
}else {
$key_words = "0";
}
if(!empty($_POST['archeologist'])){
$archeologist = $_POST['archeologist'];
}else {
$archeologist = "0";
}
$sql ="SELECT * FROM employees
WHERE
'owner_name' LIKE '%{$owner_name}%'
OR 'area' LIKE '%{$area}%'
OR 'street' LIKE '%{$street}%'
OR building_block LIKE '%{$building_block}%'
OR 'year' LIKE '%{$year}%'
OR 'number' LIKE '%{$number}%'
OR archeologist LIKE '%{$archeologist}%'; ";
$result = mysqli_query($conn, $sql);
$resultCheck = mysqli_num_rows($result);
?>
<table>
<th>Όνομα Ιδιοκτήτη</th>
<th>Περιοχή</th>
<th>Οδός / Θέση</th>
<th>Οικοδομικό Τετράγωνο (Ο.Τ)</th>
<th>Έτος Ανασκαφής</th>
<th>Αριθμός Σχεδιαστικού Αρχείου</th>
<th>Λέξεις Κλειδία</th>
<th>Αρχαιολόγος</th>
<th>Μέγεθος Αρχείου</th>
<?php
if ($resultCheck > 0) {
while ($row = mysqli_fetch_assoc($result)){
?>
<tr>
<td><?php echo $row['owner_name']; ?></td>
<td><?php echo $row['area']; ?></td>
<td><?php echo $row['street']; ?></td>
<td><?php echo $row['building_block']; ?></td>
<td><?php echo $row['year']; ?></td>
<td><?php echo $row['number']; ?></td>
<td><?php echo $row['archeologist']; ?></td>
<td><?php echo $row['key_words']; ?></td>
<td><?php echo $row['filename']; ?></td>
<td><?php echo $row['size']; ?></td>
</tr>
<?php
}
}
mysqli_close($conn);
?>
</table>
</html>
首先,我想弄清楚,当他不在我的某些输入中键入值时,我如何在搜索中忽略。
例如,如果他只给出 3 个值,那么我的代码将显示考虑到它们的所有数据库结果。如果他只键入 1 个或更多,则相同。
每次我不知道他会选择什么价值观和多少。
最后我只想显示正确的结果。
当他输入 year 和 number 时,结果应该是正确的 year AND number。
不显示所有具有年份或编号的结果。
例如,如果 year=2005 和 number=1 :
不显示:
年份 = 2005数字 = 1
年份 = 2005数字 = 2
年份 = 2006 数字 = 1
*年 = 2007 数字= 1
但仅显示:
年份 = 2005 数字 = 1
我希望,您会理解我的解释以及我的想法。如果它能够实现这一点,如果有人有想法,我会很高兴。
谢谢,保重!
解决方案
如果您需要获取具有强 AND 条件的数据,它可能看起来像这样
<?php
include 'database_connection.php';
$fields = ['owner_name','area','street','building_block','year','number','archeologist','key_words','filename','size'];
$sql ="SELECT * FROM employees WHERE 1=1";
$condition = " AND ";
foreach($fields as $f) {
if ( !empty($_POST[ $f ] ) ) {
$sql .= ($condition . $f . " LIKE '%" . $_POST[ $f ] . "%'");
}
}
$sql .= ';';
$result = mysqli_query($conn, $sql);
...
推荐阅读
- ionic-framework - Ionic 4 Tabs 标签尺寸?
- python - Python Pandas 中的分组/分类年龄列
- jquery - 在jquery中获取字符串的中间部分
- django - 无法打印从视图传递到模板的变量
- oracle - 外部对象不存在
- c++ - cin 仅在输入非数字值时跳过下一个 cin
- javascript - 如何在 expressJS 中保持不断变化的语言状态
- postgresql - 第一次在协调器上初始化查找时德鲁伊 Postgresql 语法错误
- spring - 无法使用 AssertJ 断言异常
- html - 保持所有屏幕分辨率的翻译 css (x,y) 值相同?