Stworzyłem taki oto prosty silnik do wyświetlania i selekcjonowania odpowiednich wierszy z bazy MySQL. Domyślnie strona ta wyświetla wszystkie rekordy, jednak po uzupełnieniu paru opcji można przefiltrować całą bazę danych i wyświetlić tylko te które nas interesują.
Problem jest następujący. Kiedy nie wybiorę jeszcze żadnej opcji filtrowania udaje się bez żadnego problemu wyświetlić wszystkie rekordy z bazy. Jednak kiedy póbuje wyszukać na podstawie Imienia, Nazwiska, E-maila to zwraca mi " Trying to get property of non-object ". Co ciekawe błąd nie występuje kiedy szukam po numerze telefonu. Próbowałem zmienić w bazie danych żeby zamiast varchara w kolumnach które nie zwracają wyniku dane były zapisywane w tinytext. Jednak i to nie podziałało. Wydaje mi się że to może być problem z niezgodnością typów zmiennych czy coś takiego. Tak czy inaczej skończyły mi się pomysły. Macie pomysł jak to naprawić?
Kod źródłowy:
<select name="filter">
<option value="firstname">Imienia</option>
<option value="surename">Nazwiska</option>
<option value="e-mail">E-maila</option>
<option value="number">Telefonu</option><br/>
<input type="text" name="value">
</select>
<br><br>
<input type="submit">
</form>
<table border=1>
<tbody>
<tr>
<td>Imie</td>
<td>Nazwisko</td>
<td>E-mail</td>
<td>Telefon</td>
<td>Adres</td>
</tr>
<?php
//Printing all data about customers in table
if(!isset($_POST['filter'])){
$sql_customers_query = "SELECT * FROM customers";
$sql_customers_query_result = $connect->query($sql_customers_query);
$customers_row_nmber = $sql_customers_query_result->num_rows;
for($i=0; $i<$customers_row_nmber; $i++){
$row = $sql_customers_query_result->fetch_assoc();
echo "<tr>";
echo "<td>".$row["firstname"]."</td>"."<td>".$row["surename"]."</td>"."<td>".$row["e-mail"]."</td>"."<td>".$row["number"]."</td>"."<td>".$row["adress"]."</td>";
echo "<tr/>";
}
}
else{
$sql_customers_query = "SELECT * FROM customers where ". $_POST['filter']."= ".$_POST['value'];
$sql_customers_query_result = $connect->query($sql_customers_query);
$customers_row_nmber = @ $sql_customers_query_result->num_rows;
for($i=0; $i<$customers_row_nmber; $i++){
$row = $sql_customers_query_result->fetch_assoc();
echo "<tr>";
echo "<td>".$row["firstname"]."</td>"."<td>".$row["surename"]."</td>"."<td>".$row["e-mail"]."</td>"."<td>".$row["number"]."</td>"."<td>".$row["adress"]."</td>";
echo "<tr/>";
}
}
?>
</tbody>
</table>