我的搜索结果现在只要与我的txt文件匹配的字段就打印出每个条目;它不会打印出过滤后的结果。如何更改if语句以便实现缩小功能?谢谢!
这是我的handle_search.php:
$delimiter = ' | ';
if(isset($_POST['submit'])){
$seasonsr = $_POST["seasonsr"];
$numbersr = $_POST["numbersr"];
$titlesr = $_POST["titlesr"];
$directorsr = $_POST["directorsr"];
$datesr = $_POST["datesr"];
$file = fopen("park.txt", "r");
if (!$file) {
die("There was a problem opening the park.txt file");
}
$search = file("park.txt");
$isfound = false;
foreach($search as $find){
$match = false;
$explode = explode($delimiter, $find);
if ($seasonsr == $explode [0] && $_POST['seasonsr'] != "") {
print $explode [0]. " " . $explode[1]. " " . $explode[2]. " " . $explode[3].
" " . $explode[4];
print ("<br/>");
$isfound = true;
$match = true;
}
if ($numbersr == $explode [1] && $_POST['numbersr'] != "" && !$match) {
print $explode [0]. " " . $explode[1]. " " . $explode[2]. " " . $explode[3].
" " . $explode[4];
print ("<br/>");
$isfound = true;
$match = true;
}
if ($titlesr == $explode [2] && $_POST['titlesr'] != "" && !$match) {
print $explode [0]. " " . $explode[1]. " " . $explode[2]. " " . $explode[3].
" " . $explode[4];
print ("<br/>");
$isfound = true;
$match = true;
}
if ($directorsr == $explode [3] && $_POST['directorsr'] != "" && !$match) {
print $explode [0]. " " . $explode[1]. " " . $explode[2]. " " . $explode[3].
" " . $explode[4];
print ("<br/>");
$isfound = true;
$match = true;
}
$itemdate= $explode[4];
//print("<p>search: $datesr item: $itemdate match: </p>");
if (trim($datesr) == trim($explode [4]) && $_POST['datesr'] != "" && !$match) {
print $explode [0]. " " . $explode[1]. " " . $explode[2]. " " . $explode[3].
" " . $explode[4];
print ("<br/>");
$isfound = true;
$match = true;
}
}
if(!$isfound){
echo ("Sorry! No search found.");
}
}
fclose($file);
}
答案 0 :(得分:1)
一些提示:
将它们放在一起可能看起来像这样:
$delimiter = ' | ';
// array of POST field names you are interested in
$match_fields = array(
'seasonr',
'numbersr',
'titlesr',
'directorsr',
'datesr'
);
// array to store POSTed values
$match_values = array();
if(isset($_POST['submit'])){
// load POSTed values into match array
foreach($match_fields as $i => $field) {
$match_values[$i] = null;
if(!empty($_POST[$field])) {
$match_values[$i] = $_POST[$field];
}
}
// open file to read
$file = fopen("park.txt", "r");
if (!$file) {
die("There was a problem opening the park.txt file");
}
$isfound = false;
// $match = false; -- not used as this seems same as $isfound
// go through file one line at a time
while($line = fgetcsv($file, 0, $delimiter)) {
for($i = 0; $i < count($line); $i++) {
if($line[i] === $match_values[$i]) {
$isfound = true;
print_line($line);
break;
}
}
}
fclose($file);
if (false === $isfound) {
echo 'No results found';
}
} else {
// no POST was made do something else
}
function print_line($line) {
$string = '';
foreach($line as $item) {
$string .= $item . ' ';
}
rtrim($string);
$string .= '<br/>';
echo $string;
}