Mam sobie formularz z wyszukiwaniem serwisu, wygląda on tak klik
Filtrowanie po nazwie i mieście działa, bo mam tu relacje 1:1 jak widać na schemacie tabel. Jednak w sytuacji, gdy wybieram przy wyszukiwaniu kilka usług, z filtrowaniem mam wielki problem. Nawet jak nie dam multiple, mam problem z wyświetleniem tylko poszukiwanych informacji.
plik smiasto.php - wszystko działa ok, wybrane usługi zapisywane są w tablicy indeksz[]
wynik postem idzie do sm.php
//$indeksn i $indeksm to wartości wpisane w formularzu wyszukiwania
plik sm.php
Kod
$db_user='x';//user
$db_password='x';//haslo
$database='y';//nazwa bazy
$sql_conn = mysql_connect('gdzieserwisowac.pl',$db_user,$db_password);
mysql_select_db($database) or die('Blad wyboru bazy danych.');
mysql_query("SET NAMES latin2");
$zapytanie = "SELECT * FROM serwis AS a JOIN miasto AS b ON a.id_miasta = b.id_miasta where (a.nazwa like '%".$indeksn."%' and b.id_miasta like '%".$indeksm."%')"; # filtrowanie po nazwie i mieście działa, jak dam tu coś więcej - czyli w zapytaniu dodam jeszcze kolejne potrzebne tablice grupaz i zakres, wyświetlanie się sypie i drukują się powtarzające się rekordy z bazy
$idzapytania = mysql_query($zapytanie);
$zapytanies = "SELECT * FROM `serwis` AS a LEFT JOIN `grupas` AS c ON a.id_grupys = c.id_grupys LEFT JOIN `auta` AS d ON c.id_auta = d.id_auta ORDER BY `a`.`id_grupys`";
$idzapytanias = mysql_query($zapytanies);
$zapytaniez = "SELECT * FROM `serwis` AS a LEFT JOIN `grupaz` AS c ON a.id_grupyz = c.id_grupyz LEFT JOIN `zakres` AS d ON c.id_zakresu = d.id_zakresu ORDER BY `a`.`id_grupyz`";
$idzapytaniaz = mysql_query($zapytaniez);
$arrayTmp = array();
while ($wiersz = mysql_fetch_array($idzapytaniaz)){
$arrayTmp[] = $wiersz;
}
$arrayTmp2 = array();
while ($wiersz = mysql_fetch_array($idzapytanias)){
$arrayTmp2[] = $wiersz;
}
$wszystkie_strony = array();
$url = 'target.php';
while ($wiersz = mysql_fetch_assoc($idzapytania)){
?>
<table>
<?
echo "" .$wiersz['id']. ". ";
echo "".$wiersz["nazwa"]. ". ";
echo ", ";
echo "" .$wiersz['city']. ", ";
echo "ul. " .$wiersz['adres']. " ";
$idgrupyz = $wiersz["id_grupyz"];
$idgrupys = $wiersz["id_grupys"];
foreach($arrayTmp as $wiersz){ # drukuja sie wszystkie uslugi danego serwisu
if ($wiersz["id_grupyz"] == $idgrupyz) {
echo( " ".$wiersz["zakres"].", ");
}
}
foreach($arrayTmp2 as $wiersz){ # drukuja sie wszystkie obslugiwane auta danego serwisu
if ($wiersz["id_grupys"] == $idgrupys) {
echo( " ".$wiersz["auto"].", ");
}
}
echo "</td></tr></table>";
}
$db_password='x';//haslo
$database='y';//nazwa bazy
$sql_conn = mysql_connect('gdzieserwisowac.pl',$db_user,$db_password);
mysql_select_db($database) or die('Blad wyboru bazy danych.');
mysql_query("SET NAMES latin2");
$zapytanie = "SELECT * FROM serwis AS a JOIN miasto AS b ON a.id_miasta = b.id_miasta where (a.nazwa like '%".$indeksn."%' and b.id_miasta like '%".$indeksm."%')"; # filtrowanie po nazwie i mieście działa, jak dam tu coś więcej - czyli w zapytaniu dodam jeszcze kolejne potrzebne tablice grupaz i zakres, wyświetlanie się sypie i drukują się powtarzające się rekordy z bazy
$idzapytania = mysql_query($zapytanie);
$zapytanies = "SELECT * FROM `serwis` AS a LEFT JOIN `grupas` AS c ON a.id_grupys = c.id_grupys LEFT JOIN `auta` AS d ON c.id_auta = d.id_auta ORDER BY `a`.`id_grupys`";
$idzapytanias = mysql_query($zapytanies);
$zapytaniez = "SELECT * FROM `serwis` AS a LEFT JOIN `grupaz` AS c ON a.id_grupyz = c.id_grupyz LEFT JOIN `zakres` AS d ON c.id_zakresu = d.id_zakresu ORDER BY `a`.`id_grupyz`";
$idzapytaniaz = mysql_query($zapytaniez);
$arrayTmp = array();
while ($wiersz = mysql_fetch_array($idzapytaniaz)){
$arrayTmp[] = $wiersz;
}
$arrayTmp2 = array();
while ($wiersz = mysql_fetch_array($idzapytanias)){
$arrayTmp2[] = $wiersz;
}
$wszystkie_strony = array();
$url = 'target.php';
while ($wiersz = mysql_fetch_assoc($idzapytania)){
?>
<table>
<?
echo "" .$wiersz['id']. ". ";
echo "".$wiersz["nazwa"]. ". ";
echo ", ";
echo "" .$wiersz['city']. ", ";
echo "ul. " .$wiersz['adres']. " ";
$idgrupyz = $wiersz["id_grupyz"];
$idgrupys = $wiersz["id_grupys"];
foreach($arrayTmp as $wiersz){ # drukuja sie wszystkie uslugi danego serwisu
if ($wiersz["id_grupyz"] == $idgrupyz) {
echo( " ".$wiersz["zakres"].", ");
}
}
foreach($arrayTmp2 as $wiersz){ # drukuja sie wszystkie obslugiwane auta danego serwisu
if ($wiersz["id_grupys"] == $idgrupys) {
echo( " ".$wiersz["auto"].", ");
}
}
echo "</td></tr></table>";
}
Jak na początku samej pętli próbowałem dać jeszzce raz pętle foreach, $wiersz osiąga maksymalną wartość i potem już nic sie nie drukuje. Nie wiem dlatego jak wydrukować tylko te serwisy, które mają usługi wybrane przy opcji wyszukiwania.