Autor Zpráva
james2210
Profil
Ahojte , Potreboval by som nejak zjednoduksit kod ktory pouzivam na zoznam noviniek.
Problem je v tom ze co sa tyka programovania som zaciatocnik a spravil som to tak ako som vedel a funguje ako ma ale problem je ze cele to mam vo 4 suboroch pricom 90% kodu je kazdom uplne rovnaky. Vopred sa ale omluvam ak som to zadial do zlej temy.

mena suborov:

DVD.php
DVD_sety.php
Blu-ray.php
Blu-ray_sety.php


kod v suboroch
<div id="blog-menu">
<div id="menu-typ"> 

<ul>
<li><a href="filmove-dvd.php">DVD</a></li>
<li><a href="filmove-dvdset.php">DVD sety</a></li>
<li><a href="filmove-bluraysety.php">Blu-Ray sety</a></li>
<li><a href="filmove-bluray.php">Blu-Ray </a></li>
</ul>

</div> <!-- end menu-typ -->
</div> <!-- end blog-menu -->


<div class="blog-obsah-test">
 <h3>Filmové obaly</h3>

 
  <?php
$alpha = array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z");

//LISTS TITLE IN ALPHABETICAL ORDER UNDER EACH LETTER
foreach($alpha as $a){
    $q = mysql_query("SELECT * FROM novinky as n left join account as a on a.id_account = n.novinka_autor WHERE novinka_nazov LIKE '$a%' and novinka_kategorie = '4' and novinka_podkategorie = '2' ");
    $n = mysql_num_rows($q);
    
    //EXCLUDES LETTER IF THERE TITLES THAT START WITH IT
    if($n){
        echo "<div class='vector'></div>";
        echo "<center>";
        echo "<div class='celok'>";
        echo "<div class='celok-1'><p>" .$a. "<p></div>";
        echo "</div>";
        echo "</center>";
        while($row = mysql_fetch_array($q)){            
           echo "<ul><li>";
           echo "<font size='4px'><a href='novinkaobsah.php?id_novinky=" .$row ['id_novinky']." '>{$row['novinka_nazov']}</a></font><br>"; 
           echo "<span><font size='2px'> <img src='images/postauthoricon2.png' style='vertical-align:middle' alt=''> autor:  </font></span>";
           echo "<span><font size='2px'>" .ucfirst($row ["username"])."</font></span><br>"; 
           echo "</li></ul>";
        }
        echo '<br>';
    }
}

?>
</div><!-- end blog-obsah-test -->

jediny rozdel v nich je prikaz pre mysql

DVD.php : mysql_query("SELECT * FROM novinky as n left join account as a on a.id_account = n.novinka_autor WHERE novinka_nazov LIKE '$a%' and novinka_kategorie = '4' and novinka_podkategorie = '1' ");

DVD_serty.php : mysql_query("SELECT * FROM novinky as n left join account as a on a.id_account = n.novinka_autor WHERE novinka_nazov LIKE '$a%' and novinka_kategorie = '4' and novinka_podkategorie = '2' ");

Blu-ray.php : mysql_query("SELECT * FROM novinky as n left join account as a on a.id_account = n.novinka_autor WHERE novinka_nazov LIKE '$a%' and novinka_kategorie = '4' and novinka_podkategorie = '3' ");

Blu-ray_sety.php : mysql_query("SELECT * FROM novinky as n left join account as a on a.id_account = n.novinka_autor WHERE novinka_nazov LIKE '$a%' and novinka_kategorie = '4' and novinka_podkategorie = '4' ");

a takto mam 4.subory na filmove a 4.subory na serialove
rozdel je len v : filmove = novinka_kategorie = '4' , serialove = novinka_kategorie = '3'

najlepsie by to bolo dostat do jedneho suboru alebo do dvoch ze jedne bude filmový a druhy serialový ale ked to skusam tak vždy rozlodaim kompletne cele ale nijak inak sa mi to nedari sprait, toto co som sem dal mi funguje ale je otravne ked chcem do vypisu doplnit napr.: jednu vec a musim pritom uravit 8 seborov

dakujem velmi by mi to pomohlo , ak treba tu je odkaz aj na zivu stranku : http://www.ncis.projectapo.org/
Stranka sa bude zaoberat tvorbou DVD a Blu-Ray obalov
Tori
Profil
V první řadě je zbytečné pokládat tentýž dotaz pro každé začáteční písmeno. Můžete číst prostě všechny a kontrolovat, jestli aktuální řádek (název filmu nebo co) začíná stejným písmenem jako minulý. Koukněte do FAQ, je to stejný princip.
Celkově se dá kód zkrátit např. takto:
include './hlavicka.php'; // tady bude celé menu, až po řádek 17

// tohle si nastavíte v každém souboru na správné hodnoty
$kategorie = 3;
$podkategorie = 1;

include './vypis.php'; // tady bude SQL dotaz, v němž použijete proměnné $kategorie a $podkategorie, až po řádek 44

include './paticka.php'; // zbytek stránky
Joker
Profil
james2210:
Takže rozdíl je jen v číslu kategorie.

Velmi primitivní, ale funkční řešení by bylo nechat ten kód třeba jen v DVD.php, za řádek 19 (<?php) vložit nové řádky:
if (empty($kategorie)) $kategorie = 4;
if (empty($podkategorie)) $podkategorie = 1;
řádek 24 upravit (uvádím jen část řádku, aby to nebylo tak dlouhé):
… and novinka_kategorie = '" . $kategorie . "' and novinka_podkategorie = '" . $podkategorie . "'");
a v těch zbývajících souborech by pak bylo jen:
<?php
  $kategorie = 4;
  $podkategorie = n;
  include "DVD.php";
?>
kde n je příslušné číslo podkategorie.

Šlo by vymyslet hezčí řešení, ale to bych měl tendenci to celé předělat.
Ten kód celkově není nic moc, mnou uvedené řešení nemá ambici to nějak opravovat, jen řeší problém.
user243
Profil
já bych u řádků 29 - 34 a 36 - 40 použil jen jedno echo;
peta
Profil
Se stringem muzes rovnou pracovat jako s array, pokud tam nemas vic nez 1 znak nebo diakritiku. A tez si to muzes rozsekat po vice znacich http://cz2.php.net/manual/en/function.str-split.php. Vis, jakoze bys tam nemusel mit "A","B","C", ale "ABC".
user243: Ja bych na tech radcich hlavne zadny php kod nemel nez echo $promenna :) Php by se melo zpracovat jeste pred vypisem tagu html. Pak to nezdrzuje vypis.
Joker
Profil
peta:
Ono by dost možná žádné pole (ani řetězec) nebylo potřeba, protože to vypadá, že cílem je abecední řazení záznamů.

V tom případě by prostě jen stačilo vybrat záznamy z tabulky seřazené abecedně (ORDER BY novinka_nazov), v nějaké proměnné mít uložené první písmeno minulého záznamu a pokud by u aktuálního bylo jiné (tj. jsem na předělu písmen), vypsat hlavičku pro dané písmeno.
Tím by odpadl ten vnější cyklus a místo 26 SQL dotazů by se dělal jeden.
james2210
Profil
Problem som vyriesil tak ako ho popisuje Joker dakujem vsetkym za pomoc a mozno casom to este prepisem uplne inak ale momentalne mi to vyhovuje tak ako je to teraz.

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