Autor Zpráva
rebas
Profil *
mám tuto stránku http://www.autodraha-pronajem.cz/cenova-kalkulace-pronajmu-autodrahy.php (formulář není úplně dodělaný, ale první část s adresami funguje).

Potřebuji však přenášet vybrané hodnoty selectů na další stránku (po stisknutí horního tlačítka se načte ta samá stránka s předvyplněnými daty, kvůli případné editaci).

U dvou selectů (oslovení a je společnost) jsem to tak nějak spartansky udelal (takto:)


Oslovení: <select id='selosloveni' name='osloveni' onchange='vypln(this)'>
<option value='Vážený pane' $panosloveni>Pan</option>
<option value='Vážená paní' $paniosloveni>Paní</option>
<option value='Vážená slečno' $slecosloveni>Slečna</option>
</select>

$osloveni = $_REQUEST['osloveni'] ;
if ($osloveni == "Vážený pane")
   {$panosloveni = "selected='selected'";}else{$panosloveni="";}
  if ($osloveni == "Vážená paní")
   {$paniosloveni = "selected='selected'";}else{$paniosloveni="";}
  if ($osloveni == "Vážená slečno")
   {$slecosloveni = "selected='selected'";}else{$slecosloveni="";}

ale potřeboval bych přenést i select kde mám počet hodin (tedy 24 možností). Jak tedy například přenést aktuálně zvolenou hodnotu selectu pro hodiny? (aby se po zmacknuti tlačítka načetla ta samá zvolená hodnota) - bez nutnosti GET...
quatzael
Profil
rebas:
Pro 24 options u selectu je asi nejvhodnější použít cyklus. Tady v tomto případě for. A to klidně už i pro samotnej výpis původního selectu bez těch "atributů" selected.
peta
Profil
Proc hodnoty selectu nemas ulozene v poli a na toto pole neaplikujes vlastni funkci zobraz_select?
$arr = array(
1 => array('Vážený pane','Pan'),
2 => array('Vážená paní','Paní'),
3 => array('Vážená slečno','Slečna')
);
[/pre]
Tou funkci bys z toho udelal select
<select id='selosloveni' name='osloveni' onchange='vypln(this)'>
<option value='1'>Pan</option>
<option value='2'>Paní</option>
<option value='3'>Slečna</option>
</select>
V $x = $_REQUEST['osloveni'] bys pak mel treba 2, z pole bys pak vytahl echo $arr[$x*1][0];
U casu je to pak jednodussi, pac tam mas v $x = $_REQUEST['cas'] primo cislo, ale pozor, je jako string, takze opet $x * 1.
Vyhoda je, ze tou funkci pak muzes vykreslit select, jehoz data vytahnes z db a nemusis pokazde psat konstrukce typu if, else, if.
shaggy
Profil
peta:
Prečo používaš $_REQUEST?
Prečo radíš zbytočný kód ako $x*1?
peta
Profil
shaggy:
1) [#1] $osloveni = $_REQUEST['osloveni'] ;
2) [#3] 1 => array('Vážený pane','Pan'),
shaggy
Profil
peta:
Mne nemusíš opakovať tvoj kód, ja narozdiel od teba chápem veľmi dobre.
Preto sa pýtam ešte raz - čo ťa vedie k tomu, aby si používal Request (myslím, že nechce, aby bolo možné dáta prenášať cez post aj cez get súčasne).
A prečo používaš ten hlúpy prepočet (ktorý by sa skôr hodil do javascriptu, ako sem)? Nestačí echo $arr[$x][0]?
rebas
Profil *
Může mi sem někdo hodit přímo konkretne udělaný ukázkový kod?

Myšleno vytvořený array (třeba pro to oslevení) a pak kod pro vytvoření formuláře (php) kde už se bude počítat i s tím aktuálně vybraným polem jako vybraný ("selected='selected'")

Předem díky za pomoc.
peta
Profil
shaggy:
To je dost hloupe se ptat a pak rikat, ze vsemu rozumis.
Tak ja ti odpovedi prelozim, no... Ale prijde mi, ze jen zbytecne opakuji, co uz bylo napsane a se ti nechtelo precist.

"Prečo používaš $_REQUEST?"
1) [#1] $osloveni = $_REQUEST['osloveni'] ;
Viz prispevek [#1] (coz je klikatelny odkaz na ktery muzes kliknout a zjistit, ze te to nasmeruje na prispevek 1), pouziva request. Tak jsem pouzil neco, co uz uzivatel zna a mozna ma i duvod, proc to pouziva. Neni treba to tedy menit na GET nebo POST a zbytecne mu delat zmatek.

"Prečo radíš zbytočný kód ako $x*1?"
2) [#3] 1 => array('Vážený pane','Pan'),
Viz prispevek 3, protoze pouzivam cislovane pole. V prispevku 3 jsem dal do $x = $_REQUEST['osloveni'], cili string, takze, kdyz chci vypsat hodnotu z cislovaneho pole, tak by bylo jen spravne prevest string na cislo. Klidne muzes pouzit (int)$x jestli to mas raci nebo jinou metodu prevodu. Nebo to mozna php zkousne, ale na to bych rozhodne 100% nespolehal. '003' a '3' neni totez jako 3

rebas:
Napiste mi kod za mne, protoze jsem liny je tema pro prace a zakazky. Neni vetsi radosti nez si to vymyslet sam.
Amunak
Profil
rebas:
Já bych to asi udělal tak, že bych si všechny údaje se kterými chci pracovat dál uložil do session. Kdekoliv dál v tom formuláři to pak můžu použít.

<select name="osloveni">
  <option value=0>Pan</option>
  <option value=1>Paní</option>
  <option value=2>Slečna</option>
</select>
<select name="hodiny">
  <option value=0>0</option>
  <option value=1>1</option>
  <option value=2>2</option>
  <!-- ... -->
  <option value=23>23</option>
</select>

function parseOsloveni($o){
  switch($o){
    case 1: 
      return "Vážená paní";
    case 2:
      return "Vážená slečno";
    default:
      return "Vážený pane";
  }
}

// Řetězec $UID se předává i jako skryté pole. Zajišťuje, aby se formulář dalo vyplnit i několikrát naráz v různých otevřených oknech. Alternativně by místo takovéto "ochrany" šlo předávat všechna data ve skrytém poli, ale bylo by potřeba je serializovat a navíc by je pak mohl uživatel dodatečně upravovat třeba až po našem zpracování.
$_SESSION['form'][$UID] = array(
    'osloveni' => parseOsloveni(isset($_GET['osloveni']) ? $_GET['osloveni'] : 0),
    'hodiny' => (int) $_GET['hodiny'],
);

//kdykoliv později ve formuláři:
if(isset($_SESSION['form'][$UID]))
  echo $_SESSION['form'][$UID]['osloveni']; //vypíše správné oslovení

Nepoužívej $_REQUEST. Na datum a čas se obvykle používá input a ne select - pro většinu lidí je mnohem snazší napsat 20:00 než myší klikat na selecty, rolovat a podobně.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: