Панель поиска с выпадающими категориями. Результаты поиска не извлекаются из базы данных и отображаются

0

Поэтому у меня есть панель поиска, в которой я надеюсь найти записи в базе данных mysql и показать их на веб-странице. Он должен позволить пользователю выбирать поле, которое они ищут, но оно не показывает записи на другом конце. Есть идеи?

HTML:

	<form action='recordresult.php' method='POST' name='form_filter' class="form-style-1" >    
    <b>Search</b><br>
    <select name="selectVal">
        <option value="category" >Select a category</option>
<option value="first_name">First Name</option>
<option value="surname">Surname</option>
<option value="address">Address</option>
<option value="phonenumber">Telephone</option>
    </select>
    <input type='text' name='search' placeholder='Enter text here...'><br>
    <input type='submit' value='Send'>  
</form>
	

PHP

<?php
include("config.php");
$link = mysqli_connect($server, $db_user, $db_pass)
or die ("Could not connect to mysql because ".mysqli_error($link));

// select the database
mysqli_select_db($link, $database)
or die ("Could not select database because ".mysqli_error($link));

  $search         = isset($_POST['search'])       ? htmlspecialchars(trim($_POST['search']))      : null;
    $catLocation    = isset($_POST['selectVal'])    ? htmlspecialchars(trim($_POST['selectVal']))   : null;
    $query          = "SELECT * FROM $table WHERE ";

    //YOU INDICATED YOU'D NEED TO RUN THE SEARCH-QUERY IF THE SEARCH-TERM AND SEARCH-SCOPE ARE DEFINED IE: NOT NULL; HOWEVER IF THE SEARCH TERM IS NOT GIVEN, YOU SELECT EVERYTHING IN THAT TABLE... (BAD PRACTICE, THOUGH)
    if($catLocation){
        if($search){
            if($catLocation == "category"){
                $query .= " category LIKE '%" . $search . "%'";
            }
			else if($catLocation == "first_name"){
                $query .=  "first_name LIKE '%" . $search . "%'";
            }
			else if($catLocation == "surname"){
                $query .=  "surname LIKE '%" . $search . "%'";
            }
			else if($catLocation == "address"){
                $query .=  "address LIKE '%" . $search . "%'";
            }
			else if($catLocation == "phonenumber"){
                $query .=  "phonenumber LIKE '%" . $search . "%'";
            }
        }
		
		else{
            $query .= "1";            
        }

        $sql        = mysqli_query($query);
        //HERE AGAIN WAS AN ERROR... YOU PASSED mysql_fetch_array A STRING $query INSTEAD OF A RESOURCE: $sql
        while ($row = mysqli_fetch_array($sql)){
            $firstname  = $row["first_name"];
            $surname    = $row["surname"];
            $address   = $row["address"];
            $phonenumber = $row['phonenumber'];
            

            echo "First Name :  $firstname<br>";
            echo "Surname : $surname<br>";
            echo "Address : $address<br>";
            echo "Phone Number: $phonenumber<br>";
          
        }

    }
	
?>

Код не содержит никаких ошибок только в пустой области, где он должен быть. Также задается вопросом, знает ли кто-нибудь, возможно ли иметь имя и фамилию first_name и поля, и сказать "Emma Watson", и иметь возможность возвращать результаты из обоих полей, если одно из них находится там?

Спасибо за вашу помощь!

  • 0
    где вы декларируете таблицу $? Используйте готовые заявления.
Теги:

1 ответ

0

Проверьте ниже обновленный код

include("config.php");
$link = mysqli_connect($server, $db_user, $db_pass) or die ("Could not connect to mysql because ".mysqli_error($link));

// select the database
mysqli_select_db($link, $database)
or die ("Could not select database because ".mysqli_error($link));

$search         = isset($_POST['search'])       ? htmlspecialchars(trim($_POST['search']))      : null;
$catLocation    = isset($_POST['selectVal'])    ? htmlspecialchars(trim($_POST['selectVal']))   : null;
$query          = "SELECT * FROM $table WHERE ";

//**If you want to merge for first name and surname then you need to merge both query with OR condition as below**
if($catLocation){
    if($search){
        if($catLocation == "category"){
            $query .= " category LIKE '%" . $search . "%'";
        }
        else if($catLocation == "name"){
            $query .=  " ( first_name LIKE '%" . $search . "%' OR surname LIKE '%" . $search . "%' ) ";
        }
        else if($catLocation == "address"){
            $query .=  "address LIKE '%" . $search . "%'";
        }
        else if($catLocation == "phonenumber"){
            $query .=  "phonenumber LIKE '%" . $search . "%'";
        }
    }   
    else{
        $query .= "1";            
    }

    $sql = mysqli_query($link, $query); // **Adding reference connection variable**

    while ($row = mysqli_fetch_array($sql)){
        $firstname  = $row["first_name"];
        $surname    = $row["surname"];
        $address   = $row["address"];
        $phonenumber = $row['phonenumber'];


        echo "First Name :  $firstname<br>";
        echo "Surname : $surname<br>";
        echo "Address : $address<br>";
        echo "Phone Number: $phonenumber<br>";

    }

}

Объединить 2 поля (имя и фамилия) в одном (имя) для поиска в обоих полях

<form action='recordresult.php' method='POST' name='form_filter' class="form-style-1" >    
<b>Search</b><br>
<select name="selectVal">
    <option value="category" >Select a category</option>
    <option value="name">name</option>
    <option value="address">Address</option>
    <option value="phonenumber">Telephone</option>
</select>
<input type='text' name='search' placeholder='Enter text here...'><br>
<input type='submit' value='Send'>  
</form>
  • 0
    Спасибо за помощь! Смотрите мой ответ выше :)
  • 0
    @natstv - добавьте error_reporting (-1) вверху вашего кода. Также перед выполнением запроса распечатайте его на странице и запустите в phpmyadmin.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню