Sortowanie wyników, wyszukiwania

0

Witam,
Mam następujący problem, zrobiłem wyszukiwarkę produktów parametry są wysyłane metodą POST a następnie wyświetlane zgodnie z zadanymi parametrami, do tego momentu jest wszystko ok.
Teraz gdy mam już wyświetlone produkty chciałbym sobie móc sortować według jednej z kolumn i tu pojawia się problem, bo w momencie kliknięcia sortowanie zostają zgubione parametry po jakich ma wyszukiwać.
Czy ktoś zna sposób jak to rozwiązać?

Poniżej zamieszczam kod.

<?php

include 'db.php'; // połączenie się z bazą danych
$tabela = 'produkty';	// zdefiniowanie tabeli MySQL

echo<<<Tekst
		Podaj kryteria wyszukiwania:<br>	
		<form action='index.php?podstrona=search' method='post'>
		Marka : <input type=text name=marka>  Model: <input type=text name=model> <br>
		Rok produkcji od <input type=text name=odrok> do <input type=text name=dorok> <br>
		Pojemność silnika od <input type=text name=odpojemnosc> do <input type=text name=dopojemnosc> <br>
		Moc silnika od <input type=text name=odmoc> do <input type=text name=domoc> <br>
		Przebieg od <input type=text name=odprzebieg> do <input type=text name=doprzebieg>  <br>
		Skrzynia biegów: <select name='skrzynia'>
			<option value=''></option> 
			<option value='manualna'>Manualna</option> 
			<option value='automatyczna'>Automatyczna</option> 
		</select>
		Uszkodzony: <select name='uszkodzony'>
			<option value=''></option> 
			<option value='tak'>tak</option> 
			<option value='nie'>nie</option> 
		</select><br>
		Liczba drzwi:  <select name='drzwi'>
			<option value=''></option> 
			<option value='2/3'>2/3</option> 
			<option value='4/5'>4/5</option> 
		</select><br>
		Cena od  <input type=text name='odcena'> do <input type=text name='docena'><br>
		<input type='hidden' value='1' name='send'/>
		<input type=submit value='Szukaj'/>	<br><br>
	
	</form>
		Sorotwanie według:
			Marka <a href='index.php?podstrona=search&jak=up&zmienna=Marka'>rosnąco</a> <a href='index.php?podstrona=search&jak=down&zmienna=Marka'>malejąco</a>
			Model <a href='index.php?podstrona=search&jak=up&zmienna=Model'>rosnąco</a> <a href='index.php?podstrona=search&jak=down&zmienna=Model'>malejąco</a>
			Rok <a href='index.php?podstrona=search&jak=up&zmienna=Rok_produkcji'>rosnąco</a> <a href='index.php?podstrona=search&jak=down&zmienna=Rok_produkcji'>malejąco</a>
			Pojemność <a href='index.php?podstrona=search&jak=up&zmienna=Pojemnosc_silnika'>rosnąco</a> <a href='index.php?podstrona=search&jak=down&zmienna=Pojemnosc_silnika'>malejąco</a>
			Moc <a href='index.php?podstrona=search&jak=up&zmienna=moc_silnika'>rosnąco</a> <a href='index.php?podstrona=search&jak=down&zmienna=moc_silnika'>malejąco</a>
			Przebieg <a href='index.php?podstrona=search&jak=up&zmienna=Przebieg'>rosnąco</a> <a href='index.php?podstrona=search&jak=down&zmienna=Przebieg'>malejąco</a>
			Skrzynia biegów <a href='index.php?podstrona=search&jak=up&zmienna=Skrzynia_biegow'>rosnąco</a> <a href='index.php?podstrona=search&jak=down&zmienna=Skrzynia_biegow'>malejąco</a>
			Uszkodzony <a href='index.php?podstrona=search&jak=up&zmienna=Uszkodzony'>rosnąco</a> <a href='index.php?podstrona=search&jak=down&zmienna=Uszkodzony'>malejąco</a>
			Liczba drzwi <a href='index.php?podstrona=search&jak=up&zmienna=Liczba_drzwi'>rosnąco</a> <a href='index.php?podstrona=search&jak=down&zmienna=Liczba_drzwi'>malejąco</a>
			Cena <a href='index.php?podstrona=search&jak=up&zmienna=cena'>rosnąco</a> <a href='index.php?podstrona=search&jak=down&zmienna=cena'>malejąco</a>
	
Tekst;



if (@$_POST["send"]) {	
	@$marka=htmlspecialchars(stripslashes(strip_tags(trim($_POST["marka"]))), ENT_QUOTES);
	@$model=htmlspecialchars(stripslashes(strip_tags(trim($_POST["model"]))), ENT_QUOTES);
	@$odrok_produkcji=htmlspecialchars(stripslashes(strip_tags(trim($_POST["odrok"]))), ENT_QUOTES);
	@$dorok_produkcji=htmlspecialchars(stripslashes(strip_tags(trim($_POST["dorok"]))), ENT_QUOTES);
	@$odpojemnosc_silnika=htmlspecialchars(stripslashes(strip_tags(trim($_POST["odpojemnosc"]))), ENT_QUOTES);
	@$dopojemnosc_silnika=htmlspecialchars(stripslashes(strip_tags(trim($_POST["dopojemnosc"]))), ENT_QUOTES);
	@$odmoc_silnika=htmlspecialchars(stripslashes(strip_tags(trim($_POST["odmoc"]))), ENT_QUOTES);
	@$domoc_silnika=htmlspecialchars(stripslashes(strip_tags(trim($_POST["domoc"]))), ENT_QUOTES);
	@$odprzebieg=htmlspecialchars(stripslashes(strip_tags(trim($_POST["odprzebieg"]))), ENT_QUOTES);
	@$doprzebieg=htmlspecialchars(stripslashes(strip_tags(trim($_POST["doprzebieg"]))), ENT_QUOTES);
	@$skrzynia=$_POST["skrzynia"];
	@$drzwi=$_POST["drzwi"];
	@$uszkodzony=$_POST["uszkodzony"];
	@$odcena=$_POST["odcena"];
	@$docena=$_POST["docena"];
	@$wysłano=@$_POST["send"];

@$zmienna=trim($_GET['zmienna']);
@$jak=trim($_GET['jak']);

$wysłano=1;
if ($jak=="up") {
$wynik_szukania = mysql_query("SELECT * FROM $tabela WHERE  Rok_produkcji BETWEEN '$odrok_produkcji'AND '$dorok_produkcji' OR Model='$model' OR Pojemnosc_silnika BETWEEN '$odpojemnosc_silnika' AND '$dopojemnosc_silnika' OR moc_silnika BETWEEN '$odmoc_silnika' AND '$domoc_silnika' OR Przebieg BETWEEN '$odprzebieg' AND '$doprzebieg' OR Skrzynia_biegow='$skrzynia' OR Liczba_drzwi='$drzwi' OR Uszkodzony='$uszkodzony' OR cena BETWEEN '$odcena' AND '$docena' OR Marka='$marka' ORDER BY $zmienna ASC") or die('Błąd zapytania');  
}elseif($jak=="down"){
$wynik_szukania = mysql_query("SELECT * FROM $tabela WHERE  Rok_produkcji BETWEEN '$odrok_produkcji'AND '$dorok_produkcji' OR Model='$model' OR Pojemnosc_silnika BETWEEN '$odpojemnosc_silnika' AND '$dopojemnosc_silnika' OR moc_silnika BETWEEN '$odmoc_silnika' AND '$domoc_silnika' OR Przebieg BETWEEN '$odprzebieg' AND '$doprzebieg' OR Skrzynia_biegow='$skrzynia' OR Liczba_drzwi='$drzwi' OR Uszkodzony='$uszkodzony' OR cena BETWEEN '$odcena' AND '$docena' OR Marka='$marka' ORDER BY $zmienna DESC") or die('Błąd zapytania');  
}else{
$wynik_szukania = mysql_query("SELECT * FROM $tabela WHERE  Rok_produkcji BETWEEN '$odrok_produkcji'AND '$dorok_produkcji' OR Model='$model' OR Pojemnosc_silnika BETWEEN '$odpojemnosc_silnika' AND '$dopojemnosc_silnika' OR moc_silnika BETWEEN '$odmoc_silnika' AND '$domoc_silnika' OR Przebieg BETWEEN '$odprzebieg' AND '$doprzebieg' OR Skrzynia_biegow='$skrzynia' OR Liczba_drzwi='$drzwi' OR Uszkodzony='$uszkodzony' OR cena BETWEEN '$odcena' AND '$docena' OR Marka='$marka'") or die('Błąd zapytania');  
}

	
	if(mysql_num_rows($wynik_szukania) >= 0) { 
    /* jeżeli wynik jest pozytywny, to wyświetlamy dane */ 
 
	echo "<br>Znaleźono następujące produkty<br>";
	echo "<table cellpadding=\"2\" border=1>"; 
	
	echo "<tr>"; 
	
        echo "<td>Marka</td>"; 
		echo "<td> <a href='index.php?podstrona=produkt&jak=up&zmienna=model'>up</a>Model</td>"; 
		echo "<td>Rok</td>"; 
		echo "<td>Pojemność</td>"; 
		echo "<td>moc</td>";
		echo "<td>Przebieg</td>"; 
		echo "<td>Skrzynia_biegow</td>"; 
		echo "<td>Uszkodzony</td>"; 
		echo "<td>Liczba drzwi</td>"; 
		echo "<td>Ccena</td>"; 
	echo "</tr>"; 
	
    while($rs = mysql_fetch_assoc($wynik_szukania)) { 
		
	 echo "<tr>"; 
        echo "<td> ".$rs['Marka']."</td>"; 
		echo "<td>".$rs['Model']."</td>"; 
		echo "<td>".$rs['Rok_produkcji']."</td>"; 
		echo "<td>".$rs['Pojemnosc_silnika']."</td>"; 
		echo "<td>".$rs['moc_silnika']."</td>";
		echo "<td>".$rs['Przebieg']."</td>"; 
		echo "<td>".$rs['Skrzynia_biegow']."</td>"; 
		echo "<td>".$rs['Uszkodzony']."</td>"; 
		echo "<td>".$rs['Liczba_drzwi']."</td>"; 
		echo "<td>".$rs['cena']."</td>"; 
	echo "</tr>"; 
    } 
    echo "</table>"; 
	
}
	
}
 
0

Sprawdź sobie czy zawartość np: $wynik_szukania nie zmienia się przy drugim kliknięciu.

Generalnie jest tak że przy wyszukiwaniu zapisuje wszystkie parametry w $_POST, a później przy sortowaniu $_POST jest pusta. Musisz sprawdzić czy przypadkiem wszystkie ważne informacje nie "uciekają" lub czy nie zostają podmienione.

W dodatku musisz poczytać trochę o tym jak poprawnie formułować kod. Popatrz np. na to:

if ($jak=="up") {
$wynik_szukania = mysql_query("SELECT * FROM $tabela WHERE  Rok_produkcji BETWEEN '$odrok_produkcji'AND '$dorok_produkcji' OR Model='$model' OR Pojemnosc_silnika BETWEEN '$odpojemnosc_silnika' AND '$dopojemnosc_silnika' OR moc_silnika BETWEEN '$odmoc_silnika' AND '$domoc_silnika' OR Przebieg BETWEEN '$odprzebieg' AND '$doprzebieg' OR Skrzynia_biegow='$skrzynia' OR Liczba_drzwi='$drzwi' OR Uszkodzony='$uszkodzony' OR cena BETWEEN '$odcena' AND '$docena' OR Marka='$marka' ORDER BY $zmienna ASC") or die('Błąd zapytania');  
}elseif($jak=="down"){
$wynik_szukania = mysql_query("SELECT * FROM $tabela WHERE  Rok_produkcji BETWEEN '$odrok_produkcji'AND '$dorok_produkcji' OR Model='$model' OR Pojemnosc_silnika BETWEEN '$odpojemnosc_silnika' AND '$dopojemnosc_silnika' OR moc_silnika BETWEEN '$odmoc_silnika' AND '$domoc_silnika' OR Przebieg BETWEEN '$odprzebieg' AND '$doprzebieg' OR Skrzynia_biegow='$skrzynia' OR Liczba_drzwi='$drzwi' OR Uszkodzony='$uszkodzony' OR cena BETWEEN '$odcena' AND '$docena' OR Marka='$marka' ORDER BY $zmienna DESC") or die('Błąd zapytania');  
}else{
$wynik_szukania = mysql_query("SELECT * FROM $tabela WHERE  Rok_produkcji BETWEEN '$odrok_produkcji'AND '$dorok_produkcji' OR Model='$model' OR Pojemnosc_silnika BETWEEN '$odpojemnosc_silnika' AND '$dopojemnosc_silnika' OR moc_silnika BETWEEN '$odmoc_silnika' AND '$domoc_silnika' OR Przebieg BETWEEN '$odprzebieg' AND '$doprzebieg' OR Skrzynia_biegow='$skrzynia' OR Liczba_drzwi='$drzwi' OR Uszkodzony='$uszkodzony' OR cena BETWEEN '$odcena' AND '$docena' OR Marka='$marka'") or die('Błąd zapytania');  
}

Łatwiej będzie Tobie (i estetyczniej) napisać:

if ($jak=="up") {
$order = "ORDER BY $zmienna ASC";
}elseif($jak=="down"){
$order = "ORDER BY $zmienna DESC";
} else {
$order = "";
}
$wynik_szukania = mysql_query("SELECT * FROM $tabela WHERE  Rok_produkcji BETWEEN '$odrok_produkcji'AND '$dorok_produkcji' OR Model='$model' OR Pojemnosc_silnika BETWEEN '$odpojemnosc_silnika' AND '$dopojemnosc_silnika' OR moc_silnika BETWEEN '$odmoc_silnika' AND '$domoc_silnika' OR Przebieg BETWEEN '$odprzebieg' AND '$doprzebieg' OR Skrzynia_biegow='$skrzynia' OR Liczba_drzwi='$drzwi' OR Uszkodzony='$uszkodzony' OR cena BETWEEN '$odcena' AND '$docena' OR Marka='$marka' $order") or die('Błąd zapytania');  

To tylko przykład. Chodzi o to że zawartość mysql_query() jest to tekst, więc można zamienić to w ten sposób. Oczywiście jest jeszcze możliwość zastosowania switch-case (ładniej wygląda).

W dodatku nie stosuj przy każdej zmiennej znaczka @, ponieważ stosuje się to głównie przy funkcjach.

I czemu najpierw robisz @$wysłano=@$_POST["send"];, a potem $wysłano=1;

Pozdrawiam

0

No to po kolei:

W drugim kliknięciu zmienna 'send' jest równa 0 co powoduje że nie w chodzimy w pętlę if (@$_POST["send"]) {} co powoduje że jest wykonywane wyświetlanie spoza pętli...
I głównie w tym jest problem jak zrobić żeby jak już wejdzie w pętlę z kryteriami wyszukiwania....

Dzięki za sugestię dotyczącą zapisu.

Pozdrawiam:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1