Wydaje się, że sednem problemu jest to, że otaczasz kolumnę DetailName
w pojedynczych cudzysłowach:"'DetailName'=""
kiedy wszystko, co powinno być, to "DetailName=""
Z uwagi na bezpieczeństwo chciałbym zaznaczyć, że funkcja mysql_escape_string()
Używasz, aby wymusić, aby dane wejściowe były przyjazne dla mysql, są stare i pełne luk w zabezpieczeniach. Zamiast tego polecam użycie znacznie bezpieczniejszej implementacji:mysql_real_escape_string()
. Poniższe przykłady kodu wykorzystują nowszą, bezpieczniejszą funkcję.
Jednak niezależnie od tych kwestii, sugerowałbym nieco inne podejście, które będzie łatwiejsze do odczytania i znacznie łatwiejsze w zarządzaniu na dłuższą metę.
Na początek sugeruję używanie tej samej nazwy we wszystkich polach wyboru i używanie DetailName jako wartości, a nie jako klucza:
Następnie, używając wartości danych wejściowych, a nie kluczy, możemy teraz wygenerować naszą klauzulę. Bardzo wydajnie:
// Uruchamia mysql_real_escape_string() dla każdej napotkanej wartości.$clean_criteria =array_map('mysql_real_escape_string', $_REQUEST['criteria']);// Konwertuj tablicę na ciąg znaków.$criteria =implode(" ','", $clean_criteria);
Na koniec w zapytaniu polecam użycie IN
operator zamiast LUB
operator dla wydajności i czytelności:
Oto cała strona PHP łącząca modyfikacje, które sugeruję z twoją logiką:
$value){ // Uruchamia mysql_real_escape_string() dla każdej napotkanej wartości. $clean_criteria =array_map('mysql_real_escape_string', $_REQUEST['criteria']); // Konwertuj tablicę na łańcuch. $kryteria =implode("','", $clean_criteria); } $rs =mysql_query(" SELECT Lokalizacje tabeli.Identyfikator miasta,Restauracje tabeli.NazwaReszta, Lokalizacje tabeli.Tbl.Ulica, Lokalizacje tabeli.Telefon, Lokalizacje tabeli.Tabela.Cena, Lokalizacje tabeli.Ocena, Szczegóły tabeli.NazwaSzczegółów FROM (Identyfikator tabeliRestauracje.TblLokalizacjaStan. INNER JOIN ( tblLocDet INNER JOIN tblDetails ON tblLocDet.DetailID =tblDetails.DetailID ) ON tblLocations.LocationID =tblLocDet.LocID WHERE tblLocations.CityID='16' AND tblDetailsIN$crits.Details); if(!$rs) { echo "Nie można przeanalizować zapytania"; } else if(mysql_num_rows($rs) ==0) { echo "Nie znaleziono rekordów"; } else { echo "\n"; echo "\n"; echo "MIEJSCE "; echo "ADRES "; echo "TELEFON "; echo "CENA "; echo "OCENA "; echo " \n\n"; while($row =mysql_fetch_array($rs)) { echo" $row[RestName]
$row[Adres] $row[Telefon] $row[Cena] $row[Ocena] \n"; } echo "
\n"; }}