Autor | Zpráva | ||
---|---|---|---|
rebas Profil * |
#1 · Zasláno: 7. 11. 2013, 01:02:18
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 |
#3 · Zasláno: 7. 11. 2013, 07:52:03
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> $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 |
#4 · Zasláno: 7. 11. 2013, 10:25:05
peta:
Prečo používaš $_REQUEST ?
Prečo radíš zbytočný kód ako $x*1 ?
|
||
peta Profil |
|||
shaggy Profil |
#6 · Zasláno: 7. 11. 2013, 11:28:58
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 * |
#7 · Zasláno: 7. 11. 2013, 14:10:03
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. |
||
Časová prodleva: 6 dní
|
|||
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ě. |
||
Časová prodleva: 10 let
|
0