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.

Předmět Autor Datum
Zhlavy si nie som isty ale myslim ze sa to v php da (cokolvek z premennej dosadit aby to php interpr…
MM.. 17.10.2007 23:44
MM..
Také nejsem žádný programátor - jak asi vidíš... Doporuč jednodušší postup, budu šťastný...
Drbo 17.10.2007 23:45
Drbo
Nie je mi z toho co pises jasne ze co tym skriptom chces dosiahnut. Odkial mas tie $data[...]? Preco…
MM.. 17.10.2007 23:46
MM..
Potřebuji tabulku pro jeden den, pro čas po 15 minutách a v každém poli jiný údaj...
Drbo 18.10.2007 00:41
Drbo
Takže chceš mít něco takového? čas hodnota 0:00 x1 0:15 x2 . . . . 23:45 x96 Pokud ano, tak bych…
MaSo 18.10.2007 06:22
MaSo
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
Aha, díky za vysvětlení... upřímně řečeno, já jsem si myslel,k že to může být něco takového... proto…
Drbo 19.10.2007 19:10
Drbo
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

Zhlavy si nie som isty ale myslim ze sa to v php da (cokolvek z premennej dosadit aby to php interpretoval), ale schvalne nehladam ako presne, ptz to co robis mi pride ako katastrofa, lepsie komplet to prerobit a urobit to normalne (nepouzivat 24 roznych premennych namiesto jedneho normalneho pola).

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)

Aha, díky za vysvětlení... upřímně řečeno, já jsem si myslel,k že to může být něco takového... proto se taky ta pole původně jmenovala "time_0" atd... viz začátek tohohle vlákna... jenže to mi pak zase nefungovala syntaxe $data["time_$i"] - tu proměnnou $i to prostě nebralo...

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