Autor Zpráva
mikul
Profil
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)
- nefunguje
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
${'ukol_' . $j}

Neni lepší použít pole? $ukol[14]?
mikul
Profil
Jej díky...
mikul
Profil
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
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
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
Není problém zanořit pole o stupeň hlouběji.
$ukol[1] = array...
Nox
Profil
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
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
Díky za doporučení. Budu se držet vašich rad a předělám to.
mikul
Profil
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
Co třeba:
'...name="ukol[2][datum][' . $i . ']"...'

a podobně?
mikul
Profil
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
mikul: Asi bude stačiť pridať stĺpec s typom úlohy do tej tabuľky akcií. Otázne ale je či je ten tvoj návrh štruktúry správny.
edit: zabudol som na viacero úloh na akciu...
mikul
Profil
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..

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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