NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Postupný výpis seznamu v rámci jedné stránky

V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Lucyk
Člen
Avatar
Lucyk:23.10.2016 6:01

Prosím o pomoc s následujícím spojením více částí kódu.

Snažím se na stránky vytvořit postupný výpis seznamů, který by měl plnit následující účel:

Při najetí na stránky se zobrazí seznam
1994-95 - Czech BOOK
1995-96 - Czech BOOK
1996-97 - Czech BOOK
1997-98 - Czech BOOK
1997-98 - Czech CD
1998-99 - Czech CD
1999-00 - Czech CD

Když uživatel klikne na 1994-95 Czech BOOK, tak mu vyjede podseznam:
1994-95 - Czech BOOK - Kids
1994-95 - Czech BOOK - Woman
1994-95 - Czech BOOK - Man

A pokud klikne na 1994-95 - Czech BOOK - Kids, tak mu vyjedou už např. samotné tituly:
1994-95 - Czech BOOK - Kids - Title 1
1994-95 - Czech BOOK - Kids - Title 2
1994-95 - Czech BOOK - Kids - Title 3
1994-95 - Czech BOOK - Kids - Title 4
1994-95 - Czech BOOK - Kids - Title 5
1994-95 - Czech BOOK - Kids - Title 6

Strukturu tabulek mám následující:

TABULKA ROK

id_rok nazev
1 1994-95
2 1995-96
3 1996-97
4 1997-98
5 1998-99
6 1999-00

TABULKA KATEGORIE

id_kategorie nazev_kategorie
1 BOOK
2 CD
3 DVD

TABULKA PODKATEGORIE

id_podkategorie nazev_podkategorie id_rok id_kategorie
1 Kids    
2 Woman    
3 Man    

TABULKA Jednotlive tituly

id_titul id_podkategorie jmeno prijmeni nazev_titulu
1        
2        

Vše bych chtěla optimalizovat tak, aby se odehrávalo na jedné stránce, např. test.php, neboť se seznam může měnit a chtěla bych se vyhnout tomu, aby pro každou kategorii byla vytvořena samotná stránka např. web.cz/1994-95-Czech-BOOK.php a v budoucnu mít xx stránek.

Podařilo se mi vytvořit dva kódy, které by tomuto mohly odpovídat, ale už si nevím rady s tím, jak je propojit do "cyklu".

O první dva výše uvedené případy (seznam + podseznam) se stará tato část kódu:

<?php
if (isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING'])){
    $nazev = $_SERVER['QUERY_STRING'];
    $nazev_kategorie = $_SERVER['QUERY_STRING'];
    $serie = str_replace(array('%20', '&'), ' ' , $_SERVER['QUERY_STRING']);

    $databaze="XXX";
    $spojeni=mysql_connect("XXX","XXX","XXX");

    $co="(XXX)";

    mysql_select_db("XXX") or die( mysql_error() );
    $navrat=mysql_query($co, $spojeni) or die(mysql_error());

    echo ("<h3><center>vybral jsi --- $serie</center></h3>");

    while (list($nazev,$nazev_kategorie,$nazev_podkategorie) = mysql_fetch_row($navrat)){
        echo ("<a href=\"test.php?$nazev&$nazev_kategorie&$nazev_podkategorie\"><b></b>$nazev - $nazev_kategorie - $nazev_podkategorie</a></br>");
        }
    }
    else {
        error_reporting(E_ALL);
        $localhost = "XXX";
        $user = "XXX";
        $password = "XXX";
        $databaze = "XXX";

        mysql_connect($localhost, $user, $password)
                     or die("Nepodařilo se připojit k databázi");
        mysql_select_db($databaze)
                       or die("Nepodařilo se zvolit databázi");

        $databaze="XXX";
        $spojeni=mysql_connect("XXX","XXX","XXX");
        $co="(XXX)";

        mysql_select_db("XXX") or die( mysql_error() );

        $navrat=mysql_query($co, $spojeni) or die(mysql_error());

        while (list($nazev,$nazev_kategorie) = mysql_fetch_row($navrat)){
            echo ("<a href=\"test.php?$nazev&$nazev_kategorie\"><b></b>$nazev - $nazev_kategorie</a></br>");
        }
    }
?>

Tzn. po najetí na stránku test.php se automaticky zobrazí základní první seznam a pokud bude uživatelem kliknuto na určitý název, tak se zobrazí "podseznam" a k této podmínce "podseznamu" nevím, jak zapracovat následující část kódu, která samostatně funguje:

<?php
if (isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING'])){
    $nazev = $_SERVER['QUERY_STRING'];
    $nazev_kategorie = $_SERVER['QUERY_STRING'];
    $nazev_podkategorie = $_SERVER['QUERY_STRING'];
    $vypisuj = str_replace(array('%20', '&'), ' ' , $_SERVER['QUERY_STRING']);

    $databaze="XXX";
    $spojeni=mysql_connect("XXX","XXX","XXX");

    $co="(XXX)";

    mysql_select_db("XXX") or die( mysql_error() );
    $navrat=mysql_query($co, $spojeni) or die(mysql_error());

    echo ("<h3><center>vybral jsi --- $vypisuj</center></h3>");

    while (list($nazev,$nazev_kategorie,$nazev_podkategorie,$title) = mysql_fetch_row($navrat)){
        echo ("<a href=\"test.php?$nazev&$nazev_kategorie&$nazev_podkategorie\"><b></b>$nazev - $nazev_kategorie - $nazev_podkategorie - $title</a></br>");
        }
    }
    else {
        PODMINKA KDYZ TO NEBUDE SPLNENO, treba opet zobrazeni hlavniho seznamu
    }
?>

Četla jsem i pár návodů na stromový výpis, ale vždy jsem to viděla pouze v souvislosti při tvoření mapu stránek a ani jsem nedokázala rozklíčovat, jak použít ke svým tabulkám category parent a children.

Děkuji za každou radu či návrh, jak byste to vyřešili.

 
Odpovědět
23.10.2016 6:01
Avatar
Vladislav Domin:23.10.2016 10:59

chtěla bych se vyhnout tomu, aby pro každou kategorii byla vytvořena samotná stránka např. web.cz/1994-95-Czech-BOOK.php a v budoucnu mít xx stránek.

  • Co tak pouzit $_GET?

V praxi by to bolo cca taketo nieco web.cz/index.php?rok=1&k­at=1& ....

rok = id_rok
kat = id_kategoria

nasledne mozes s premennymi pracovat:

if(isset($_GET['r­ok']) && isset($_GET['k­at']))
{
// tu uz si urobis, co sa ma stat ak maju premenne v linku nejaku hodnotu
}

Poviem pravdu, ze necital som to cele len zaciatok, ale riesil by som to asi takto nejak

 
Nahoru Odpovědět
23.10.2016 10:59
Avatar
Lucyk
Člen
Avatar
Odpovídá na Vladislav Domin
Lucyk:27.10.2016 4:06

Neměl by jsi prosím nějakou stránku, kde by byl tento způsob použit a vysvětleno jak funguje $_GET? Marně se snažím najít nějaký návod jak to implementovat k url adresám, resp. pochopit jak to funguje, ale vždy to je pouze v souvislosti s formuláři.

Nemůžu přijít na to, jak to zakomponovat do svého kódu.

Editováno 27.10.2016 4:08
 
Nahoru Odpovědět
27.10.2016 4:06
Avatar
Adam Ježek
Tvůrce
Avatar
Odpovídá na Lucyk
Adam Ježek:27.10.2016 8:56

$_GET je celkem jednoduchý. Máš URL na nějakou stránku, dejme tomu,

mojestranky.cz/index.php

.
A teď budu chtít do URL přidat nějaký parametr, dejme tomu, že id něčeho. Takže za konec URL připíšu otazník, název parametru a jeho hodnotu. Takto.

mojestranky.cz/index.php?id=1

Jednotlivé parametry pak jsou ve slovníku $_GET, a přistupuješ k nim podle jejich názvu. Nyní v index.php můžeš udělat následující:

if( isset($_GET["id"])) { //zjistíš, jestli parametr existuje. pokud ano, vrátí se true
        $id = $_GET["id"]; //pokud existuje, můžeš k ní bezproblémů přistupovat

Pokud potřebuješ parametrů víc, oddělíš je znakem &, např

mojestranky.cz/index.php?id=1&kategorie=deti&rok=2010

Pokud takhle vygeneruješ link a přes <a> ho dosadíš k něčemu, uživatel na to klikne, aniž by se musel o něco zajímat, a ty v kódu víš, na co kliknul.

Nahoru Odpovědět
27.10.2016 8:56
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
Odpovídá na Lucyk
Vladislav Domin:27.10.2016 9:18

Ešte by som ti poradil, aby si nepoužívala zastaralý MySQL driver - "mysql_" - v PHP 7 už je dokonca aj vymazaný ak sa nemýlim. Odporúčam ti pokiaľ si začiatočníčka, tak používať PDO, tu na itnetworku je dokonca urobená trieda na použitie PDO, ktorá je veľmi jednoduchá na použitie. Alebo ak nechceš zmenu, tak môžeš kľudne pracovať s "mysqli_"

Tieto linky by ti mohli pomôcť:

http://www.w3schools.com/…_connect.asp
http://www.w3schools.com/…rglobals.asp
http://www.itnetwork.cz/php/databaze

 
Nahoru Odpovědět
27.10.2016 9:18
Avatar
Lucyk
Člen
Avatar
Lucyk:28.10.2016 14:56

Tak jsem se v tom trochu ztratila, neboť nevidím, že když použiju $_GET, tak to vyřeší můj dotaz.

O zobrazení hlavního seznamu se stará tento kód

$databaze="XXX";
        $spojeni=mysql_connect("XXX","XXX","XXX");
        $co="(XXX)";

        mysql_select_db("XXX") or die( mysql_error() );

        $navrat=mysql_query($co, $spojeni) or die(mysql_error());

        while (list($nazev,$nazev_kategorie) = mysql_fetch_row($navrat)){
            echo ("<a href=\"test.php?$nazev&$nazev_kategorie\"><b></b>$nazev - $nazev_kategorie</a></br>");
        }

Takže k echo mám dopsat parametry?

echo ("<a href=\"test.php?rok=$nazev&kategorie=$nazev_kategorie\"><b></b>$nazev - $nazev_kategorie</a></br>");

A potom použiju

if(isset($_GET['rok']) && isset($_GET['kategorie']))
{
a zde napisu znovu ECHO pro zobrazeni seznamu, nebo uz pro podseznam?
}

Pro podseznam mam tento kod:

if (isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING'])){
    $nazev = $_SERVER['QUERY_STRING'];
    $nazev_kategorie = $_SERVER['QUERY_STRING'];
    $serie = str_replace(array('%20', '&'), ' ' , $_SERVER['QUERY_STRING']);

    $databaze="XXX";
    $spojeni=mysql_connect("XXX","XXX","XXX");

    $co="(XXX)";

    mysql_select_db("XXX") or die( mysql_error() );
    $navrat=mysql_query($co, $spojeni) or die(mysql_error());

    echo ("<h3><center>vybral jsi --- $serie</center></h3>");

    while (list($nazev,$nazev_kategorie,$nazev_podkategorie) = mysql_fetch_row($navrat)){
        echo ("<a href=\"test.php?$nazev&$nazev_kategorie&$nazev_podkategorie\"><b></b>$nazev - $nazev_kategorie - $nazev_podkategorie</a></br>");
        }
    }

Bude to tak správně?

if(isset($_GET['rok']) && isset($_GET['kategorie']))
{
        echo ("<a href=\"test.php?rok=$nazev&kategorie=$nazev_kategorie&podkategorie=$nazev_podkategorie\"><b></b>$nazev - $nazev_kategorie - $nazev_podkategorie</a></br>");
}

A pro zobrazeni konkrétního titulu, pak bude podmínka

if(isset($_GET['rok']) && isset($_GET['kategorie'] && isset($_GET['podkategorie']))
{
        ECHO zobrazeni titulu?
}

A ted když mám 3 podmínky, tak už je jenom dám do cyklu?
Např.

  1. Zobraz seznam
  2. Když klikneš na podseznam, tak zobraz podseznamy, nebo zobraz seznam a když klikneš na podseznam vypiš tituly.
 
Nahoru Odpovědět
28.10.2016 14:56
Avatar
Lucyk
Člen
Avatar
Odpovídá na Vladislav Domin
Lucyk:28.10.2016 15:01

o PDO jsem už četla a že zápisy, které používám jsou už zastaralé, ale ve škole jsem se učila právě tuto variantu a snažím se ji nějak využít v rámci vlastního projektu, na kterém bych se chtěla databáze/progra­mování naučit používat. Neboť ve škole jsem vždycky co se týká programování/da­tabází měla jen teorii, ale praxi, resp. ukázka použití v reálu byla vždy nulová.

Navíc nevím, jestli by bylo ideální se nyní začít učit PDO, když i ještě ve starém způsobu programování tápu a mám určité nedostatky.

Ale také si říkám, že jakmile by se mi podařilo tohle zrealizovat, že bych později nastudovala PDO a přepsala to do této podoby.

Editováno 28.10.2016 15:02
 
Nahoru Odpovědět
28.10.2016 15:01
Avatar
Odpovídá na Lucyk
Michal Štěpánek:28.10.2016 20:12

Dle mého názoru je zbytečné se učit něco, co už se nemá používat a pak se "to" přeučovat podle nových "regulí". Navíc si myslím, že by tě to v učení se nových věcí i mohlo mást a svádět ke špatnému způsobu programování. Začni rovnou s učením PDOčka a se starým způsobem neztrácej čas...

Nahoru Odpovědět
28.10.2016 20:12
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Lucyk
Člen
Avatar
Odpovídá na Michal Štěpánek
Lucyk:30.10.2016 17:26

Ano, souhlasím, ale když nepochopím, resp. se mi nedaří najít vhodné návody na mysql, tak na PDO už to tuplem nenajdu.

Všichni říkají, že je to obdoba, ale marně se snažím najít, jaké všechno změny bych musela udělat ve svém stávajícím kódu, aby odpovídal PDO.

Zkoušela jsem se dívat např. na $_GET a použití v PDO a nikde nic.

Tímto bych se asi nikam nepohnula a nerada bych stála se svým "programováním" na mrtvém bodě, než bych nějaký vhodný návod na přepis našla, neboť na internetu mi přijde, že zatím PDO není moc rozšířené , resp. se o něm moc nepíše :(

 
Nahoru Odpovědět
30.10.2016 17:26
Avatar
Odpovídá na Lucyk
Michal Štěpánek:30.10.2016 17:37

Třeba tady na itnetworku je na to seriál. Já sice PHP nedělám, snažím se tvořit v ASP.NET, ale z vlastní zkušenosti vím, že když se něco "naučíš po staru" blbě se to přeučuje "do nového" a pořád do toho nového budeš tahat špatné staré návyky... Učil jsem se C# winforms a po přechodu na WPF tam dodnes používám blbosti, které jsem se naučil ve WF...

Nahoru Odpovědět
30.10.2016 17:37
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Lucyk
Člen
Avatar
Lucyk:17.11.2016 14:49

Prosím, dokázal by někdo poradit, jak to máte řešené, příp. dát nějakou ukázku? Nenapadá mě, jak to mám vyřešit.

Nechce se mi věřit, že by všichni měli třeba 100 stejných stránek akorát na každé z nich jiný obsah, určitě se to musí jít nějak dát do cyklu a aby se to odehrávalo v rámci jedné stránky :(

Děkuji.

 
Nahoru Odpovědět
17.11.2016 14:49
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.