[php] sortowanie pola select

0
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
<head>
<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-Language" content="pl" />
<title></title>
<script type="text/javascript">
function clicker(that) 
{
	var pick = that.options[that.selectedIndex].value;
	return pick;
}
</script>
</head>
<?php
function connection() { 
    // serwer 
    $mysql_server = "localhost"; 
    // admin 
    $mysql_admin = "root"; 
    // hasło 
    $mysql_pass = ""; 
    // nazwa baza 
    $mysql_db = "techmef"; 
    // nawiązujemy połączenie z serwerem MySQL 
    @mysql_connect($mysql_server, $mysql_admin, $mysql_pass) 
    or die('Brak połączenia z serwerem MySQL.'); 
    // łączymy się z bazą danych 
    @mysql_select_db($mysql_db) 
    or die('Błąd wyboru bazy danych.'); 
}
connection();
$result = mysql_query('SELECT * FROM produkty ORDER BY Nazwa ASC');
if (!$result) {
   echo('MySQL Error in ' . __FILE__ . ' (' . __LINE__ . '): ' . mysql_error());
   exit();
}
echo('<select name="jakis_select" onchange="clicker(this)"');
while($row = mysql_fetch_array($result)) {
  echo('<option value="'.$row['id'].'">' . $row['Nazwa'] . '</option>');
}
echo('</select>');
?>
</html>

Witam, chciałbym wstawić 2 razy pole select, z tym, że 2 pole chciałbym sortować wedle indexu zwróconego z pierwszego pola.
Czy mogę w jakis sposób dobrać się do zmiennej z fun klicker tak żebym mógl pózniej tylko napisać sobie:

if(pick==2)
    $result = mysql_query('SELECT * FROM tabela WHERE id_nazwy=2');
if(pick==3)
    $result = mysql_query('SELECT * FROM tabela WHERE id_nazwy=3');
if (!$result) {
   echo('MySQL Error in ' . __FILE__ . ' (' . __LINE__ . '): ' . mysql_error());
   exit();
}
echo('<select name="jakis_select" ');
while($row = mysql_fetch_array($result)) {
  echo('<option value="'.$row['id'].'">' . $row['Nazwa'] . '</option>');
}
echo('</select>')

i tak dalej...

2

W PHP nie możesz. Jeśli próbujesz to tak napisać, to znaczy, że nie rozumiesz jak działa przetwarzanie strony www -- co się dzieje w jakiej kolejności.

Użytkownik wpisuje URL (albo klika w link czy na przycisk Wyślij formularza), przeglądarka wysyła żądanie do serwera pod określony URL. Pod tym URL-em czai się np. skrypt PHP. Kod PHP w tym skrypcie zostaje wykonany przez interpreter PHP na serwerze. Kod PHP łączy się z bazą i robi inne rzeczy, ale jego głównym zadaniem jest przeważnie wygenerowanie kodu HTML, który zostanie wysłany przeglądarce. Instrukcje takie jak echo generują właśnie dynamicznie kod HTML. Gdy skrypt PHP skończy działanie, gotowy jest już kod HTML strony. Ten kod jest wysyłany do przeglądarki użytkownika. Kod HTML może zawierać skrypty JavaScript. Jeśli je zawiera, to w tym momencie -- w przeglądarce użytkownika -- są one wykonywane.

Jak widzisz, nie ma sposobu, by po odpaleniu skryptów JavaScript nagle wrócić do kodu PHP i pobrać jakąś wartość z funkcji JavaScript. Bo gdy JavaScript jest uruchamiany -- w przeglądarce, na komputerze użytkownika -- to skrypt PHP, który wygenerował stronę już dawno skończył działanie (na serwerze).

Z poziomu JavaScriptu możesz jedynie wykonać kolejne żądanie na serwer. Drugi skrypt PHP może przechwycić to żądanie i zwrócić np. HTML nowego selecta. A JavaScript może wstawić ten HTML do dokumentu. Takie działanie to nic innego jak Ajax.

Inna możliwość: po wybraniu opcji w pierwszym selekcie można wysłać formularz na serwer i serwer może zwrócić nowy dokument HTML -- taki sam, jak poprzednio, tylko że z drugim selectem odpowiednio posortowanym. Tylko tutaj już nastąpi przeładowanie strony w momencie wysłania formularza.

0

Tego właśnie się bałem.. A możesz jeszcze mi powiedzieć, która opcja będzie łatwiejsza w implementacji?

1

Jeśli nie jesteś za dobrze zaznajomiony z JavaScriptem, to raczej opcja druga -- nie Ajax, tylko zwykłe przeładowanie strony.

Możesz mieć tam formularz z przyciskiem submit np. z etykietą Wybierz -- użytkownik klikał by Wybierz po wybraniu opcji z selecta. I wtedy serwer otrzymywałby normalne żądanie, jak z każdego innego formularza. Możesz też pozbyć się konieczności kliknięcia w przycisk. Aby to osiągnąć, mógłbyś np. podpiąć się w JavaScripcie pod zdarzenie onchange selecta i w funkcji obsługi zdarzenia wywołać metodę submit() formularza, ewentualnie przejść do nowego adresu strony (window.location = nowyURL), przy czym w nowym URL-u zawarłbyś jakiś zwykły parametr, tak jak w normalnym żądaniu GET. W parametrze przechowywałbyś wartość selecta. Przy użyciu submit() (albo zwykłego przycisku), kod PHP mógłby bezpośrednio odczytać wartość pierwszego selecta, a z window.location mógłby odczytać wartość parametru z tablicy $_GET. Na podstawie wybranej opcji skrypt PHP generowałby nową stronę, na której drugi select byłby odpowiednio skonfigurowany (posortowany, czy co tam chcesz).

0

Dzięki za pomoc:)

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