Autor Zpráva
tomak
Profil *
Zdravím,

lze provést data jednodušeji než takhle? Děkuji..

<?php

$datumcas = "2012-05-20 18:05:17";
$datumcas = strtotime($datumcas);
$datumcas = StrFTime("%d.%m.%Y %H:%M:%S", $datumcas);
echo $datumcas;

?>



oprava* "lze převést datum" :)
ShiraNai7
Profil
<?php

$time = new DateTime('2012-05-20 18:05:17');
echo $time->format('d.m.Y H:i:s');

edit: opravil jsem formát... symboly pro minuty a sekundy tam byly jiné..
tomak
Profil *
Díky moc:) a ještě jedna věc. Jde tohle napsat jednodušeji?:) Díky

                $vysledek_kategorie = MySQL_Query("SELECT * FROM sekce WHERE id = ".$clanek_sekce.""); 
                        while ($zaznam = MySQL_Fetch_Array($vysledek_kategorie)){
                            $menu_nazev=$zaznam["nazev"];
                            $menu_odkaz=$zaznam["url"]; 
                        }
Darker
Profil
                $vysledek_kategorie = MySQL_Query("SELECT nazev, url FROM sekce WHERE id = ".$clanek_sekce.""); 
                        while ($zaznam = MySQL_Fetch_Array($vysledek_kategorie, MYSQL_ASSOC)){
                            $menu_nazev=$zaznam["nazev"];
                            $menu_odkaz=$zaznam["url"]; 
                        }
Tori
Profil
tomak:
Proč používat cyklus, když dotaz vrací (předpokládám) jeden řádek dat? A přepisujete si hodnoty proměnných v cyklu. Dá se to napsat i takhle:
$vysledek_kategorie = mysql_query("SELECT nazev, url FROM sekce WHERE id = ".$clanek_sekce.""); 
if ($vysledek_kategorie) {
  $zaznam = mysql_fetch_assoc($vysledek_kategorie);
  $menu_nazev=$zaznam["nazev"];
  $menu_odkaz=$zaznam["url"];
}
anebo třeba takhle:
$vysledek_kategorie = mysql_query("SELECT nazev, url FROM sekce WHERE id = ".$clanek_sekce.""); 
if ($vysledek_kategorie) {
  list($menu_nazev, $menu_odkaz) = mysql_fetch_assoc($vysledek_kategorie);
}
Jan Tvrdík
Profil
Tori:
Spíš takto:
$vysledek_kategorie = mysql_query("SELECT nazev, url FROM sekce WHERE id = " . (int) $clanek_sekce); 
if ($vysledek_kategorie && $radek = mysql_fetch_row($vysledek_kategorie)) {
  list($menu_nazev, $menu_odkaz) = $radek;
}
tomak
Profil *
Ano, načítám jen jeden řádek a to třeba autora z jine tabulky,...

momentálně to mám takto a chci to co nejvíc zjednodušit a zefektivnit:)

    $limit=$page*5;
    $vysledek = MySQL_Query("SELECT * FROM clanky ORDER BY id DESC limit $limit, 5"); 
        while ($zaznam = MySQL_Fetch_Array($vysledek)){
            $clanek_id=$zaznam["id"];
            $clanek_sekce=$zaznam["sekce"]; 
            $clanek_autor=$zaznam["autor"];
            $clanek_url=$zaznam["url"];
            $clanek_nadpis=$zaznam["nadpis"];
            $clanek_klicova_slova=$zaznam["klicova_slova"];
            $clanek_popis=$zaznam["popis"];
            $clanek_strucny_popis=$zaznam["strucny_popis"];
            $clanek_clanek=$zaznam["clanek"];
            $clanek_hodnoceni=$zaznam["hodnoceni"];
            $clanek_povoleno=$zaznam["povoleno"];
            $clanek_zverejneno=$zaznam["zverejneno"];
            $clanek_zobrazeno=$zaznam["zobrazeno"];
                
            // kontrola jestli je clanek povoleny
            if($clanek_povoleno == 1){
                                            
                    // nacteni jmena autora
                    $vysledek_autori = MySQL_Query("SELECT * FROM autori WHERE id = ".$clanek_autor.""); 
                            while ($zaznam = MySQL_Fetch_Array($vysledek_autori)){
                                $autor_jmeno=$zaznam["jmeno"];
                                $autor_prijmeni=$zaznam["prijmeni"]; 
                            }   
                                            
                    // nacteni jmena kategorie
                    $vysledek_kategorie = MySQL_Query("SELECT * FROM sekce WHERE id = ".$clanek_sekce.""); 
                            while ($zaznam = MySQL_Fetch_Array($vysledek_kategorie)){
                                $menu_nazev=$zaznam["nazev"];
                                $menu_odkaz=$zaznam["url"]; 
                            }
                                                
                    // pocet komentaru
                    $komentare_pocet = mysql_result(mysql_query("SELECT COUNT(*) FROM komentare WHERE id_clanku = ".$clanek_id.""), 0);

                    $datum = prevod_data($clanek_zverejneno);
                            
                        echo "        <article id=\"kratky\">\n";
                        echo "            <header>\n";
                        echo "                <h2><a href=\"".$clanek_url."\">".$clanek_nadpis."</a></h2>\n";
                        echo "                <p class=\"hlavickaclanku\">Publikoval ".$autor_jmeno." ".$autor_prijmeni.", dne ".$datum.", v kategorii <a href=\"".$menu_odkaz."\">".$menu_nazev."</a>.</p>\n";
                        echo "            </header>\n";        
                        echo "            <p>".$clanek_strucny_popis."</p>\n";    
                        echo "            <p class=\"patickaclanku\">Kategorie: ".$menu_nazev.", komentářů: ".$komentare_pocet.", hodnocení: ".$clanek_hodnoceni.".</p>\n";                                    
                        echo "        </article>\n";                    
                        echo "\n";                                        
            }
        }

Určitě to zjednoduším podle příkladů, které jste mi napsali:)
Darker
Profil
Třeba celý ten blok s přiřazováním prvků pole jednotlivým proměnným můžeš přeskočit a používat rovnou to pole.
pcmanik
Profil
tomak:
Skus pouzivat konstanty, v neskorsich casoch az budes chcet zmenit povedzme pocet clankov, urobis to z jedneho miesta a nebudes sa muset prehrabavat kodom.
Majkl578
Profil
tomak:
načítám jen jeden řádek a to třeba autora z jine tabulky,...
>
momentálně to mám takto a chci to co nejvíc zjednodušit a zefektivnit:)
Začni tím, že jméno autora a kategorie načteš přes JOIN v prvním dotazu. Ušetříš ty následující dva.
Všechny přiřazení do proměnných (ř. 4 až 16) můžeš taky vyhodit, je to k ničemu, jen je to tím akorát nepřehlednější.
tomak
Profil *
Zkoušel jsem v prví řadě odstranit řádky 4-16 .

Když nahradím $clanek_nadpis tímto $zaznam["nadpis"] tak to nefunguje. Kde dělám chybu? Díky za odpověď
Darker
Profil
tomak:
nefunguje
Co to znamená?
tomak
Profil *
nic to nezobrazí když to zaměním tak jak jsem psal

    $limit=$page*5;
    $vysledek = MySQL_Query("SELECT * FROM clanky ORDER BY id DESC limit $limit, 5"); 
        while ($zaznam = MySQL_Fetch_Array($vysledek)){
            $clanek_id=$zaznam["id"];
            $clanek_sekce=$zaznam["sekce"]; 
            $clanek_autor=$zaznam["autor"];
            $clanek_url=$zaznam["url"];
            $clanek_nadpis=$zaznam["nadpis"];
            $clanek_klicova_slova=$zaznam["klicova_slova"];
            $clanek_popis=$zaznam["popis"];
            $clanek_strucny_popis=$zaznam["strucny_popis"];
            $clanek_clanek=$zaznam["clanek"];
            $clanek_hodnoceni=$zaznam["hodnoceni"];
            $clanek_povoleno=$zaznam["povoleno"];
            $clanek_zverejneno=$zaznam["zverejneno"];
            $clanek_zobrazeno=$zaznam["zobrazeno"];

            // kontrola jestli je clanek povoleny
            if($zaznam["povoleno"] == 1){
                        
                    // nacteni jmena autora
                    $vysledek_autori = MySQL_Query("SELECT * FROM autori WHERE id = ".$clanek_autor.""); 
                            while ($zaznam = MySQL_Fetch_Array($vysledek_autori)){
                                $autor_jmeno=$zaznam["jmeno"];
                                $autor_prijmeni=$zaznam["prijmeni"]; 
                            }   
                                            
                    // nacteni jmena kategorie
                    $vysledek_kategorie = MySQL_Query("SELECT * FROM sekce WHERE id = ".$clanek_sekce.""); 
                            while ($zaznam = MySQL_Fetch_Array($vysledek_kategorie)){
                                $menu_nazev=$zaznam["nazev"];
                                $menu_odkaz=$zaznam["url"]; 
                            }
                
                    // pocet komentaru
                    $komentare_pocet = mysql_result(mysql_query("SELECT COUNT(*) FROM komentare WHERE id_clanku = ".$clanek_id.""), 0);

                    $datum = prevod_data($clanek_zverejneno);
                            
                        echo "        <article id=\"kratky\">\n";
                        echo "            <header>\n";
                        echo "                <h2><a href=\"".$clanek_url."\">".$zaznam["nadpis"]."</a></h2>\n";
                        echo "                <p class=\"hlavickaclanku\">Publikoval ".$autor_jmeno." ".$autor_prijmeni.", dne ".$datum.", v kategorii <a href=\"".$menu_odkaz."\">".$menu_nazev."</a>.</p>\n";
                        echo "            </header>\n";        
                        echo "            <p>".$clanek_strucny_popis."</p>\n";    
                        echo "            <p class=\"patickaclanku\">Kategorie: ".$menu_nazev.", komentářů: ".$komentare_pocet.", hodnocení: ".$clanek_hodnoceni.".</p>\n";                                    
                        echo "        </article>\n";                    
                        echo "\n";            
                
            }
        }



ta podminka jestli je clanek povoleny funguje dobre, jinak dal uz nee
Darker
Profil
To mi nedává smysl. Dumpni si tu proměnnou.


mysql_query("...") or die(mysql_error());
error_reporting(E_ALL);
Zkus hledat chyby sám.
tomak
Profil *
Aha, tak už chápu, kde byla chyba...


Několik while se stejnou proměnnou $zaznam :)
Jan Tvrdík
Profil
První, co mě napadlo je:

$limit = $page * 5;
$clanky = array();
$autori = array();
$sekce = array();
$pocty_komentaru = array();
 
$vysledek = MySQL_Query("
    SELECT *
    FROM clanky
    WHERE povoleno = 1
    ORDER BY id DESC
    LIMIT $limit, 5
"); 
 
while ($clanek = MySQL_Fetch_Assoc($vysledek)){
    $clanky[$clanek["id"]] = $clanek;
    $autori[$clanek["autor"]] = NULL;
    $sekce[$clanek["sekce"]] = NULL;
}
 
$vysledek = MySQL_Query("
    SELECT id, jmeno, prijmeni
    FROM autori
    WHERE id IN (" . implode(",", array_keys($autori)) . ")
");
 
while ($autor = MySQL_Fetch_Assoc($vysledek)) {
    $autori[$autor["id"]] = $autor;
}
 
$vysledek = MySQL_Query("
    SELECT id, nazev, url
    FROM sekce
    WHERE id IN (" . implode(",", array_keys($sekce)) . ")
");

while ($zaznam = MySQL_Fetch_Assoc($vysledek)) {
    $sekce[$zaznam["id"]] = $zaznam;
}

$vysledek = MySQL_Query("
    SELECT id_clanku, COUNT(*) AS pocet
    FROM komentare
    WHERE id_clanku IN (" . implode(",", array_keys($clanky)) . ")
    GROUP BY id_clanku
");

while ($zaznam = MySQL_Fetch_Assoc($vysledek)) {
    $pocty_komentaru[$zaznam["id_clanku"]] = $zaznam["pocet"];
}
 
foreach ($clanky as $clanek) {
    $datum = prevod_data($clanek["zverejneno"]);
    $autor = $autori[$clanek["autor"]];
    $menu = $sekce[$clanek["sekce"]];
    $pocet_komentaru = $pocty_komentaru[$clanek["id"]];
 
    echo "        <article id=\"kratky\">\n";
    echo "            <header>\n";
    echo "                <h2><a href=\"" . $clanek["url"] . "\">" . $clanek["nadpis"] . "</a></h2>\n";
    echo "                <p class=\"hlavickaclanku\">Publikoval " . $autor["jmeno"] . " " . $autor["prijmeni"] . ", dne " . $datum . ", v kategorii <a href=\"" . $menu["odkaz"] . "\">" . $menu["nazev"] . "</a> . </p>\n";
    echo "            </header>\n";        
    echo "            <p>" . $clanek["strucny_popis"] . "</p>\n";    
    echo "            <p class=\"patickaclanku\">Kategorie: " . $menu["nazev"] . ", komentářů: " . $pocet_komentaru . ", hodnocení: " . $clanek["hodnoceni"] . ".</p>\n";                                    
    echo "        </article>\n";                    
    echo "\n";   
}

Hlavním rozdílem je, že pokládá konstantní počet dotazů.

Zapomněl jsem na komentáře :)


Mimochodem místo <article id="kratky"> bys měl používat class="kratky", protože těch článků může být očividně víc.

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: