| Autor | Zpráva | ||
|---|---|---|---|
| mikul Profil |
#1 · Zasláno: 17. 2. 2010, 14:25:18
Zdravím,
mám vytvořeny pole: $ukol_1, $ukol_2 .. až $ukol_14 - v každém je několik položek. V cyklu for ($j=1; $j<=14; $j++){
funkce(argumenty)
}volám postupně funkci která si podle toho kolikátý je to průchod veme to dané pole a dále s ním nějak pracuje. Problém je, že se mi nedaří předat správné pole jako argument funkce - funkce($ukol.$j) Potřebuju vlastně nějak složit (vytvořit) název toho pole aby ho to bralo jako název proměnné a předalo jeho hodnoty do funkce. Díky |
||
| Majkl578 Profil |
#2 · Zasláno: 17. 2. 2010, 14:29:40 · Upravil/a: Majkl578
${'ukol_' . $j}Neni lepší použít pole? $ukol[14]? |
||
| mikul Profil |
#3 · Zasláno: 17. 2. 2010, 14:34:48
Jej díky...
|
||
| mikul Profil |
#4 · Zasláno: 17. 2. 2010, 14:37:05
Já mám 14 polí -
$ukol_1 = array(1=>"nazev", "trasa", "pocet_zastaveni", "datum"); $ukol_2 = array(1=>"datum", "trasa", "km"); až 14 A ta funkce si přebere ty hodnoty z pole - jde o názvy sloupců v dtb kam se ukládají hodnoty. |
||
| Nox Profil |
#5 · Zasláno: 17. 2. 2010, 14:39:34
Ten poslední příspěvek jsem moc nepochopil....zvládl's to tedy podle rady Majkl578 nebo ne?
Je nějaký zvláštní důvod pro indexování od 1? $ukoly = array( array( "nazev", "trasa"...), array(...)); foreach($ukoly as $ukol) funkce(argumenty); |
||
| mikul Profil |
#6 · Zasláno: 17. 2. 2010, 14:54:57 · Upravil/a: mikul
Nox:
Vyřešil jsem to pomocí majklova ${'ukol_' . $j}Ne, pro indexování od 1 žádný důvod není, ještě to není zcela hotové, takže pokud na žádný nenarazím 1=> půjde pryč. $ukoly = array( array( "nazev", "trasa"...), array(...)); je možná o něco lepší, ale ja nevyužiji vždy všechna pole for ($i=1; $i<=14; $i++){
if (!empty($_POST["ukol_$i"])){
for ($j=1; $j<=$_POST["ukol_$i"]; $j++){
$sql_prikaz = vloz_ukol($pripojeni, ${'poutnik_ukol_' . $i}, $i, $j);
mysqli_query($pripojeni, $sql_prikaz);
}
}
}V úvodu je 14 tabulek - každý úkol má zcela jiné údaje které se u něj ukládají, podle potřeby se některé tabulky vyplní, některé i vícekrát - první cyklus projíždí jednotlivé úkoly (tabulky) 1-14, pokud projde !empty => je jasné že daná tabulka byla vyplněná, hodnota $_POST["ukol_$i"] řekne kolikrát byla vyplněná - tolikrát proběhne další cyklus který volá onu funkci s danými parametry - ta mi vrátí poskládaný INSERT který to vloží do dtb. |
||
| Majkl578 Profil |
#7 · Zasláno: 17. 2. 2010, 15:16:22 · Upravil/a: Majkl578
Není problém zanořit pole o stupeň hlouběji.
$ukol[1] = array... |
||
| Nox Profil |
#8 · Zasláno: 17. 2. 2010, 17:50:58
mikul:
Z jeho příspěvku jsem pochopil že ti doporučuje pole (a já taky) Toto je ne moc standardní a čistý postup, není důvod zde nedát array Navíc porovnej můj a tvůj zápis v přehlednosti a délce... |
||
| AM_ Profil |
#9 · Zasláno: 17. 2. 2010, 20:47:00
ve formuláři nebudeš mít <input name="ukol_1">, ale <input name="ukol[1]">.
V PHP potom budeš mít $_POST['ukol'][1]. Je to mnohem elegantnější řešení, které většina začátečníků nezná a se kterým se většinou mnohem lépe pracuje. Pojmenovávat proměnné $ukol_1 až $ukol_14 je hrozné. |
||
| mikul Profil |
#10 · Zasláno: 17. 2. 2010, 23:08:36
Díky za doporučení. Budu se držet vašich rad a předělám to.
|
||
| mikul Profil |
#11 · Zasláno: 18. 2. 2010, 14:26:22 · Upravil/a: mikul
AM:
Jak vyřeším to, že formulář pro jednotlivé úkoly tam může být vícekrát? Teď to řeším tak, že si uživatel zadá, že úkol 2 byl splněn třeba 3x a tak se mu vypíše ta tabulka pro úkol č. 2 3x a ty položky se liší indexem na koci - $i (např v první tabulce bude datum položka ukol_2_datum_1 a ve druhé ukol_2_datum_2) - odešle se mi s tím kolikrát byl úkol 2 splněn, je tam: <input type="hidden" name="ukol_<?php echo $ukol; ?>" size="1" value="<?php echo $ukolu; ?>"/> a tolikrát to projede cyklus který to postupně vloží do dtb.
<?php
function vypis_ukol_2($ukolu){
?>
<h2>Úkol číslo 2 - Beskydské putování mimo NS</h2>
<?php
for ($i=1; $i<=$ukolu; $i++){
?>
<table class="formular">
<tr>
<td width="150">Datum</td><td width="250">Trasa</td><td width="70">Počet km</td>
</tr>
<tr>
<td><input type="text" name="ukol_2_datum_<?php echo $i; ?>" size="10" value="200R-MM-DD" /></td>
<td><input type="text" name="ukol_2_trasa_<?php echo $i; ?>" size="45" maxlenght="100" value="maximálně 100 znaků" /></td>
<td><input type="text" name="ukol_2_km_<?php echo $i; ?>" size="5" /></td>
</tr>
</table>
<?php
}
}Jak přesně je tedy myšleno použít: <input name="ukol[1]"> - potřebuju ty inputy nějak rozlišit, abych projel pole a složil z hodnot příkaz do dtb. |
||
| Majkl578 Profil |
#12 · Zasláno: 18. 2. 2010, 14:57:18
Co třeba:
'...name="ukol[2][datum][' . $i . ']"...' a podobně? |
||
| mikul Profil |
#13 · Zasláno: 18. 2. 2010, 20:09:31
Jo, zdá se, že vše funguje jak má.
díky. Ještě se zeptám - asi by to mělo patřit do databází, ale musel bych to celé vysvětlovat. Jak jsem říkal jde o 14 zcela různých úkolů => v dtb mám 14 tabulek s různými údaji. Všemu vévodí tabulka kam se uloží informace o "akci" kde se úkoly plnily - ta má své id. Podle id té akce se musí projet těch 14 tabulek a vytáhnout úkoly kde slopec id_akce = id té akce. Je lepší udělat 14 dotazů nebo jeden výběr ze 14 tabulek - ne v každé k té tabulce něco bude, pravděpodobně se u jedné akce splní třeba 3 různé úkoly. U takových věcí nikdy nevím které řešení je lepší. Díky |
||
| tiso Profil |
#14 · Zasláno: 18. 2. 2010, 20:14:08 · Upravil/a: tiso
mikul:
edit: zabudol som na viacero úloh na akciu... |
||
| mikul Profil |
#15 · Zasláno: 18. 2. 2010, 20:23:54 · Upravil/a: mikul
No musel bych přidat 14 sloupců kam by se ukládalo jestli (v tom případě kolikrát) byl úkol splněn. Nevím co je lepší...
Taky se mi nelíbilo zakládat 14 tabulek, ale jak jinak to udělat, když u každého úkolu se ukládají zcela jiné věci. $poutnik_ukoly = array(1=>array("nazev", "trasa", "pocet_zastaveni", "datum"), array("datum", "trasa", "km"),
array("vrchol", "vyska", "datum"), a tak dále, každé pole = název sloupců v tabulce//no, myslím že by bylo spíš lepší jeden sloupec s polem... napsal jsem co mě první napadlo.. |
||
|
Časová prodleva: 16 let
|
|||
0