Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno proměnné v php

Potřeboval bych takovou obskurní věc a nevím, jestli to jde - vložit proměnnou do proměnné... :-) Asi bude lepší, když budu konkrétnější... Jde o tohle:

if ($data['time_0'] == "") {$mo0 = "nevysílá";} else {$mo0 = $data['time_0'];}
if ($data['time_15'] == "") {$mo15 = "nevysílá";} else {$mo15 = $data['time_15'];}
if ($data['time_30'] == "") {$mo30 = "nevysílá";} else {$mo30 = $data['time_30'];}
if ($data['time_45'] == "") {$mo45 = "nevysílá";} else {$mo45 = $data['time_45'];}
if ($data['time_100'] == "") {$mo100 = "nevysílá";} else {$mo100 = $data['time_100'];}
if ($data['time_115'] == "") {$mo115 = "nevysílá";} else {$mo115 = $data['time_115'];}

a tak dále... čísla 0,15,30,45,100,115... a tak dále reprezentují čas po čtvrthodinách (tedy 0:00,0:15,0:30,0:45,1:00,1:15 a tak dále... Musím do kódu vložit 24x4 řádky, nebo se to dá nějak obejít - například takhle:

$i = 0;
$j = 0;
$k = 0;
while ($k < 2400)
    {
    if ($data['time_($k)'] == "") {$mo($k) = "nevysílá";} else {$mo($k) = $data['time_($k)'];}
        if ($i = 45) {$i = 0; $j = $j + 100} else {$i = $i + 15;}
        $k = $i + $j;
    }

Tedy lépe řečeno, takhle to nejde, ale s nějakou jinou syntaxí??? A nebo úplně jinak? Jestliže $data['time_COKOLIV'] == "", pak $moSTEJNÉ_COKOLIV = ... atd?

Díky za pomoc.

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Dá sa to, stačí premenné vymeniť za session: $i = 45; if ($data["time_$i"] == "") {$_SESSION["mo$i]…
msx. 18.10.2007 10:37
msx.
tak so session by som to nerobil urcite. Ano to co pises v "Edit:" je priblizne to co chcel. Pole ne…
MM.. 18.10.2007 13:53
MM..
Rád bych si to rozmyslel, ale fakt jsem (navzdory věku) začátečník, sorry... :-) Potřebuji, aby výsl…
Drbo 18.10.2007 15:27
Drbo
A odkial beries tie hodnoty co su v poli? v podtstate staci ti jedno pole $mojepole[0] az $mojepole…
MM.. 18.10.2007 16:05
MM..
Ty hodnoty tam doplňuji manuálně prostřednictvím formuláře, který jsem si vyrobil...
Drbo 18.10.2007 16:07
Drbo
Ale preco vytvaras take divne pole. Indexy pouzivaj ciselne nech sa s tym da normlane robit. Staci t…
MM.. 18.10.2007 16:11
MM..
Vytvářím to proto, že to jinak neumím... :-( ale fakt se snažím... díky za pomoc, jen trochu pomalej…
Drbo 18.10.2007 16:16
Drbo
pane boze, naco? ziadne mo_neco nepotrebujes. Citaj co pisem. P.S. inac nemozes menit aj priamo to p…
MM.. 18.10.2007 16:18
MM..
Já ti (tomu) fakt nerozumím... jsi na ICQ? Netušil jsem, že se dá jednomu poli přiřadit víc hodnot..…
Drbo 18.10.2007 16:20
Drbo
Cez ICQ to za teba programovat nebudem. Mam svoju robotu. Tak to urob ako chces, mam pocit ale ze ti…
MM.. 18.10.2007 16:24
MM..
To že chybějí základy je jisté, to nepopírám... Ale díky aspoň za odkaz...
Drbo 18.10.2007 16:27
Drbo
Tak msx. ti uz napisal (v jeho prispevku po riadku "Edit:") ze ako urobit presne to na co si sa pyta…
MM.. 18.10.2007 16:43
MM..
Zjednodušil jsem to podle návodu... a objevil se problém... Zobrazení té tabulky je v pořádku, ale n…
Drbo 19.10.2007 03:22
Drbo
Problém je v syntaxi SQL dopytu. Vyzerá to tak, že v premennej $time máš hodnotu '32' (aj s tými úvo…
los 19.10.2007 09:31
los
Ad uvozovky - zdá se mi, že to mám správně, nikde by se žádné uvozovky neměly objevovat... Sloupec v…
Drbo 19.10.2007 15:00
Drbo
Pre názvy tabuliek existujú nejaké obmedzenia. Keď chceš, aby názov tabuľky pozostával iba z čísel,…
los 19.10.2007 15:53
los
Už jsem to několikrát psal a rád to zopakuji - losi, jsi génius...;-) Ty obrácené apostrofy zafungov… poslední
Drbo 19.10.2007 22:24
Drbo

Dá sa to, stačí premenné vymeniť za session:

$i = 45;
if ($data["time_$i"] == "") {$_SESSION["mo$i] = "nevysílá";} else {$_SESSION["mo$i"] = $data["time_$i"];}

Edit:
Alebo jednoduchšie je vytvoriť pole:

$i = 45;
if ($data["time_$i"] == "") {$mo[$i] = "nevysílá";} else {$mo[$i] = $data["time_$i"];}

Ostatné už vieš aj sám. Cyklus atď...

Edit 2:
Tvoj zápis je vlastne správny, len vymeň () za [] v druhom zápise pri názvoch premennej.

Edit 3:
Pole v PHP nemusí ísť od 0 do s krokom 1, kľudne môžeš použiť pole:

$data[0];
$data[15];
$data[30];
$data[45];
$data[100];

tak so session by som to nerobil urcite.
Ano to co pises v "Edit:" je priblizne to co chcel. Pole nemusi byt po 1 ale ak je po 15 tak je to neefektivne. Co urobi server ak nan pride milion poziadaviek naraz, ked to bude urobene nezmyselne neefektivne? Cele to pole a testovanie co tam robi mi pride nezmyselne, preto mu odporucam vsetko zmazat a najprv rozmyslat ze co chce robit a ako to bude robit (datove struktury), a az bude mat rozmysleny nejaky rozumny algoritmus a datove struktury, az potom programovat.

Rád bych si to rozmyslel, ale fakt jsem (navzdory věku) začátečník, sorry... :-) Potřebuji, aby výsledek na stránce byla tabulka se dnem rozděleným po čtvrthodinách od 00:00 do 23:45 a každé políčko v tabulce mělo jiný obsah, který určím a budu ho moci pomocí php co nejjednoduššeji aktualizovat... Skutečně nejsem žádný profesionální (a vlastně ani neprofesionální :-p) programátor, takže jsem se vydal kombinací logiky a toho mála co o php vím. Výsledkem je to, co jsem uvedl v tomhle dotazu, tedy věc, která (kupodivu) skutečně funguje, jen je zbytečně složitá a zhatěžující server... Budu vděčný za každou radu, jak to zjednodušit (jen prosím o výrazně polopatické vysvětlení, abych tu radu dokázal aplikovat).

Díky.

Ale preco vytvaras take divne pole. Indexy pouzivaj ciselne nech sa s tym da normlane robit. Staci ti jedno pole napr. $mojepole, vytvaranie tabulky v HTML bude vyzerat potom zhruba takto
for ($i=0; $i<96; $i++)
{
echo nejake_html_bunky_tabulky
if ($mojepole[$i] == "")
echo "nevysílá";
else
echo $mojepole[$i];
echo nejake_html_uzavretie_bunky_tabulky
}

nepotrebujes dalsie pole $mo
P.S. ak su tie neciselne indexy z nejakeho dovodu (formular) nutne, tak namiesto $mojepole[$i] pis $data["time_$i"] a cyklus bude: for ($i=0; $i<2400; $i+=15)

Vytvářím to proto, že to jinak neumím... :-( ale fakt se snažím... díky za pomoc, jen trochu pomaleji, prosím... Nejprve k databázové tabulce - jak bych tedy měl pojmenovat ta pole? Momentálně to mám mo_0, mo_15, mo_30, mo_45, mo_100... a tak dále, tzn. 96 polí... mám to tak nechat, nebo co s tím?

Zjednodušil jsem to podle návodu... a objevil se problém... Zobrazení té tabulky je v pořádku, ale nejdou do ní vkládat data prostřednictvím formuláře (manuálně přes mysqldumper ano). Syntaxi pro vkládání mám:

    while ($i < $program_time)
        {
        $time = ($hours * 4) + $minutes + $i;
        $update = dbquery("
            UPDATE ".$db_prefix."tvmanager_".$day."
            SET ".$time."='$program'
            WHERE channel_id='".$edit_program_id."'
            ");
        $i = $i + 1;
        }

a hlásí mi to chybu:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''32'='Serial 02' WHERE channel_id='47'' at line 2

V čem by mohl být problém?

Problém je v syntaxi SQL dopytu. Vyzerá to tak, že v premennej $time máš hodnotu '32' (aj s tými úvodzovkami).

Keď nevieš, čo je zle v SQL príkaze, tak najlepšie je, vypísať si ho pri ladení skriptu. Čiže v prípade chyby si vypíš obsah premennej $update a skontroluj si, čo tam vlastne máš.

Edit: Ako sa volá tabuľka a stĺpec v databáze, ktorého hodnotu chceš meniť? Pretože ten SQL príkaz nedáva zmysel.

Ad uvozovky - zdá se mi, že to mám správně, nikde by se žádné uvozovky neměly objevovat... Sloupec v databázi se jmenuje "32" - bez uvozovek :-) a hodnotu, která jeho název určuje, tedy proměnnou $time získávám ze vzorce $time = ($hours * 4) + $minutes + $i; Proměnné $hours a $minutes se zadávají do formuláře, hodiny mají hodnoty 0-23, minuty 0-3 (což reprezentuje 0,15,30 a 45 minut). Proměnná $i je tam proto, že někdy potřebuji vložit stejnou hodnotu $program do několika za sebou následujících polí... V principu jde o to, že potřebuji do tabulky vložit název televizního pořadu, který může trvat 15, nebo třeba 30,45 atd. minut...

EDIT:
Teď jsem zjistil, že to nahlášení chyby skutečně obsahuje uvozovky - to je pozůstatek toho, když jsem experimentoval a testoval jsem, jestli tam právě uvozovky být nemají... Nemají, protože i když jsem je dal pryč, chyba se vypíše stejná (jen ten výpis samozřejmě neobsahuje uvozovky kolem čísla 32)

Zpět do poradny Odpovědět na původní otázku Nahoru