Autor | Zpráva | ||
---|---|---|---|
Stig001 Profil |
#1 · Zasláno: 20. 12. 2014, 17:36:27
Zdravím, Potřeboval bych poradit s jednoduchým kódem (který si následně analogicky rozšířím). Potřebuji, aby se mi v poli zobrazovaly čísla, podle toho, který prvek pole by byl vybrán. Nějak se mi nechce zobrazovat číslo "5" u proměnné, vybrané formulářem. Nevíte, kde může být chyba ?
Díky předem za případnou odpověď <?php $kolo1 = $_POST['kolo1']; ?> <table> <tr><td class="form_hlasovani"> <select name="kolo1"> <option name="kolo1[1]" value="5">01</option> <option name="kolo1[2]" value="5">02</option> <option name="kolo1[3]" value="5">03</option> <option name="kolo1[4]" value="5">04</option> <option name="kolo1[5]" value="5">05</option> </select> </td> </tr> </table> <input type="submit" value="odeslat"></td> </form> </div> <div class="php_echo"> <br><hr> <?php if($kolo1[1] == "5"){ $kolo1[1]="5"; } if($kolo1[2] == "5"){ $kolo1[2]="5"; } if($kolo1[3] == "5"){ $kolo1[3]="5"; } if($kolo1[4] == "5"){ $kolo1[4]="5"; } if($kolo1[5] == "5"){ $kolo1[5]="5"; } echo "01= ".$kolo1[1]."<br>"; echo "02= ".$kolo1[2]."<br>"; echo "03= ".$kolo1[3]."<br>"; echo "04= ".$kolo1[4]."<br>"; echo "05= ".$kolo1[5]."<br>"; ?> |
||
Chro_ Profil * |
#2 · Zasláno: 20. 12. 2014, 18:22:57
Pracovat s polem má smysl pouze u hromadného výběru ze selectu
<select name="kolo1[]" multiple> var_dump($_POST['kolo1']); |
||
Stig001 Profil |
#3 · Zasláno: 20. 12. 2014, 18:49:17
No tomu var_dump moc nerozumím (jsem amatérský "programátor" ) .... Ten formulář jsem upravil takto:
$kolo1 = $_POST['kolo1']; ?> <table> <tr><td class="form_hlasovani"> <select name="kolo1[]" multiple> <option value="5">01</option> <option value="5">02</option> <option value="5">03</option> <option value="5">04</option> <option value="5">05</option> <option value="5">06</option> <option value="5">07</option> <option value="5">08</option> <option value="5">09</option> <option value="5">10</option> </select> </td> Díky, Radek |
||
Chro_ Profil * |
#4 · Zasláno: 20. 12. 2014, 19:34:16 · Upravil/a: Chro_
Var_dump je taková pomůcka bastlíře, když neví co je proměnná za datový typ (číslo, řetězec, boolean, pole, ...) a jakou hodnotu nebo hodnoty obsahuje. Dává se do kódu tam, kde člověk potřebuje právě tyto informace, např. před dalším zpracováním hodnot z proměnných, aby nedošlo k chybě. Zkrátka k testování.
Tento kód ti vypíše co bylo v selectu vybráno. foreach ($_POST['kolo1'] as $index => $value) { echo 'bylo vybráno '.($index + 1).' s hodnotou '.$value.'<br>'; } EDIT: Nikde v tvých příspěvcích nevidím, že bys formulář odesílal metodou POST. Chybí základní <form method="post"> |
||
Stig001 Profil |
#5 · Zasláno: 20. 12. 2014, 23:35:34
Děkuji,
Myslím, že tomu kódu celkem rozumím, metodu post tam mám (akorát jsem jí zde neuvedl, protože tam bych problém nehledal). Nicméně jsem to zkusil a vypisuje mi to stejnou hlášku, ať zatrhnu cokoliv, tak pořád stejný text => index 1 a hodnota 5 (hodnota je ok, ale index by se měl měnit od 1 po 10, když je tam +1 a to se nemění, tak nevím, jestli ještě není problém v tom formuláři ? Kód vypadá nyní takto: <form name="form" method="post" action="zkouska_php2.php"> <table> <tr><td class="form_hlasovani"> <select name="kolo1[]" multiple> <option value="5">01</option> <option value="5">02</option> <option value="5">03</option> <option value="5">04</option> <option value="5">05</option> <option value="5">06</option> <option value="5">07</option> <option value="5">08</option> <option value="5">09</option> <option value="5">10</option> </select> </td> </tr> </table> <input type="submit" value="odeslat"></td> </form> </div> <div class="php_echo"> <br><hr> <?php foreach ($_POST['kolo1'] as $index => $value) { echo 'bylo vybráno '.($index + 1).' s hodnotou '.$value.'<br>'; } ?> |
||
juriad Profil |
#6 · Zasláno: 20. 12. 2014, 23:38:02
Kazda option musi mit jiny value. A radeji, pokud je to cislo, nezacina nulou.
|
||
Stig001 Profil |
#7 · Zasláno: 20. 12. 2014, 23:55:57
No, ale já potřebuji mít hodnotu 5 => bude tam cca 50 indexů a podle toho, který se vybere v tom formuláři, tak získá hodnotu 5. Kdybych tam dal value=1,2,3,... tak pak bych asi musel dát podmínku if, a to nejspíš pro každý index zvlášť, ne ? "Jestliže daný index má danou hodnotu, pak přiřad do proměnné konstantu 5 ... nebo by se to dalo nějak elegantněji obejít ? ..... Ve finále tam ty sloupce s hodnotami budou 5x, první s value=5, další s value=4 ...3,2,1 ... Takže pak v proměnné kolo1[1] bude hodnota např. 5, v proměnné kolo1[5] bude hodnota 3, v prom. kolo1[4] bude hodnota 1 atd. .... čili indexů bude hodně, ale hodnoty se budou střídat od 1 do 5. (5 různých value pro 5 sloupců select). ...
|
||
juriad Profil |
Stig001:
A proč se tam stále snažíš nacpat ty indexy? Prostě změníš name v selektu na index[0], index[1], index[2], index[3], index[4] a value bude těch padesát hodnot. To ti do PHP přijde jako pole a to si otočíš: $indexy = $_POST['index']; # array(0=>34, 1=>42, 2=>12, 3=>9, 4=>26) $hodnoty = array_flip($indexy); # array(9=>3, 12=>2, 26=>4, 34=>0, 42=>1) |
||
mimochodec Profil |
#9 · Zasláno: 21. 12. 2014, 10:54:26
Stig001:
„No, ale já potřebuji mít hodnotu 5 => bude tam cca 50 indexů a podle toho, který se vybere v tom formuláři, tak získá hodnotu 5“ Uvažuješ nějak zvláštně. Jestli máš číslo pět přiřadit něčemu, co bude vybráno tímto formulářem, tak ta pětka do něj vůbec nepatří. Do těch value si dej ty indexy. Ten vybraný pak najdeš v $_POST['kolo1'] a v php už si zařídíš, aby někde něco poskočilo, vyběhl obrázek nebo nastal konec světa.
|
||
Stig001 Profil |
#10 · Zasláno: 21. 12. 2014, 11:02:16
Hmm asi jsme si nerozuměli, myslím ...
Mám tam select (v konečné verzi tam select bude 5x). V každém selectu budou čísla na výběr od 01 do 50. 1 číslo v selectu tedy = 1 index v poli. V každém selectu se vyberou čísla, kterým se přiřadí hodnoty = konstanty. (konstanta 1. selectu (value) by měla být 5, ve druhém selectu 4, ve třetím 3, ve čtvrtém 2 a v 5. jedna.). ...... Takže ve finále chci, aby mělo 5 různých proměnných z pole 5 různých hodnot tj. 5,4,3,2,1 .... což budu muset udělat nejspíš v 2D poli, nicméně principielně mi právě nefunguje ani tento základní "prográmek" ... Takže například by to vypadalo takto po výpisu příkazem echo (záleží, co by bylo zvoleno ve formuláři): "výběr28 má hodnotu"5 "výběr45 má hodnotu"4 "výběr02 má hodnotu"3 "výběr31 má hodnotu"2 "výběr09 má hodnotu"1 |
||
mimochodec Profil |
Stig001:
To na tom, co jsem psal, nic nemění. Pět selectů je pět hodnot $_POST['kolo1'] až $_POST['kolo5'] . Do <option value="5">01</option> nedávej value=5 ale value odpovídající zobrazované hodnotě (v případě tohoto optionu value="1"). V php si pak zpracuj $_POST['kolo1'] až $_POST['kolo5'] .No moment, teď tady vidím nějaké hranaté závorky a multiple... tak už si nejsem jist, že jsem úplně v obraze. Mrknu za chvilku, prozatím ten můj příspěvek [#11] ignoruj. |
||
Stig001 Profil |
Koukněte zde, zde jsem to udělal pomocí formuláře "radio" a funguje mi to více-méně tak, jak bych si představoval:
<form name="form" method="post" action="zkouska_php2.php"> <?php /*$kolo1 = $_POST['kolo1']; */ $kolo1 = $_POST['kolo1']; ?> <table> <!-- <tr><td class="form_hlasovani"> <select multiple> <option name="kolo1[0]" value="0">01</option> <option name="kolo1[1]" value="1">02</option> <option name="kolo1[2]" value="2">03</option> <option name="kolo1[3]" value="3">04</option> <option name="kolo1[4]" value="4">05</option> <option name="kolo1[5]" value="5">06</option> <option name="kolo1[6]" value="6">07</option> <option name="kolo1[7]" value="7">08</option> <option name="kolo1[8]" value="8">09</option> <option name="kolo1[9]" value="9">10</option> </select> </td> </tr> </table> --> <tr> <td class="form_hlasovani"><input type="radio" name="kolo1[1]" value="5">01</td> <td class="form_hlasovani"><input type="radio" name="kolo1[2]" value="5">02</td> <td class="form_hlasovani"><input type="radio" name="kolo1[3]" value="5">03</td> <td class="form_hlasovani"><input type="radio" name="kolo1[4]" value="5">04</td> <td class="form_hlasovani"><input type="radio" name="kolo1[5]" value="5">05</td> <td class="form_hlasovani"><input type="radio" name="kolo1[6]" value="5">06</td> </tr> </table> <input type="submit" value="odeslat"></td> </form> </div> <div class="php_echo"> <br><hr> <?php echo "vybraná hodnota 01: je:".$kolo1[1]."<br>"; echo "vybraná hodnota 02: je:".$kolo1[2]."<br>"; echo "vybraná hodnota 03: je:".$kolo1[3]."<br>"; echo "vybraná hodnota 04: je:".$kolo1[4]."<br>"; echo "vybraná hodnota 05: je:".$kolo1[5]."<br>"; echo "vybraná hodnota 06: je:".$kolo1[6]."<br>"; ?> ------------------------------------------------- Aktualizace: Aby mi to přesně takto fungovalo s tím select --> option (nebo s něčím obdobným) se mi zkrátka nepodařilo, takže nevím, čím by to mohlo být ... s těmi tlačítky radio by to bylo asi hodně nepřehledné .... |
||
Alphard Profil |
#13 · Zasláno: 21. 12. 2014, 14:54:25
Stig001 [#12]:
Předchozí část jsem prošel jen v rychlosti, ale zdá se mi, že pořád nechápete podstatu name a value a pořád to toho pletete indexy. U input radio se pro danou skupinu používá stejné name a různé value , tady to je přesně naopak.
Stejně tak ten zakomentovaný formulář. Atribut name má být u select , ne u option , tam už má být jen value .
|
||
Taps Profil |
Stig001:
<form name="form" method="post" action="zkouska_php2.php"> <table> <tr><td class="form_hlasovani"> <select name="kolo[]" multiple > <? for($vyber=0;$vyber<=8;$vyber++){ echo '<option value="kolo1['.$vyber.']" >0'.$vyber.'</option>'; } ?> </select> </td> </tr> </table> <input type="submit" value="odeslat" name="odeslat"></td> </form> </div> <div class="php_echo"> <br><hr> <?php if($_POST['odeslat']){ foreach($_POST['kolo'] as $kolo => $polozky){ echo $polozky.'<br>'; } } ?> |
||
Stig001 Profil |
#15 · Zasláno: 21. 12. 2014, 15:39:37
No, co se týká toho zakomentovaného kódu, tak měl jsem to původně přesně tak, jak píšete, jenže to nefungovalo korektně, tak jsem se to snažil předělat a pořád stejné v podstatě. ... To s těmi tlačítky radio mě funguje podle představ, jen jsem ty tlačítka chtěl nahradit nějakým decentnějším formulářem, protože jich bude hodně. ... Proč to všechno cpu do pole ? chtěl bych z toho udělat pak tabulku, tu uložit do txt a následně v jiném odkaze načíst. Tato část kódu mi už funguje. Dále pak když to bude v poli, tak nemusím deklarovat každou proměnnou zvlášť, ale stačí celé pole (viz. kód s radio). Ovšem jak jsem uvedl, jsem amatér v programování, tak je možné, že pořád nechápu princip. Nicméně kdybych tam měl jen jedno jméno, tak do něj by se mi přiřazovaly hodnoty a to právě nechci, chtěl bych měl třeba 50 proměnných (prvky pole), které by byly všechny "nulové" nebo nedefinované a jen některé (vybrané formulářem) by měly hodnoty 5,4,3,2,1 nic víc => z těch 50 proměnných by byly pouze 5 definovaných.
Ten váš kód mi funguje nějak divně => v selectu jsou samé nuly totiž. ... zkusím to pak nějak "vstřebat" ... Ještě mě napadlo ale jiné řešení, které by pro danou aplikaci bylo plně použitelné a to zkusit si dát selecty pro každou jako by proměnnou a pomoci něho přiřazovat prvky. Zkusím to udělat a pak uvidím. Prozatím díky za ochotu :-). |
||
Taps Profil |
#16 · Zasláno: 21. 12. 2014, 15:46:53
Stig001:
Kód jsem poupravil |
||
Alphard Profil |
#17 · Zasláno: 21. 12. 2014, 16:08:16
Stig001:
„Nicméně kdybych tam měl jen jedno jméno, tak do něj by se mi přiřazovaly hodnoty a to právě nechci, chtěl bych měl třeba 50 proměnných (prvky pole), které by byly všechny "nulové" nebo nedefinované a jen některé (vybrané formulářem) by měly hodnoty 5,4,3,2,1 nic víc => z těch 50 proměnných by byly pouze 5 definovaných.“ Tohle je klíčovávě. Vy se snažíte o něco, co vypadá podezřele a jde proti myšlence formulářů. Select nepřinutíte, aby posílal nevybrané hodnoty, je třeba udělat to dodatečným zpracováním po odeslání formáře. Na začátku scriptu si vytvořte prázdné pole (s požadovanými defaultními hodnotami) a pak na základě dat z formuláře upravte ty prvky, které uživatel vybral. |
||
Stig001 Profil |
#18 · Zasláno: 21. 12. 2014, 17:28:10
Hmm no, už asi vím, na co narážíte, zkusil jsem to udělat trošku jinak, tak, aby to na výslednou aplikaci nemělo negativní vliv. Kód nyní vypadá takto = idexuji jména selectů, do kterých přiřazuji hodnoty z výběru. ... Ještě si to upravím, aby suma všech prvků byla =15 (5+4+3+2+1) a při splnění podmínky se provede následný zápis do txt apod., jak jsem to plánoval.
Čili toto je nový kód, který funguje tak, jak bych si představoval: :-) <form name="form" method="post" action="zkouska_php2.php"> <?php $id = $_POST['id']; ?> <table><tr> <td class="form_hlasovani"> <select name="id[]" size="1" class="sel"> <option value="0" selected="selected">0</option><option value="5">5</option><option value="4">4</option><option value="3">3</option><option value="2">2</option><option value="1">1</option> </select>01</td> <td class="form_hlasovani"> <select name="id[]" size="1" class="sel"> <option value="0" selected="selected">0</option><option value="5">5</option><option value="4">4</option><option value="3">3</option><option value="2">2</option><option value="1">1</option> </select>02</td> <td class="form_hlasovani"> <select name="id[]" size="1" class="sel"> <option value="0" selected="selected">0</option><option value="5">5</option><option value="4">4</option><option value="3">3</option><option value="2">2</option><option value="1">1</option> </select>03</td> <td class="form_hlasovani"> <select name="id[]" size="1" class="sel"> <option value="0" selected="selected">0</option><option value="5">5</option><option value="4">4</option><option value="3">3</option><option value="2">2</option><option value="1">1</option> </select>04</td> <td class="form_hlasovani"> <select name="id[]" size="1" class="sel"> <option value="0" selected="selected">0</option><option value="5">5</option><option value="4">4</option><option value="3">3</option><option value="2">2</option><option value="1">1</option> </select>05</td> </tr></table> <br> <input type="submit" value="odeslat"> </form> </div> <div class="php_echo"> <br><hr> <?php echo "vybrali jste volbu ".$id[0]."<br>"; echo "vybrali jste volbu ".$id[1]."<br>"; echo "vybrali jste volbu ".$id[2]."<br>"; echo "vybrali jste volbu ".$id[3]."<br>"; echo "vybrali jste volbu ".$id[4]."<br>"; ?> |
||
Časová prodleva: 4 dny
|
|||
Stig001 Profil |
#19 · Zasláno: 25. 12. 2014, 17:20:15
Zdravím vás,
Ještě bych měl jeden dotaz, jestli v php existuje nějaká funkce, která je analogická k excelovské funkci "COUNTIF" .... Totiž mám pole čísel a potřebuji dostat do podmínky počet nenulových/nulových prvků, zkrátka nějakou funkci, do které dám název pole a fce vrátí počet prvků s hodnotou nula. Nebo něco takového. Neví to někdo ? Díky za případnou odpověď. |
||
Taps Profil |
#20 · Zasláno: 25. 12. 2014, 17:45:33
Stig001:
šlo by to např. takto <?php $pole = array (0,2,4,6,0,5,7,8,30,0,8,0); foreach($pole as $p){ if($p > 0){ $nenulove++; } else{ $nulove++; } } echo 'Nulové:'.$nulove.'<br>'; echo 'Nenulové:'.$nenulove.'<br>'; ?> |
||
Stig001 Profil |
#21 · Zasláno: 25. 12. 2014, 20:39:06
Díky moc :-)
|
||
Časová prodleva: 9 let
|
0