« 1 2 »
Autor Zpráva
Tomáš123
Profil
Pekný podvečer,
Potreboval by som aktualizovať články v navigácii. Malo by ísť o niečo ako systém noviniek. Pokúsim sa vysvetliť o čo mi ide:
Namiesto nutnosti pridania odkazu na dokončený článok manuálne, by som chcel, aby sa po pribudnutí súboru v kategórii a znovu načítaní stránky načítal sám a ako názov v odkaze sa uviedol údaj v priloženom textovom súbore s názvom rovnakým ako je názov nového súboru.
Štruktúra súborov je podobná tejto:
1. html
    2. pg1.php
    2. pg1.txt
    2. pg2.php
    2. pg2.txt
    2. html.php (ak nie je špecifikovaný článok)
1. css
1. index.php (skript)
1. default.php (domovská stránka)
1. error.php (chybové hlásenie o neexistujúcej stránke)

Odkaz na článok by v tomto prípade mal vyzerať nejako takto:
<a href="index.php?cat=html&page=2">Názov novo pribudnutého článku</a>

Vedeli by ste mi pre začiatok pomôcť odkazmi na funkcie, ktoré na niečo také budú potrebné? Hlavne, ako zistiť, či pribudol v danom adresári pribudol nejaký súbor? Je potrebné ukladať stavy a počty súborov do iného súboru, alebo sa to dá aj pohodlnejšie?

Ďakujem vopred veľmi pekne za odpovede
Hando
Profil
Proč, proboha, tak složitě?
Co ti brání v použití databáze? Uložit si článek, název, kategorie a všechno potřebné (včetně třeba rozlišení dokončený/nedokončený článek) a následně si to pohodlně vydolovat dotazem na databázi, to je asi nejpohodlnější řešení.
Nebo k tomuhle řešení máš nějaký důvod?
Tomáš123
Profil
Hando:
Nebo k tomuhle řešení máš nějaký důvod?
Neviem pracovať s databázou. Už mi príde trápne si stále stáť za názorom, že sa chcem najprv naučiť PHP a až potom začať s MySQL. Nejedno mnou vytvorené vlákno už bolo kritizované za zbytočnú zložitosť. Poznáte nejaký kvalitný zdroj na tému ako spustiť MySQL? Posledne som to vzdal, kvôli nemožnosti pripojenia sa do PhpMyAdminu.
Fisir
Profil
Reaguji na Tomáše123:
Stáhni si nějaký balíček WWW serveru a MySQL (VAMP, XAMPP, Vertrigo, …).
lionel messi
Profil
Tomáš123:
Neviem pracovať s databázou.
Chápem, úplné začiatky sú fakt náročné, ale oplatí sa to, viem o čom hovorím.

Poznáte nejaký kvalitný zdroj na tému ako spustiť MySQL?
Dobré české zdroje sú na itnetwork.cz:
Databáze v PHP pro začátečníky — vysvetľuje, ako v PHP pracovať s MySQL + základy jazyka SQL

MySQL databáze krok za krokem — pravdepodobne najpodrobnejší český zdroj o SQL, nevenuje sa práci s db pomocou PHP

Čo sa týka anglických zdrojov o SQL, mám dobrú skúsenosť s učebnicami od vydavateľstva O'Reilly (bohužiaľ nepoznám CZ/SK názvy, čítal som anglické originály):

Russel Dyer: MySQL in a Nutshell (prehľad funkcii SQL jazyka, nevenuje sa práci s db pomocou PHP)
Alan Beaulieu: Learning SQL (veľmi podrobná učebnica SQL jazyka s príkladmi, nevenuje sa práci s db pomocou PHP)

Čo sa týka inštalácie ťa dobre nasmeroval Fisir.
Alphard
Profil
Tomáš123:
Už mi príde trápne si stále stáť za názorom, že sa chcem najprv naučiť PHP a až potom začať s MySQL.
Jen tak pro informaci, byť je použití databáze v tomto případě nejjednodušší, zkusit si naprogramovat to přes soubory by bylo (pro budoucího programátora) užitečné také.
Až se dostanete k tomu, že budete chtít stránkovat apod., bude to už horší, ale současný požadavek vidím cca na 10 řádků kódu.
jenikkozak
Profil
Tomáš123:
Pokud bych z nějakého důvodu nechtěl nebo nemohl využít databázi, uložil bych si údaje o všech souborech do jediného dokumentu, abych při automatickém sestavování menu nemusel prohledávat adresář a číst v něm spoustu .txt souborů. To znamená, že všechny názvy stránek a odkazy na soubory by byly umístěné v jediném souboru, kde by byly oddělené třeba středníkem.
Tomáš123
Profil
Alphard:
zkusit si naprogramovat to přes soubory by bylo (pro budoucího programátora) užitečné také.
Takto som to myslel. Som rád, že sa na to niekto pozerá aj z môjho pohľadu. Viem, že databáza je veľmi užitočná, ale keďže ešte poriadne neovládam ani PHP, nechcem skákať do príliš hlbokej vody. Už som zistil, že programovanie je oveľa iné ako kódovanie, preto by som na to rád pomaly a postupne.

Až se dostanete k tomu, že budete chtít stránkovat apod., bude to už horší, ale současný požadavek vidím cca na 10 řádků kódu.
Vôbec nemusíme riešiť, čo ešte nie je. Všetky tieto zadania si vytváram sčasti ako praktické skúšky (keďže väčšina odkázaných stránok vyžaduje poznať príkazy a funkcie, mám iba malú šancu splniť to) a sčasti ako naozaj potrebné skripty. Času mám dosť, a rád si vytvorím skript aj na trikrát ak to bude potrebné.

Mohli by sme sa teda presunúť k pôvodnej otázke [#1]. Nechcem riešenie, chcem sa potrápiť, vytvoriť si niečo sám a potom riešiť chyby. Dúfam, že pre nikoho nie je môj prístup otravný.

jenikkozak:
uložil bych si údaje o všech souborech do jediného dokumentu
Pomocou funkcií *_dir?

Teda overovať existenciu adresárov a súborov a ak existujú zapisovať ich do iného súboru?
Alphard
Profil
V náznaku
$files = ['a.php', 'b.php', 'c.php']; // tohle pole získáte třeba funkcí glob()
foreach ($files as $file) {
  $headerFile = str_replace('.php', '.txt', $file);
  $header = file_exists($headerFile) ? file_get_contents($headerFile) : 'Neznamy titulek';
  echo '<a href="'.$file.'">'.$header.'</a><br>'.PHP_EOL;
}

Ještě sem hodím verzi seskupující soubory stejného názvu do pole, takový algoritmus se taky často hodí
$files = ['a.php', 'b.php', 'a.txt', 'b.txt', 'c.php', 'c.txt'];
$menu = [];
foreach ($files as $file) {
  $lastDot = strrpos($file, '.');
  $menu[substr($file, 0, $lastDot)][substr($file, $lastDot+1)] = $file;
}
foreach ($menu as $item) {
  echo '<a href="'.$item['php'].'">'.$item['txt'].'</a><br>'.PHP_EOL;
}

jenikkozak zřejmě myslel vytvořit soubor s popisky
a.php::O revoluci
b.php::Vliv djpw na moderni spolecnost
c:php::Hledejme rezervy sami v sobe

a pak ho jen vypsat
$items = file('headers.txt', FILE_IGNORE_NEW_LINES);
foreach ($items as $item) {
  list($file, $header) = explode('::', $item);
  echo '<a href="'.$file.'">'.$header.'</a><br>'.PHP_EOL;
}
Tomáš123
Profil
Alphard:
V náznaku
Vaše kódy sú priveľmi zložité. Ten ktorý ste napísali v mene jenikakozaka sa mi celkom páči, ale musel by som pridať článok a potom do súboru pridať popis (s mojimi znalosťami si nemôžem veľmi vyberať, ale predsa som to skúsil). Rozmýšľal som, ako to zautomatizovať a napadlo mi vytvárať články priamo na webe.

V náznaku:
HTML:
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Pridávanie článkov</title>
    </head>
    <body>
        <form action="processing.php" method="POST">
            <table>
                <tr>
                    <td align="right"><b>Nadpis článku v odkaze:</b></td>
                    <td><input type="text" name="headline"></td>
                </tr>
                <tr>
                    <td align="right"><b>Kategória:</b></td>
                    <td><select name="cat">
                        <option value="html">HTML</option>
                        <option value="css">CSS</option>
                        <option value="about">O webe</option>
                    </select></td>
                </tr>
                <tr>
                    <td></td>
                    <td><textarea name="content"></textarea></td>
                </tr>
                <tr>
                    <td></td>
                    <td><input type="submit"></td>
                </tr>
            </table>
        </form>
    </body>
</html>

PHP:
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Pridávanie článkov</title>
    </head>
    <body>
<?php
    if (isset($_POST['headline'], $_POST['cat'], $_POST['content'])) {
        $headline = $_POST['headline'];
        $cat = $_POST['cat'];
        $content = $_POST['content'];
        $file = "content/data.txt";
        $dir = $cat."/".$headline.".txt";
        if (!file_exists($dir)) {
            if ($fp = fopen($dir, 'w')) {
                fwrite($fp, $content);
                fclose($fp);
                echo "<p>Obsah článku bol úspešne zapísaný.</p>";
                if ($fp = fopen($file, 'a+')) {
                    $data = $cat."::".$headline .PHP_EOL;
                    fwrite($fp, $data);
                    fclose($fp);
                    echo "<p>Údaje boli úspešne zapísané.</p>";
                }
                else {
                    echo "<p>Nepodarilo sa zapísať údaje o článku.</p>";
                }
            }
            else {
                echo "<p>Nepodarilo sa uložiť článok.</p>";
            }
        }
        else {
            echo "<p>Súbor s daným názvom už existuje.</p>.";
        }        
    }
    else {
        echo "<p>Ak chcete pridať článok, musíte vyplniť všetky formulárové polia.</p>";
    }
?>
    </body>
</html>

Informácie o článkoch mi to zapisuje do dvoch súborov. Do jedného kategóriu a nadpis a do druhého samotný obsah z textarey. Takto by sa dal celý proces natoľko vylepšiť, že HTML stránky, by sa generovali zo súborov podľa kategórii a nadpisu článku a obsahu:
Odkaz na stránku je napríklad index.php?cat=css&page=float. Skript by prešiel súbory a v prípade, že by našiel zhodu (ako už podotkol jenikkozak, asi by bolo lepšie držať všetko v jednom súbore, no neprišiel som na riešenie), vypísal by sa do pripravenej šablóny (štruktúra, hlavička, menu a päta sa nemení) požadovaný text zo súborov.
Pravdepodobne je toto riešenie nad moje sily (na ostrú prevádzku bude potrebná minimálne zabezpečenie registrácie a súborov => všetko vedie ku databázam), ale aj tak by som si to chcel skúsiť na neoficálnô. Bol by som rád, ak by ste naviedli na správnu cestu. Je podľa vás možné vytvoriť niečo podobné s mojimi aktuálnymi vedomosťami? Akým spôsobom oddeliť jednotlivé články ak by boli uložené v jednom súbore (alebo bude lepšie články uložiť akoby boli webové stránky s tým, že vymením príponu za .txt)?

Vopred ďakujem.
Tomáš123
Profil
Za tých 5 dní, čo sem nikto neprispel, sa mi podarilo vymyslieť, ako vyššie uvedený problém aspoň sčasti vyriešiť.
Pozrite si živú ukážku stránky a skúste si do niektorej kategórie pridať súbor a následne zobraziť. Ak chcete vidieť súbor, z ktorého budem ťahať údaje na vykreslenie menu, po zobrazení vymeňte názov súboru za reťazec "data.txt". Súbor s týmto názvom sa nachádza v každej kategórii, ktorá disponuje aspoň jedným článkom (vytvorí sa, až keď je potrebný).

S výsledkom som celkom spokojný, ale má pár otázok:
1) Keďže názov súboru nemôže obsahovať diakritiku, mením ho cez funkciu str_replace() (pozrite kód dole). Síce som videl kód ako z reťazca odstrániť všetky znaky s diakritikou, ale Jan Tvrdík píše, že to s kódovaním UTF-8 fungovať nebude (predposledný ad). Ako teda odstrániť diakritiku z nadpisu článku?

2) Druhý problém sa týka kódovania novo vytvoreného súboru. Diakritika sa nevykresľuje. Aj tuším v čom je problém, ale nenapadá ma elegantnejšie riešenie, ako na začiatok reťazca, ktorý je obsahom súboru natvrdo pridať hlavičku s kódovaním. V budúcnosti budem chcieť obsah súboru vypísať do stránky. Tam by problém nemal pretrvávať, keďže hlavička tam už bude, ale nenapadá mi, ako načítať súbor do vopred pripraveného obsahu.

PHP kód vyzerá takto:
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Pridávanie článkov</title>
    </head>
    <body>
<?php
    if (isset($_POST['headline'], $_POST['cat'], $_POST['content'])) {
        $headline = ($_POST['headline']);
        $name = str_replace(" ","-", $_POST['headline']);
        $cat = $_POST['cat'];
        $content = $_POST['content'];
        $path = $cat."/".$name.".php";
        if (!file_exists($path)) {
            if ($fp = fopen($path, 'w')) {
                if (fwrite($fp, $content)) {
                    echo "<p>Súbor bol úspešne nahraný. Chcete ho <a href=\"".$path."\">zobraziť</a>?</p>";
                }
                else {
                    echo "<p>Do súboru ".$name." sa nepodarilo zapísať obsah.</p>";
                }
                fclose($fp);
            }
            $data = $cat."|".$name."|".$headline .PHP_EOL;
            $file = $cat."/data.txt";
            if ($fp = fopen ($file, 'a')) {
                if (fwrite ($fp, $data)) {
                    echo "<p>Súbor bol úspešne aktualizovaný.</p>";
                }
                else {
                    echo "<p>Do súboru sa nepodarilo zapísať údaje.</p>";
                }
                fclose($fp);
            }
            else {
                echo "<p>Súbor sa nepodarilo otvoriť.</p>";
            }
        }
        else {
            echo "<p>Súbor s názvom ".$name." už existuje v kategórii ".$cat.".</p>";
        }        
    }
    else {
        echo "<p>Musite vyplniť všetky formulárové polia.</p>";
    }    
?>
    </body>
</html>
Zaujíma ma, či pri takomto ukladaní je aspoň malá bezpečnosť, a či účinne zabraňujem prepisovaniu súborov a údajov o nich.
Taktiež budem rád, ak kód skritizujete, ale to len okrajovo.

Vopred veľmi pekne ďakujem.
Marschmallow
Profil
Tomáš123:
Mám několik připomínek:
- Ošetřuj vstupy pomocí htmlspecialchars, mně se třeba podařilo vytvořit stránku s tímto názvem (XSS útok).
- Do textu stránky jsem mohl vložit i PHP kód s echem (<?php echo "Ahoj"; ?>) a bez problému se mi vypíše.
- Pokud soubor pojmenuji s diakritikou, s diakritikou se také uloží. Neměl by.
- Hlavičku s kódováním je zbytečné vkládat již nyní. Stačí, až se soubor bude vypisovat do stránky, které má už kódování definované.

Doufám, že přidávání stránek bude v zaheslované administraci.
Tomáš123
Profil
Marschmallow:
(XSS útok)
Všimol som si, že niekto to tam skúšal JavaScriptom...

Pokud soubor pojmenuji s diakritikou, s diakritikou se také uloží. Neměl by.
Áno, na to som sa o niečo vyššie pýtal [#11].

Doufám, že přidávání stránek bude v zaheslované administraci.
Aj ja. Takúto verziu by som samozrejme nezverejnil, ale administrácia je beh na dlhšiu trať.

Je skript zraniteľný aj pri zadaní JavaSkriptu do textarey? Na ňu totiž nemôžem aplikovať funkciu htmlspecialchars(), lebo potrebujem, aby sa mi HTML značky normálne prejavili, nie len vypísali.

Pribudli ďalšie pokusy s JS a som si istý, že v tvojej réžii. Ako dopadli?
Tomáš123
Profil
Zdravím, včera sa mi podarilo dokončiť skripty, na vytváranie a editáciu článkov. Ešte ich upravím, aby presnejšie vyhovovali potrebám a celkovo tam upracem, dá sa to aj krajšie. Mám však otázky, ktoré sa týkajú hotového riešenia:
Štruktúra môjho webu bude nasledovná:
1. html
    2. nadpis_bez_diakritiky_a_medzier_pre_prvy_clanok.php
    2. nadpis_bez_diakritiky_a_medzier_pre_druhy_clanok.php
    2. nadpis_bez_diakritiky_a_medzier_pre_treti_clanok.php
    2. html.php (ak nie je špecifikovaný článok)
1. css
    2. nadpis_bez_diakritiky_a_medzier_pre_prvy_clanok.php
    2. nadpis_bez_diakritiky_a_medzier_pre_druhy_clanok.php
    2. css.php
/*Niekoľko iných kategórii s rovnakou štruktúrou*/
1. administration
    2. add
        3. nejaky_skript.php
    2. edit
        3. nejaky skript.php
1. index.php (skript)
1. default.php (domovská stránka)
1. error.php (chybové hlásenie o neexistujúcej stránke)

# 1. Generovanie odkazov, vzhľadom na zvolenú kategóriu

Chcel by som automaticky generovať navigáciu pri danej stránke. Mala by sa tvoriť, na základe súborov v danej kategórii. Skrátka všetky súbory, ktoré sa nachádzajú v špecifikovanom adresári. Väčším problémom je, že nemôžem použiť názov článku na obidve časti odkazu. Na zobrazenú časť by som potreboval text s diakritikou. Nechcem to ukladať do databázy, riadim sa Alphardom [#6]. Za normálnych okolností, by som v každom adresári vytvoril súbor s informáciami o danej kategórii. Ale vraj je toto riešenie pomalé... Platí to aj v prípade, že bude vopred špecifikovaný adresár? Nikdy nebude generovaný odkaz viesť z jednej kategórie do druhej, čiže skript nebude musieť hľadať kam sa odkazujem. Bude mu stačiť, iba nájsť údaje o požadovanom článku v súbore a zariadiť, aby sa načítal. Keďže ešte nie som tak ďaleko, (stránky nemám napojené na finálnu verziu), možno sú moje predstavy o zbytočnosti jedného súboru mylné. Ak sú vedeli by ste mi poradiť, kam bude najlepšie ukladať informácie o článkoch?

# 2. Zamedzenie prístupu do zložiek v .htaccess

Vraj jediným spoľahlivým spôsobom ako ochrániť obsah webu založenom na súboroch je zakázanie prístupu pomocou .htaccess... Ako sa niečo také robí?

# 3. Pokročilé odkazovanie

Ako ste si mohli všimnúť v hore uvedenej štruktúre, pri administrácii existujú tri úrovne odkazovania. Teoreticky by stačilo na začiatok každého reťazca s cestou ku požadovanému súboru pripísať ../../, aby som sa dostal na prvú úroveň. Ale nikdy neviem, aké situácie môžu nastať a takéto manuálne písanie ciest sa mi nepozdáva. Bolo by ideálne, ak by sa všetko generovalo. Poznáte nejaký spôsob, ako pri odkazovaní zautomatizovať posun cez úrovne? Alebo bude lepšie zmeniť štruktúru administrácie? Bol by som rád, ak by aj administrátor mal pohodlie odkazovania. Teda zvolím administráciu a v ľavom paneli sa mi objaví odkaz na pridanie, upravenie a vymazanie článku podľa jednotky. Jednotka, by mala fungovať úplne všade.

Lámem si hlavu na dokonalým vymyslením administrácie, ale neviem prísť na nič chytrejšie, ako súčasná verzia (tá hore je už neaktuálna, ale radšej neodkazujem). Každým skriptom je to o niečo zložitejšie. Už sa mi pomaly začína zdať, že je ťažšie funkcionalitu vymyslieť, ako vytvoriť. Preto, prosím skúsenejších o pomoc... Aké usporiadanie zvoliť?

Budem veľmi vďačný za každú radu. Teraz mi naozaj príde vhod.

Je ešte potrebný odkaz na testovaciu verziu. Pár ľudí sa už nudí a využíva príkladový materiál na zábavu. Ak ho už nepotrebujete, prosím moderátora, aby odkázanie vymazal.
Marschmallow
Profil
2.) Zákaz přístupu do dané složky „zvenčí“ jde samozřejmě pomocí .htaccess. Stačí ho vložit do složky, kam chceš zakázat přístup a vložit do něj jediný řádek: deny from all. Více se dozvíš v tomhle článku.

3.) Tak nepoužívej relativní odkazování (../adresar/soubor.php), ale odkazování absolutní. Tím myslím třeba http://domena.cz/adresar/soubor.php.
Tomáš123
Profil
Marschmallow:
tak nepoužívej relativní odkazování
Nepáči sa mi, že si môže užívateľ prečítať, kam vedie odkaz. Ak by viedol do temnôt administrácie a užívateľ by bol jeden zo skúsenejších, mohol by som to oľutovať.
Marschmallow
Profil
Tomáš123:
Nepáči sa mi, že si môže užívateľ prečítať, kam vedie odkaz.
A proč by jako nemohl? Vždyť se to po kliknutí stejně dozví... Nebo jsi spammer :D - ... jen spammeři mají důvod zakrývat skutečný cíl odkazu.
Tomáš123
Profil
Marschmallow:
Vždyť se to po kliknutí stejně dozví
Asi áno, ale nebude mi to fungovať všade. Dané riešenie bude závisieť od domény a ak ju budem meniť, čo s najväčšou pravdepodobnosťou budem, budem musieť aj prepisovať celý skript. Ja chcem vytvoriť univerzálne riešenie.

Nebo jsi spammer
Myslím, že toto s tým momentálne absolútne nesúvisí. Odkázaný článok je určený na iné použitie.

3. Pokročilé odkazovanie
Napadlo mi, pozmeniť štruktúru, aby bol počet úrovní všade rovnaký. V hre sú dve alternatívy (platná môže byť iba jedna z nich):
1. Všetky obsahové adresáre, teda všetko okrem administrácie hodiť do adresáru categories.
2. Všetky podadresáre adresáru administration vyhodiť (add, edit) a nechať ich spolu v adresári administration (mohlo by byť výhodou pri odkazovaní na súbor s informáciami).

Ktoré riešenie je lepšie?
Tomáš123
Profil
Ahoj, rád by som vypísal obsah adresárov, ale akosi to nejde podľa mojich predstáv. Vypísať súbory s príponou .php z konkrétneho adresára podľa parametru v adrese mi celkom ide, kód vyzerá takto:
<?php
    $files = scandir($_GET['section']);
    foreach ($files as $file)
    {
        $new_file_name = str_replace ('.php', '', $file);
        echo "<li><a href=\"index.php?section=".$_GET['section']."&page=".$new_file_name."\">".$file."</a></li>";
    }
?>    

Problém je, že na začiatok výpisu sa mi stále pridajú dve položky s hodnotami "." a "..". Neviem ako sa toho zbaviť.

Čo sa mi však nedarí vôbec je výpis (iba) adresárov na hlavnej úrovni. Skúšal som to pomocou funkcie glob(). Ako teda vypísať všetky adresáre na úrovni? Nepomohol mi ani parameter GLOB_ONLYDIR. Chcel by som do poľa uložiť názvy všetkých adresárov na hlavnej úrovni a podľa nich vytvárať odkazy (pričom využijem, že predvolený súbor, ktorý sa načíta ak nie je vyplnený druhý parameter v adrese má rovnaký názov ako je názov adresára v ktorom sa nachádza). Viete mi nejako pomôcť, čítal som Alphardov článok i dokumentáciu ku daným funkciám.
Fisir
Profil
Reaguji na Tomáše123:
na začiatok výpisu sa mi stále pridajú dve položky s hodnotami "." a "..". Neviem ako sa toho zbaviť.
Podmínkou?
foreach ($files as $file){
  if($file !== '..' or $file !== '.'){
        $new_file_name = str_replace ('.php', '', $file);
        echo "<li><a href=\"index.php?section=".$_GET['section']."&page=".$new_file_name."\">".$file."</a></li>";
  }
}

. označuje aktivní adresář a .. nadřazený.
Tomáš123
Profil
Fisir:
Ďakujem, vedel by si mi ešte napísať, ako vypíšem iba adresáre na hlavnej úrovni?
Fisir
Profil
Reaguji na Tomáše123:
Adresáře? Ne soubory?

if(!strpos($file, '/') and is_dir($file))
Tomáš123
Profil
Fisir:
Ne soubory?
Súbory vhodné pre odkázanie tam vlastne ani nemám [#1]. Nerozumiem uvedenej podmienke (môžeš prosím napísať slovami, o čom tam ide?)... Nepoužívam funkciu glob(), čiže uvedené lomítko sa tam neukáže nikdy, či nie? Alebo práveže mám začať používať glob()?
Kubo2
Profil
Tomáš123:
To s tým lomítkom máš pravdu, stačí použiť samostatne is_dir() (Fisir strpos() zrejme použil kvôli zníženiu časovej náročnosti skriptu a uvedenú skutočnosť prehliadol).

scandir() ti k uvedeným veciam nestačí? Čo som pozeral k nej dokumentáciu, zdá sa, že ti vráti iba odtlačok zadaného adresára, odkiaľ si zanorené adresáre vyfiltruješ už jednoducho.
Tomáš123
Profil
Kubo2:
že ti vráti iba odtlačok zadaného adresára
Vráti iba názvy súborov v adresári. Potreboval by som získať názvy adresárov na hlavnej úrovni s tým že odkaz <a> by vyzeral nejako takto:
echo "<a href=\"".$nazov_adresara."/".$nazov_adresara.".php\">".$nazov_adresara."</a>";
Fisir
Profil
Co se týče lomítka, je to blbost, protože jsem si myslel, že scandir() vypíše i zanořené objekty. Což nedělá. Takže strpos() se z podmínky může vyhodit. Funguje to teda, jak má, nebo ne? Já to totiž moc nechápu. Tomáši123, načrtni prosím ukázkovou stromovou strukturu a označ, co z toho chceš vytáhnout.
Tomáš123
Profil
Fisir:
načrtni prosím ukázkovou stromovou strukturu
Iste:
URL adresa na hlavnej úrovni vyzerá takto: www.mojadomena.sk, za adresou sa nenachádza žiadny parameter. Spolu s indexom sa na tejto úrovni nachádza ešte niekoľko adresárov, viď nasledujúcu štruktúru:
css
  > súbory
  css.php
html
  > súbory
  html.php
php
  > súbory
  php.php
index.php
error.php
default.php
Z tejto štruktúry chcem vypísať názvy kategórii (ak to bude jednoduchšie, tak pokojne aj názvy súborov (ktoré sú rovnaké) bez prípony) s tým, že odkaz bude viesť na súbor vo vnútri adresára. Chcel by som, aby URI nevyzeralo /html/html.php, ale index.php?category=php. Skript v indexe sa stará o to, aby v sa v situácii keď nie je uvedený druhý parameter (plná adresa vyzerá index.php?category=kategoria&page=nazov-stranky) odkázal na súbor, ktorý má taký istý názov ako je názov kategórie. Ak neexistuje, načíta sa error.php.

Potrebujem vlastne generovať odkazy z hlavnej stránky na podkategórie.
Fisir
Profil
Reaguji na Tomáše123:
Takže takhle (index.php)?

$items = scandir(__DIR__);
foreach($items as $item){
    if(($item !== '..' or $item !== '.') and is_dir($item)){
        echo('<a href="/?category='.urlencode($item).'">'.htmlspecialchars($item).'</a>');
    }
}

Nebylo by od věci použít databázi.
Marschmallow
Profil
Fisir:
Nebylo by od věci použít databázi.
Tomáš123 se zatím chce naučit hlavně práci se soubory. Proto si vytváří také svůj vlastní RS.
Tomáš123
Profil
Fisir:
Ďakujem, všetko mi funguje. Chcel by som sa opýtať, načo si použil htmlspecialchars() a urlencode(), keď minimálne to prvé nie je potrebné. Veď zložky pomenúvam ja a html značky tam nedávam. Urlencode() je pre mňa nová funkcia, teda som si o nej prečítal v manuáli... Jej úlohou je všetky znaky okrem - a _ previesť na entity, nie. Ako to, že ju tam nepotrebujem?
« 1 2 »

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0