Wyświetlanie rekordów - alfabetycznie

Języki, których efekty są wykonywane po stronie serwera. PHP, ASP czy CGI w połączeniu z bazami danych SQL dają niezwykłe możliwości budowy i zarządzania stron WWW. Tu zadajemy pytania oraz demonstrujemy kod, z którym mamy problem.
Grzegorz Komsta
Przelotem
Przelotem
Posty: 228
Rejestracja: pn lis 01, 2004 10:25 am
Lokalizacja: Lublin
Kontakt:

Wyświetlanie rekordów - alfabetycznie

Post autor: Grzegorz Komsta »

Mam pewien problem z wyświetlaniem rekordów z bazy. Mam skrypt php, który odpowiada za obsługę komisu motocyklowego. Jeden z plików wyświetla na stronie głownej 5 rekordów z bazy (5 motocykli). Chciałem to posortować alfabetycznie, ale niezbyt ma to ochotę działać.

Wszystko w kodzie wygląda na poprawne i wszystko działa, ale nie sortuje i czsami nawet zmienia kolejnośc wyświetlania przy odświeżaniu strony.

W czym może tkwić błąd? Wklejam kod odpowiadający za wyświetlanie rekordów:

Kod: Zaznacz cały

<?PHP
$conn = mysql_connect('db.st.interia.pl', '46302', 'y1NGihKMFx66'); // uchwyt połšczenia
mysql_select_db('db46302', $conn); //wybór bazy

function exec_query($query)
	{
	global $conn;
	$result_q = mysql_query($query, $conn); //wysyła zapytanie
	return $result_q;
	}

$query = "SELECT * FROM oferta WHERE sprzedany = 'f' ORDER BY 'opis_krotki' 'asceding'";
$result = exec_query($query);
var_dump($result); 
$num_rows = @mysql_num_rows($result);
?>
i za wyświetlanie:

Kod: Zaznacz cały

<?PHP
if(!$num_rows)
	{
	?>
	<TABLE STYLE="width: 100%" BORDER=0 CELLSPACING="5" CELLPADDING=0>
		<TR>
		<TD STYLE="width: 100%; color: #FFFFFF" VALIGN="middle" ALIGN="center"  BGCOLOR="#000000"><H1>Brak ofert</H1></TD>
		</TR>
	</TABLE>
	<?PHP
	}
else
	{
	?>
	<p>Oferta aktualna:
	<TABLE STYLE="width: 400" BORDER=0 CELLSPACING=5 CELLPADDING=0>
		
	<?PHP
	// -------------- ten fragment określa jakie rekordy na podstawie zmiennej str majš być wyświetlone -----------------------------

	if ($str == "undefined")	// jeśli ten plik nie został wywolany przez siebie samego zmienna str będzie undefined, (ku pamięci - funkcja dalej)
		$num_begin = $str = 0;
	else
		$num_begin = $str;
	$num_end = $num_begin + 5;

	if ($num_end > $num_rows) // ustala ilość rekordów na ostatniej stronie, gdy true
		$num_end = $num_rows;
	else
		$num_end = $num_begin + 5;

//-------------------------------------------------------------------------------------------------------------------------------

	for($num_begin; $num_begin < $num_end; $num_begin++)
		{
		?>
		<TR valign="middle">
		<TD bgcolor="#000000" ALIGN=center width="110"><img src="zdjecia/<?PHP echo	mysql_result($result, $num_begin, "nazwa_pliku1"); ?>" STYLE="width: 28mm;"></TD>
		<td bgcolor="#000000" width="230" style="font-family: Verdana; font-size: 11px; color: #9f9f9f; font-weight: bold; text-align: left; margin: 5"><?PHP echo mysql_result($result, $num_begin, "opis_krotki"); ?> </TD>
		<td  bgcolor="#000000" align="center"><A HREF="javascript:dalej('3','<?PHP echo mysql_result($result, $num_begin, "id"); ?>');">więcej »</A></TD>
		</TR>
		<?PHP
		}

	?>
	<TR valign="middle">
	<TD STYLE="width: 50%" ALIGN=center BGCOLOR="#000000" COLSPAN=3>
	<hr size="1" color="gray">
	<?PHP
	$strona = floor($num_rows/5); //wstępna ilość stron
	if($strona == $num_rows/5) //dokładna ilośc stron - jeśli zmienna strona po zaokršgleniu jest równa "num_rows/5" oznacza to że jest równa ilość rekordów np 10 lub 25 itp
		$ilosc_stron = $strona;
	else
		$ilosc_stron = $strona+1; //jesli warunek nie spełniony to jest nierówna ilość wierszy np 22 i na ostatniej stronie jest dwa rekordy

	if ($str > 0)
		{
		?>
		<A HREF="javascript:dalej('11','','<?PHP echo $str-5;?>');"><< Poprzednia</A>
		 
		<?PHP
		}

	$str_zm = 0;

	for ($i=1; $i<=$ilosc_stron; $i++)
		{
		?>
		<A <?PHP if($str_zm == $str) echo "STYLE=\"color: #9f9f9f;\""; ?> HREF="javascript:dalej('11','','<?PHP echo $str_zm; ?>');">[<?PHP echo $i; ?>]</A>
		<?PHP
		$str_zm = $str_zm + 5;
		}

	if (!($str == ($str_zm - 5)))
		{
		?>
		 
		<A HREF="javascript:dalej('11','','<?PHP echo $str+5;?>');">Następna >></A>
		<?PHP
		}
		?>
	</TD>
	</TR>
</TABLE>

<?PHP
	}	//end else
?>
Dzięki z góry za wszelkie porady!
adax2000
Nowy
Nowy
Posty: 31
Rejestracja: ndz kwie 24, 2005 10:11 pm

Re: Wyświetlanie rekordów - alfabetycznie

Post autor: adax2000 »

no tak, chciałem ci pomóc więc przerzuciłem ten skrypt w całości jak leci do jednego pliku db2.php na swój serwer utworzyłem odpowiednią bazę i tabelę i jakie było moje rozczarowanie ten plik znowu działa jak trzeba. sporo w nim jest dziwact, rzeczy które mogłyby uchodzić za błąd ale jeśli działa to jak ci tu pomóć.

może problem jak zwykle leży gdzie indziej piszesz wklejam kod, wklejam kod, czy te dwa skrypty są w jednym pliku i w tej kolejności, może usterki powoduje inna część, brak tu jest tej funkcji w javascripcie ale uruchamiałem to w postaci np.: db2.php?str=5 i działało świetnie.

to co mogę w tej chwili doradzić to zrób tak jak ja umieść w jednym pliku wyłącznie to co było w twoim poście i w tej kolejności, nie linkuj, nie includuj niczego nawet tego javascriptu uruchom wpisz na sztywno w przeglądarce raz np. db2.php potem
db2.php?str=5 i powiedz mi czy wtedy nie działa.

uwagi jakie mogę ci podać odrazu (im mniej będziesz miał linijek kodu tym szybciej znajdziesz błąd)

1.czy 'ascending' to nazwa pola?! jeśli tak, to powinien być przedtym przecinek
jeśli nie, a chodziło ci o porządek sortowania to ASC (te trzy litery bez apostrofów)

2. zamiast floor użyj ceil zaokrągla w górę więc dużo uprości twój algorytm
a, że 0 nie zaokrągli w górę, nie jest u ciebie problemem bo napoczątku sprawdzasz czy liczba rekordów jest > od 0;

3. mógłbym tak bez końca, ale to ci nie pomoże, a może nudzi więc na tym poprzestanę nara
Grzegorz Komsta
Przelotem
Przelotem
Posty: 228
Rejestracja: pn lis 01, 2004 10:25 am
Lokalizacja: Lublin
Kontakt:

Re: Wyświetlanie rekordów - alfabetycznie

Post autor: Grzegorz Komsta »

To ASC to w nawiasach jest przez przypadek.

Kod nie ja pisałem, tylko kolega i trochę kiespko działało, więc poprosił mnie o poprawkę i potwierdziłeś moje przypuszczenia, że kod pomimo, że skomplikowany to działa, ale ze swojej bazy jak wyświetla, to zaczyna fiksować.

Być może coś w bazie jest nie tak. Poszukam.

Dzięki!
ODPOWIEDZ