Autor Zpráva
Chatík
Profil
Ahoj,

mohl by mi někdo prosím vysvětlit co dělá toto?:
    foreach($STMrecords as $r)
        {
echo "<tr>";
echo "<td bgcolor='#d5eaf0'>{$r[0]}</td>";
echo "<td bgcolor='#d5eaf0'>{$r[1]}</td>";
if ($r[2]==0)
echo "<td bgcolor='green'>{$r[2]}</td>";
else if ($r[2]>0)
echo "<td bgcolor='red'>{$r[2]}</td>";
if ($r[3]==0)
echo "<td bgcolor='green'>{$r[3]}</td>";
else if ($r[3]>0)
echo "<td bgcolor='red'>{$r[3]}</td>";
if ($r[4]>90)
echo "<td bgcolor='green'>{$r[4]}</td>";
else if ($r[4]<90)
echo "<td bgcolor='red'>{$r[4]}</td>";
if ($r[5]>90)
echo "<td bgcolor='green'>{$r[5]}</td>";
else if ($r[5]<90)
echo "<td bgcolor='red'>{$r[5]}</td>";
if ($r[6]>90)
echo "<td bgcolor='green'>{$r[6]}</td>";
else if ($r[6]<90)
echo "<td bgcolor='red'>{$r[6]}</td>";
if ($r[7]>90)
echo "<td bgcolor='green'>{$r[7]}</td>";
else if ($r[7]<90)
echo "<td bgcolor='red'>{$r[7]}</td>";
if ($r[8]>90)
echo "<td bgcolor='green'>{$r[8]}</td>";
else if ($r[8]<90)
echo "<td bgcolor='red'>{$r[8]}</td>";
if ($r[9]>90)
echo "<td bgcolor='green'>{$r[9]}</td>";
else if ($r[9]<90)
echo "<td bgcolor='red'>{$r[9]}</td>";
if ($r[10]=='YES')
echo "<td bgcolor='green'>{$r[10]}</td>";
else if ($r[10]=='NO')
echo "<td bgcolor='red'>{$r[10]}</td>";
if ($r[11]==0)
echo "<td bgcolor='green'>{$r[11]}</td>";
else if ($r[11]>0)
echo "<td bgcolor='red'>{$r[11]}</td>";
if ($r[12]==0)
echo "<td bgcolor='green'>{$r[12]}</td>";
else if ($r[12]>0)
echo "<td bgcolor='red'>{$r[12]}</td>";
if ($r[13]<28)
echo "<td bgcolor='green'>{$r[13]}</td>";
else if ($r[13]>28)
echo "<td bgcolor='red'>{$r[13]}</td>";
echo "<td bgcolor='#d5eaf0'>{$r[14]}</td>";
echo "</tr></div>
";
        }

Je mi jasné že to obarvuje sloupce v tabulce, ale nechápu za jakých podmínek.
Lze ten zápis nějak zjednodušit?
Děkuji za pomoc a radu.
tiso
Profil
Chatík: „...co dělá toto?
Vypíše jeden riadok html tabuľky

ale nechápu za jakých podmínek
Tie podmienky sú tam uvedené, čo ktorý stĺpec a číslo v podmienke znamená musíš zistiť z kódu okolo.

Lze ten zápis nějak zjednodušit?
Áno, porozdeľovať políčka do skupín podľa podmienok a pridať ďalšie funkcie/metódy na ich spracovanie.
Chatík
Profil
tiso:
Děkuji za pomoc ale ty podmínky ze zbytku kodu mi pochopit nejdou.

Áno, porozdeľovať políčka do skupín podľa podmienok a pridať ďalšie funkcie/metódy na ich spracovanie.
Jak to myslíš?

Zde je celý script:
  // Time limit to 0 for exporting big records.
    set_time_limit(0);
    // mysql hostname
    $hostname = 'localhost';
    // mysql username
    $username = '*';
    // mysql password
    $password = '*';
    // Database Connection using PDO with try catch method.
    try { $dbh = new PDO("mysql:host=$hostname;dbname=table", $username, $password);
    $dbh->exec("set names utf8"); }

    // In case of error PDO exception will show error message.
    catch(PDOException $e) {    echo $e->getMessage();    }
    header("Content-type: application/vnd.ms-excel");
    header("Content-Disposition: attachment;Filename=Server_Stats.xls");
    echo "<html>";
    echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">";
    echo "<body>";
    echo "<table border=1>";
    $EntryBy = $_GET[val];
    // Get data using PDO prepare Query.
    $STM2 = $dbh->prepare("SELECT * FROM table");
    // bind paramenters, Named paramenters alaways start with colon(:)
    $STM2->bindParam('id', $EntryBy);
    // For Executing prepared statement we will use below function
    $STM2->execute();
    // We will fetch records like this and use foreach loop to show multiple Results later in bottom of the page.
    $STMrecords = $STM2->fetchAll();
    // We use foreach loop here to echo records.
    foreach($STMrecords as $r)
        {
echo "<tr>";
echo "<td bgcolor='#d5eaf0'>{$r[0]}</td>";
echo "<td bgcolor='#d5eaf0'>{$r[1]}</td>";
if ($r[2]==0)
echo "<td bgcolor='green'>{$r[2]}</td>";
else if ($r[2]>0)
echo "<td bgcolor='red'>{$r[2]}</td>";
if ($r[3]==0)
echo "<td bgcolor='green'>{$r[3]}</td>";
else if ($r[3]>0)
echo "<td bgcolor='red'>{$r[3]}</td>";
if ($r[4]>90)
echo "<td bgcolor='green'>{$r[4]}</td>";
else if ($r[4]<90)
echo "<td bgcolor='red'>{$r[4]}</td>";
if ($r[5]>90)
echo "<td bgcolor='green'>{$r[5]}</td>";
else if ($r[5]<90)
echo "<td bgcolor='red'>{$r[5]}</td>";
if ($r[6]>90)
echo "<td bgcolor='green'>{$r[6]}</td>";
else if ($r[6]<90)
echo "<td bgcolor='red'>{$r[6]}</td>";
if ($r[7]>90)
echo "<td bgcolor='green'>{$r[7]}</td>";
else if ($r[7]<90)
echo "<td bgcolor='red'>{$r[7]}</td>";
if ($r[8]>90)
echo "<td bgcolor='green'>{$r[8]}</td>";
else if ($r[8]<90)
echo "<td bgcolor='red'>{$r[8]}</td>";
if ($r[9]>90)
echo "<td bgcolor='green'>{$r[9]}</td>";
else if ($r[9]<90)
echo "<td bgcolor='red'>{$r[9]}</td>";
if ($r[10]=='YES')
echo "<td bgcolor='green'>{$r[10]}</td>";
else if ($r[10]=='NO')
echo "<td bgcolor='red'>{$r[10]}</td>";
if ($r[11]==0)
echo "<td bgcolor='green'>{$r[11]}</td>";
else if ($r[11]>0)
echo "<td bgcolor='red'>{$r[11]}</td>";
if ($r[12]==0)
echo "<td bgcolor='green'>{$r[12]}</td>";
else if ($r[12]>0)
echo "<td bgcolor='red'>{$r[12]}</td>";
if ($r[13]<28)
echo "<td bgcolor='green'>{$r[13]}</td>";
else if ($r[13]>28)
echo "<td bgcolor='red'>{$r[13]}</td>";
echo "<td bgcolor='#d5eaf0'>{$r[14]}</td>";
echo "</tr></div>
";
        }
    echo "</table>";
    echo "</body>";
    echo "</html>";
    // Closing MySQL database connection
    $dbh = null;

Budeš tak hodný a koukl by si na to?
Zajímalo by mě jestli lze sloupce generovat automaticky podle počtu sloupců v databázi?
nightfish
Profil
Chatík:
Děkuji za pomoc ale ty podmínky ze zbytku kodu mi pochopit nejdou.
To vskutku nejdou. Další možnou nápovědou by mohla být struktura tabulky `table` v databázi, resp. názvy jejich sloupců.

Řádky 34-84 z tvého kódu v [#3] lze přepsat jako:
function zeroOrMore($value) {
    if ($value == 0)
        return "<td bgcolor='green'>{$value}</td>";       
    else if ($value > 0)
        return "<td bgcolor='red'>{$value}</td>";
}

function moreOrLess($value, $compareTo) {
    if ($value > $compareTo)
        return "<td bgcolor='green'>{$value}</td>";
    else if ($value < $compareTo)
        return "<td bgcolor='red'>{$value}</td>";
}

function yesNo($value) {
    if ($value == 'YES')
        return "<td bgcolor='green'>{$value}</td>";
    else if ($value == 'NO')
        return "<td bgcolor='red'>{$value}</td>";
}

echo "<td bgcolor='#d5eaf0'>{$r[0]}</td>";
echo "<td bgcolor='#d5eaf0'>{$r[1]}</td>";
echo zeroOrMore($r[2]);
echo zeroOrMore($r[3]);
echo moreOrLess($r[4], 90);
echo moreOrLess($r[5], 90);
echo moreOrLess($r[6], 90);
echo moreOrLess($r[7], 90);
echo moreOrLess($r[8], 90);
echo moreOrLess($r[9], 90);
echo yesNo($r[10]);
echo zeroOrMore($r[11]);
echo zeroOrMore($r[12]);
echo moreOrLess($r[13], 28);
echo "<td bgcolor='#d5eaf0'>{$r[14]}</td>";

Zajímalo by mě jestli lze sloupce generovat automaticky podle počtu sloupců v databázi?
I to by šlo, ale stejně pak musíš nějak určit, který sloupec se bude vypisovat s jakou obarvovací podmínkou.
Chatík
Profil
nightfish:
Děkuji za radu.

Struktůra tabulky:
tiso
Profil
Chatík: nejak ti nesedí tabuľka s dotazom. Prečo?
Chatík
Profil
tiso:
Co tím mysliš? Je tím myšlen počet sloupců?
Jestli ano tak je to tím že záleží jakou tabulku chci vypsat. Proto jich je ve scriptu více. Proto by bylo lepší kdyby se generovali automaticky, podle počtu sloupců v tabulce
anonymníí
Profil *
Chatík:
Co to je za nesmysl? Máš SQL dotaz, kterým taháš nějaké sloupce, tak snad víš, kolik jich je, ne? Můžeš k datům přistupovat také pomocí asociativního pole, nikoliv dle číselných indexů.

Jestli myslíš, že počet sloupců neznáš, je něco špatně. Ten znáš vždy, vždy víš, jaká data vytahuješ.

Ona i ta tabulka je divná, máš divné sloupce, resp. rozsahy.
- album a albumartist mají být ID vázaná na jinou tabulku
- year je čtyřmístný, proč int(11)?
- publisher má být ID z jiné tabulky
- heslo hashuješ, čím? Stomístný hash neznám.
- klik je tuším bool, ten tinyint(1), nebo bool.

„Proto by bylo lepší kdyby se generovali automaticky“
Lepší by bylo udělat si jasno, co chceš vytáhnout za data, vědět, kolik máš sloupců a začít psát nějak normálně. Jako programátor, ne patlal.
Chatík
Profil
anonymníí:
Ona i ta tabulka je divná, máš divné sloupce, resp. rozsahy.
- album a albumartist mají být ID vázaná na jinou tabulku
- year je čtyřmístný, proč int(11)?
- publisher má být ID z jiné tabulky
- heslo hashuješ, čím? Stomístný hash neznám.
- klik je tuším bool, ten tinyint(1), nebo bool.
Vůbec netušíš co je uloženo ve sloupcích a snažiš se tu ze mě udělat uplného trotla.
Ani jedna tvá dedukce ohledně tabulky neni správná. Například ve sloupci heslo není nic hashovaného. Jde čiste o heslo k rar souboru. Ehm.
Co se týče toho počtu sloupců, tak jde o to že záleží na uživateli jakou tabulku si bude chtít stáhnout. A jak už jsem psal, tabulky nemají stejný počet sloupců. Příklad výše byl jen pro orientaci.
A na konec ti chci říct že člověk s reakcemi jako jsi ty a ne jen v tomto příspěvku to asi nemá vůbec lehké a proto musí vystupovat jako anonymníí.



Píšu tuto reakci z mobilu proto je diakritika takova jaká je. Sry.
mimochodec
Profil
Chatík:
Je pravda, že tu databázi si představuješ nějak divoce. Jestli píšeš o "tabulkách" a různých počtech sloupců, ber na vědomí, že správný postup je zařídit to tak, abys měl jednu tabulku o daném počtu sloupců a do těch sloupců nějak rozložená data. Tzn. to, co se snažíš dělat na výstupu, dělej na vstupu, ve fázi, kdy data odněkud bereš.
tiso
Profil
Chatík: „Proto by bylo lepší kdyby se generovali automaticky, podle počtu sloupců v tabulce
To nie je problém, problém je že do toho výpisu chceš aj podmienky na zmenu zobrazenia políčka html tabuľky. Uznaj že napríklad pre stĺpec z databázy Web varchar(255) podmienka $web < 90 nedáva zmysel.
Chatík
Profil
tiso:
Ano chápu a uznávám, podmínky upravím do správné podoby.
Co se týče těch sloupců, tak jde o to že uživatel bude mít na výběr ze dvou tabulek, které nemají stejný počet sloupců + bude mít na výběr kolik sloupců si chce stáhnout.
Protože jsou uživatele kteří chtějí jen některé sloupce.

Ale moc díky za tvou odpověď.
anonymníí
Profil *
Chatík:
A na konec ti chci říct že člověk s reakcemi jako jsi ty a ne jen v tomto příspěvku to asi nemá vůbec lehké a proto musí vystupovat jako anonymníí.
Jsem tu asi tak stejně (ne)anonymníí, jako kdosi pod přezdívkou Chatík :-)

Chtěl jsem ti jen naznačit, že celý tvůj myslenkový pochod ohledně databáze je špatný.
Jen na okraj, heslo jsem možná netrefil, ale rok bude max. čtyřmístný, že? To není předmětem diskuse, jen jsem na to upozornil, nic víc, nic míň.

Píšeš, že uživatel bude mít na výběr ze dvou tabulek a kolik sloupců chce stáhnout. Ale on přeci nechce stáhnout 5 (jakýchkoliv) sloupců, ale těch 5 sloupců taxativně vyjmenuje, tzn. ty znáš jejich jména. Je to standardní filtrovací úloha, ale řešená... poněkud začátečnicky a nevhodně.

Očekáváš konkrétní radu, ale dostáváš jen obecné. To proto, že jsi dal moc obecný příklad na který konkrétněji odpovědět nelze. Celkově tvůj přístup, kdy používáš číselné indexy namísto asociativních polí (pořadí sloupců z databáze není nikde uvedeno a garantováno, nevíš, co pod jednotlivými číselnými indexy je a bude).
tiso
Profil
Doplním: potrebuješ vedieť ktoré stĺpce vyberáš (fetchAll() vracia aj asociatívne názvy, s parametrom PDO::FETCH_ASSOC vracia iba tie asociatívne) a zároveň ktorý stĺpec sa ako formátuje (tie funkcie čo napísal nightfish pridáš si tam silverCell funkciu pre tie ostatné bunky. To si uložíš do jednoduchého poľa v tvare 'nazovStlpca' => 'formatovaciaFunkcia' a potom iba voláš:
...
function silverCell($value) {
  return "<td bgcolor='#d5eaf0'>{$value}</td>";
}
$formatFunctionsMapping = array{...};//column => $function
foreach ($STMrecords as $row) {
  echo "<tr>";
  foreach ($row as $column => $value) {
    $function = $formatFunctionsMapping[$column];
    echo $fuction($value);
  }
  echo "</tr>";
}
Chatík
Profil
tiso:
Díky moc.


Doufám že jsem to pochopil správně:
    $STMrecords = $STM2->fetch(PDO::FETCH_ASSOC);
    // We use foreach loop here to echo records.
    function zeroOrMore($value) {
    if ($value == 0)
        return "<td bgcolor='green'>{$value}</td>";
    else if ($value > 0)
        return "<td bgcolor='red'>{$value}</td>";
}

function moreOrLess($value, $compareTo) {
    if ($value > $compareTo)
        return "<td bgcolor='green'>{$value}</td>";
    else if ($value < $compareTo)
        return "<td bgcolor='red'>{$value}</td>";
}

function yesNo($value) {
    if ($value == 'YES')
        return "<td bgcolor='green'>{$value}</td>";
    else if ($value == 'NO')
        return "<td bgcolor='red'>{$value}</td>";
}
function silverCell($value) {
  return "<td bgcolor='#d5eaf0'>{$value}</td>";
}
$formatFunctionsMapping = array('name' => $function,'Album' => $function,'Year' => $function,'Albumartist' => $function,'Publisher' => $function);//column => $function
foreach ($STMrecords as $row) {
  echo "<tr>";
  foreach ($row as $column => $value) {
    $function = $formatFunctionsMapping[$column];
    echo $fuction($value);
  }
  echo "</tr>";
}

Pokud ano, tak teď mi to bohužel nic nevypisuje.

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:

0