• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z filtrowaniem bazy danych MySQL przy pomocy php

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
391 wizyt
pytanie zadane 25 lutego 2017 w PHP przez Gabriel Janczak Użytkownik (710 p.)

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>

 

1 odpowiedź

0 głosów
odpowiedź 25 lutego 2017 przez Gabriel Janczak Użytkownik (710 p.)
Problem rozwiązany. Należało zmienić formuę zapytania SQL na: "SELECT * FROM customers WHERE $filter LIKE "."'".$value."'"

Podobne pytania

0 głosów
1 odpowiedź 3,009 wizyt
0 głosów
1 odpowiedź 2,209 wizyt
0 głosów
1 odpowiedź 200 wizyt
pytanie zadane 31 października 2016 w PHP przez Q_Nick Mądrala (5,010 p.)

93,444 zapytań

142,436 odpowiedzi

322,698 komentarzy

62,806 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

...