首页 > 解决方案 > 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

我希望,您会理解我的解释以及我的想法。如果它能够实现这一点,如果有人有想法,我会很高兴。

谢谢,保重!

标签: phpdatabasesearch

解决方案


如果您需要获取具有强 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);
...

推荐阅读