Autor Zpráva
Tomáš123
Profil
Zdravím,
Potreboval by som pomoc s načítavaním dát zo súboru. Vkladanie do súboru zvládnem vyrobiť. V skratke pôjde o niečo takéto:
1) Užívateľ vloží do formulára nejaký vstup.
2) Overí sa existencia vstupu, odstránia sa HTML značky, poprípade vyžiada minimálna dĺžka reťazca.
3) Pomocou file_put_contents sa naformátovaný overený vstup vloží do textového súboru.

Otázkou je ako uložený reťazec pri potrebe načítať? Ideálne by bolo načítať celý súbor a môcť v ňom hľadať. V závislosti na výsledku hľadania by sa následne vytvoril záver.

1) Poznáte nejaký príkaz, ktorý vie prehľadať súbor?
2) Dal by sa ten istý príkaz použiť na skontrolovanie existencie reťazca v súbore medzi druhým a tretím bodom vyššie? Ak nie, ako by ste to riešili?

Ďakujem veľmi pekne za prípadné odpovede.
Tori
Profil
Funkce strpos / stripos pro vyhledání podřetězce. Do souboru bych každou hodnotu ukládala na samostatný řádek. Pak v tom můžete vyhledávat buď file_get_contents + strpos, anebo (menší spotřeba paměti) sekvenčně číst jednotlivé řádky (fgets) a porovnávat.
Tomáš123
Profil
Tori:
Skúsil som to nejako zbúchať dokopy:
1. súbor je prihlasovací formulár:
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Registration - beta</title>
    </head>
    <body>
        <form action="registration.php" method="POST">
            <p>Meno: <input type="text" name="name"></p>
            <p>Heslo: <input type="password" name="pass"></p>
            <p>Overenie hesla: <input type="password" name="verpass"></p>
            <input type="submit" value="submit">
        </form>
    </body>
</html>

2. súbor je spracovanie formulára (registration.php):
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Output</title>
    </head>
    <body>
<?php
    if(isset($_POST['name'], $_POST['pass'], $_POST['verpass']) && $_POST['pass'] === $_POST['verpass']) {
        $name = $_POST['name'];
        $pass = $_POST['pass'];
        $file = "users.txt";
        $data = $name."|".$pass."\n";
        $fp = fopen ($file, 'a');  //upravné na 'a'
        fwrite ($fp, $data);
        fclose ($fp);
        if ($fp) {
            echo "<p>Boli ste úspešne zaregistrovaný.</p>";
        }
        else {
            echo "<p>Nepodarilo sa zaregistrovať</p>";
        }
    }
    else {
        echo "<p>Ak sa chcete zaregistrovať, musíte vyplniť všetky formulárové polia a obidve heslá sa musia zhodovať.<p>";
    }
?>
        <p>Prihláste sa:</p>  <!-- viem, že sa to vypíše, aj keď je registrácia neúspešná - potom upravím -->
        <form action="login.php" method="POST">
            <input type="text" name="name">
            <input type="password" name="pass">
            <input type="submit">
        </form>
    </body>
</html>

3. súbor spracúva prihlasovacie údaje (login.php):
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
    </head>
    <body>
<?php
    if(isset($_POST['name'], $_POST['pass'])) {
        $name = $_POST['name'];
        $pass = $_POST['pass'];
        $data = $name."|".$pass;
        $file = "users.txt";
        $succes = fopen($file, "r");
        if ($succes) {
            fgets($file);
            $srchd = strpos($file, $data);
            if ($srchd) {
                echo "<p>Vitajte vo svojom účte<p>";
            }
            else {
                echo "<p>Musíte sa najprv zaregistrovať</p>";
            }
        }
        else {
            echo "<p>Súbor sa nepodarilo otvoriť</p>";
        }
    }
    else {
        echo "<p>Vyplňte prosím všekty formulárové polia</p>";
    }
?>
    </body>
</html>

Keďže o prvej z uvedených funkcií počujem po prvý krát a s druhou som nikdy nepracoval, asi bude chyba niekde v zápise.

Výsledok tohto skriptu je chybová hláška:
Warning: fgets() expects parameter 1 to be resource, string given in C:\Users\Documents\EasyPHP-DevServer-14.1VC9\data\localweb\registration\login.php on line 15

A veta "Musíte sa najprv zaregistrovať" sa vypíše vždy.

Viete mi poradiť, kde robím chybu?
lionel messi
Profil
Tomáš123:
Výsledok tohto skriptu je chybová hláška:
Warning: fgets() expects parameter 1 to be resource, string given in C:\Users\Documents\EasyPHP-DevServer-14.1VC9\data\localweb\registration\login.php on line 15
Výstrel od boku (podľa dokumntácie), malo by to byť takto:
fgets($success);
Marschmallow
Profil
Tomáš123:
Proč ukladáš hesla do souboru a ještě .txt? Kdokoliv si ten soubor může otevřít a přečíst si hesla. Tedy pokud nezakážeš přístup pomocí .htaccess: deny from all.
Tomáš123
Profil
lionel messi:
Áno, je to tak. Stále však vypisuje iba "Musíte sa najprv zaragistrovať" bez ohľadu na výsledok. Sú zle postavené podmienky?
Nezalamuje sa mi riadok po uložení dvojice. Prečo?

Marschmallow:
Proč ukladáš hesla do souboru a ještě .txt?
To momentálne nie je predmetom otázky. Ubezpečujem ťa, že takýto skript nikam nezavesím. :-)
lionel messi
Profil
Tomáš123:
A veta "Musíte sa najprv zaregistrovať" sa vypíše vždy.
To bude najskôr týmto:
$srchd = strpos($file, $data);

Kde $file je string users.txt. Ty chceš dosiahnuť toto: Zobrať obsah súboru users.txt a tam nájsť výskyt reťazca uloženého v $data. V skutočnosti však PHP vykoná niečo iné: funkcia strpos berie ako prvý argument string, v kt. hľadá výskyt druhého argumentu, čiže hľadá $data v stringu (nie v súbore!) users.txt. Prvý argument tejto funkcie by mal byť obsah súboru users.txt, nie jeho názov, ako to máš teraz. Neporadím ti však, ako presne to dosiahnuť, nemám veľké praktické skúsenosti, nechcem ťa zbytočne zmiasť, dal by som to možno asi takto, ale zrejme to nie je čisté riešenie a šlo by to napísať aj oveľa lepšie, s konkrétnym riešením radšej počkaj na niekoho skúsenejšieho, moje „fušerské“ riešenie:

if ($succes) {
              $srchd = strpos(file_get_contents($file), $data);
              if ($srchd !== false) {
                  echo "<p>Vitajte vo svojom účte<p>";
              }
            }
            else {
                echo "<p>Musíte sa najprv zaregistrovať</p>";
            }

Funkciu fgets som nepoužil zámerne, [#2] Tori napísala: „Pak v tom můžete vyhledávat buď file_get_contents + strpos, anebo (menší spotřeba paměti) sekvenčně číst jednotlivé řádky (fgets) a porovnávat.

Ak chceš fgets (lepšie) pozri [#8] Tori.
Tori
Profil
Tomáš123:
fgets čte jen jeden řádek, takže tam musí být něco takového:
while ($radek = fgets($success)) {
  if (strpos($radek, $overovaneHeslo) !== FALSE) {
     // heslo nalezeno.
     break; // už není potřeba hledat dál, ukonči cyklus
  }
}
fclose($success);
Tomáš123
Profil
Tori:
fgets čte jen jeden řádek, takže tam musí být něco takového:
Teoreticky nie, lebo mi skript nezalamuje riadky :-). Čo je zlé na zápise: $data = $name."|".$pass."\n";?
lionel messi
Profil
Tomáš123:
Čo je zlé na zápise: $data = $name."|".$pass."\n";?
Hm, zdá sa, že nič. Záleží však na tom, či testuješ na serveri Linux (tam by to naozaj zalamovať malo) alebo Windows (tam sa koniec riadku zapisuje tuším \r\n)
Tomáš123
Profil
lionel messi:
alebo Windows (tam sa koniec riadku zapisuje tuším \r\n)
Ide o Windows, ale ani zápis "\r\n" nezalamuje riadky. Čo vlastne znamená \r? Jediné som počul, je carriage return (to však vyznieva viac metaforicky ako rozumne)
lionel messi
Profil
Tomáš123:
Skús ešte: $data = $name."|".$pass. PHP_EOL;
Tori
Profil
viz wiki:znak CR
Tomáš123
Profil
lionel messi:
Áno, zabralo to. Môžem sa opýtať, čo znamená "PHP_EOL"?

Tori, lionel messi:
Zatiaľ ďakujem veľmi pekne za pomoc a ochotu.
lionel messi
Profil
Tomáš123:
Môžem sa opýtať, čo znamená "PHP_EOL"?
Až taký expert zase nie som, ale podľa stackoverflow.com/questions/21373478/n-vs-php-eol-vs-br:

The purpose of PHP_EOL is to automatically choose the correct character for the platform, so that your new lines are platform-independent.
Tomáš123
Profil
Je táto štruktúra kódu dobrá a logická?:
<?php
    if(isset($_POST['name'], $_POST['pass'], $_POST['verpass']) && $_POST['pass'] === $_POST['verpass']) {
        $name = $_POST['name'];
        $pass = $_POST['pass'];
        $file = "users.txt";
        $data = $name."|".$pass;
        $success = fopen($file, 'r');
        if ($success) {
            while ($line = fgets($success)) {
                if (strpos(file_get_contents($file), $data)) {
                    echo "<p>Už ste registrovaný, môžete sa prihlásiť.</p>";
                    break;
                }
                else {
                    $newdata = $name."|".$pass. PHP_EOL;
                    $fp = fopen ($file, 'a');
                    fwrite ($fp, $newdata);
                    fclose ($fp);
                    if ($fp) {
                        echo "<p>Boli ste úspešne zaregistrovaný.</p>";
                    }
                    else {
                        echo "<p>Nepodarilo sa zaregistrovať</p>";
                    }
                }
            }            
        }
    }
    else {
        echo "<p>Ak sa chcete zaregistrovať, musíte vyplniť všetky formulárové polia a obidve heslá sa musia zhodovať.<p>";
    }
?>

Vypisuje mi totiž aj "Boli ste úspešne zaregistrovaný" aj "Už ste registrovaný, môžete sa prihlásiť". Čo je však zaujímavé vypisuje sa to v takomto poradí.

lionel messi:
Ďakujem za zdroj. Stále však nechápem, prečo mi obyčajné \n nefungovalo. V článku to popisujú ako spôsob ekvivalentný k . PHP_EOL.
Tori
Profil
To máte smíchané dvě věci dohromady. Buď hledejte username v celém souboru (ř.10), nebo postupně po řádkách (while). V druhém případě je potřeba nejřív projít celý soubor a až potom případně do něj zapisovat.
Tomáš123
Profil
Tori:
Buď hledejte username v celém souboru (ř.10), nebo postupně po řádkách (while).
Keď prepíšem riadok 10 na:
if (strpos($line, $data)) {
skript vypíše danú frázu toľko krát, koľko sa mu podarí za 30 sekúnd.
Musím teda udávať maximálny počet radkov, ktorý sa načíta, alebo sa to dá upraviť prerobením podmienky?

Poprípade je správne riešenie použiť namiesto cyklu while podmienku if a vyhodiť break? Funguje to očakávane s tým rozdielom, že nikdy nevypisuje, že som zaregistrovaný a do súboru pustí duplicity.
Nový poznatok: Prvý záznam vráti očakávaný výsledok, ostatné pustia duplicity.

a až potom případně do něj zapisovat.
Zapisovať? Veď teraz zo súboru iba čítam, či nie.
Tomáš123
Profil
Skúsil som vytvoriť jednoduchý príklad, aby som zistil, čo robím zle:
<?php
    $fp = fopen('test.txt', 'r');
    $data = "slovo";
    if ($fp) {
        while ($line = fgets($fp)) {
            if (strpos($line, $data)) {
                echo $line."|".$data."\n";
                break;
            }
            else {
                echo "Nikde nič.";
                break;
            }
        $line++;
        }
    }
    fclose($fp);
?>

Tipoval som, že ak na konci s premennou prevediem operáciu inkrement, bude sa aspoň cyklicky čítať súbor. Taktiež som pridal break; aj pod else, aby sa server nezavzdušnil stále, keď sa v súbore hľadané slovo nenachádza. No nepomohlo to. Viackrát som prečítal dokumentáciu ku všetkým problémovým príkazom a funkciám, no neviem si nájsť chybu. Funkcia fgets() spravidla prečíta iba jeden riadok (skúšal som aj ubrať počet riadkov, čo ak by to bolo kvôli tomu, že sa jej nechce čítať celý súbor keď vidí koľko práce ju čaká). Break; pod else zabral. Keď tam nebol, vypísalo sa echo toľko krát, koľko bolo riadkov v súbore (čo mi nahovára, že niečo na tom fgets() predsa len bdie. Viete mi poradiť, kde by mohla byť?
lionel messi
Profil
Tomáš123:
Možno to nie je hlavný problém, ale funkcia strpos vracia v prípade, že podreťazec nájde na začiatku prehľadávaného stringu hodnotu 0, čo sa v podmienke: if (strpos($line, $data)) automaticky pretypuje na logickú hodnotu false, čo vedie k nesplneniu podmienky, hoci logicky by splnená byť mala. Dá sa to vyriešiť takto (už som to včera spomínal, rovnako ako aj Tori):
 if (strpos($line, $data) !== false) //táto podmienka bude splnená aj keď bude hľadaný reťazec hneď na začiatku prehľadávaného

Inkrementáciu skús zmazať, podľa mňa je jej použitie v tomto prípade chybou.


A skúsil by som to možno takto:
<?php
    $fp = fopen('test.txt', 'r');
    $data = "slovo";
    if ($fp) {
        while ($line = fgets($fp)) {
            if (strpos($line, $data)) {
                echo $line."|".$data."\n";
                $najdene = true;
                break;      
          }
        }
        if (!$najdene)
        {
          echo "Nikde nič!"; //v prípade nenájdenia vypíše nikde nič vždy len raz bez ohľadu na počet riadkov v súbore
        }
    }
    fclose($fp);
?>
Tomáš123
Profil
lionel messi:
Prerobil som to, tak ako si uviedol (na začiatku som musel definovať premennú). Skript vypíše "Nikde nič" aj v prípade, že sa hľadaný reťazec v súbore nachádza. Taktiež som vyskúšal aj prekombinovať !==false s inkrementom. Stále to nefunguje.
Tomáš123
Profil
Skript som vyrobil nanovo, s tým, že používam cyklus trochu inak ako uviedla [#8] Tori. Zdá sa že všetko funguje:
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Test</title>
    </head>
    <body>
<?php
    $data = "Miroslav";
    $fp = fopen('test.txt', 'a+');
    if ($fp !== FALSE) {
        while (!feof($fp)) {
            $line = fgets($fp);
            if (strpos($line, $data)) {
                echo "Registrácia";
                break;
            }
            else {
                echo "Už ste zaregistrovný";
                break;
            }
        }
    }    
    fclose($fp);
?>
    </body>
</html>

Trochu ma však zarazil správny výstup nelogickej podmienky na riadku 14. Veď funkcia strpos() vracia FALSE ak sa hľadaný reťazec nenájde. Ja chcem, aby ak sa hľadaný reťazec nenašiel, vypísal skript 'Registrácia'. Podmienka by teda mala vyzerať takto: if (!strpos($line, $data)). Prečo takáto podmienka nefunguje a jej opak áno. Ide o dvojitý zápor z riadku 12 (po premene výkričníkov je výstupom nič)?

Omyl. Podmienky nefungujú. Ak pred strpos() výkričník je, stále sa vypíše 'Registrácia'. V opačnom prípade sa vypíše 'Už ste zaregistrovaný'.

Ak by sa niekomu chcelo zhodnotiť kód, vítam pripomienky. Viem, že je to 16, z ktorých na 4 iba uzatváram zátvorky, aj tak som však zvedavý, či je vyrobený dobre.

Ďakujem za odpovede.
Jan Tvrdík
Profil
Jsem líný to číst, ale nepomohlo by if (strpos($line, $data) !== FALSE)?
Tomáš123
Profil
Jan Tvrdík:
Bohužiaľ nie. Predtým než som sem napísal som skúšal všetky kombinácie s výkričníkom, porovnávaním a true alebo false.

Jsem líný to číst
Stačí posledný príspevok. Všetko predtým je už ako tak vyriešené, okrem otázky zo [#16] na konci príspevku.
Tomáš123
Profil
Dúfam, že už naposledy vyťahujem svoje vlákno. Podarilo sa mi vyriešiť problém. Aktuálny kód:
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Test</title>
    </head>
    <body>
<?php
    $data = "Anton";
    $fp = fopen('test.txt', 'a+');
    if ($fp !== FALSE) {
        while (!feof($fp)) {
            $line = fgets($fp);
            $success = strpos($line, $data);
            if ($success !== FALSE) {
                echo "Už ste zaregistrovný";
                break;
            }
            else {
                echo "Registrácia";
                break;
            }
        }
    }    
    fclose($fp);
?>
    </body>
</html>

Od minulej verzie som vykonal dve zmeny:
• Príkaz vyhľadávania v súbore sa po novom udeje vždy, nie je iba výrazom podmienky.
• Podľa juriadovej rady som pozmenil poradie podmienok.

Z pozorovania výsledného kódu a jeho porovnávania so staršími verziami mi napadajú dve otázky:
1) Ako PHP pracuje s podobným výrazom v podmienke a prečo je to iné ako uloženie výsledku a následná práca s premennou?
2) Je porovnávanie a práca s vyššie uvedený kódom prijateľná? Prerobili by ste nejakú časť? Dôvodom otázky je snaha zvyknúť si na správne programátorské praktiky už v ranom štádiu štúdia.
Jan Tvrdík
Profil
Ako PHP pracuje s podobným výrazom v podmienke a prečo je to iné ako uloženie výsledku a následná práca s premennou?
Není, napsal jsi to předtím asi blbě. To, co tam máš teď, je ekvivalentní s if (strpos($line, $data) !== FALSE). Pozor na to, že != a !== je něco jiného.
Tomáš123
Profil
Už viackrát som sa zmýlil v diagnostike riešenia. Posledne uvedené riešenie funguje správne iba pri porovnávaní s prvým zápisom. Na tie ostatné sa nevzťahuje. Skúšal som už všetko možné. Problém je v ťahaní riadkov. Stále sa vytiahne iba ten prvý. Môžte mi, prosím, objasniť funkciu fgets(). Už som vytvoril a prerobil fakt veľa riešení, no ešte nikdy mi nefungovala.

Posledné čo mi napadá ako koreň problému je:
1) Celé sa to odohráva vo vnútri cyklu, možno by bolo lepšie v cykle údaje iba kontrolovať a zvyšok porovnávať mimo neho. Ako však dostať else zvnútra cyklu von. V skratke ide o to, že sa údaje vyhľadajú v súbore, ak sú nájdené vypíše sa fráza, inak (spomínané else) sa súbor otvorí a dáta sa doňho zapíšu. Síce sa mi nezapisujú duplicitne, ale potenciálnym problémom by to mohlo byť.
2) Druhým potenciálnym dôvodom nefunkčnosti by mohlo byť už spomínané otváranie súborov. Prezrite si kód:
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Output</title>
    </head>
    <body>
<?php
    if(isset($_POST['name'], $_POST['pass'], $_POST['verpass'])) {
        if($_POST['pass'] === $_POST['verpass']) {
            $name = $_POST['name'];
            $pass = $_POST['pass'];
            $file = "users.txt";
            $data = $name."|".$pass;
            $fp = fopen($file, 'a+');
            if ($fp) {
                while(!feof($fp)) {
                    $line = fgets($fp);
                    echo $line;
                    $founded = strpos($line, $data);
                    if($founded !== FALSE) {
                        echo "<p>Už ste zaregistrovaný, prihláste sa!</p>";
                        fclose($fp);
                        break;                        
                    }
                    else {
                        $newdata = $name."|".$pass. PHP_EOL;
                        $success = fwrite($fp, $newdata);
                        if($success !== FALSE) {
                            echo "<p>Boli ste úspešne zaregistrovaný.</p>";
                        }
                        else {
                            echo "<p>Nepodarilo sa zaregistrovať.</p>";
                        }
                        fclose($fp);
                        break;
                    }
                }
            }
            else {
                echo "<p>Nepodarilo sa načítať súbor.</p>";
            }
        }
        else {
            echo "<p>Obidve heslá sa musia zhodovať.</p>";
        }
    }
    else {
        echo "<p>Ak sa chcete zaregistrovať, musíte vyplniť všetky formulárové polia.</p>";
    }
?>
        <p>Teraz sa môžte prihlásiť</p>
        <form action="login.php" method="POST">
            <input type="text" name="name">
            <input type="password" name="pass">
            <input type="submit">
        </form>
    </body>
</html>
Pred podmienkami otváram súbor, no zápisom 'a+' posúvam ukázateľ na koniec, kvôli zápisu dát v neskoršej časti. Rozmýšľal som, ako otvárať súbor na dvakrát (stále v inou móde), no neprišiel som na to, ako dosiahnuť, aby na konci podmienok (s tým, že naraz sa vykoná iba jedna) bol súbor otvorený a uzavretý iba raz.

Prosím, nenechajte toto vlákno opäť zapadnúť (už vám nemám čo nové povedať). Rád by som s vašou pomocou svoj problém už konečne vyriešil. Čo robím zle!?

Ďakujem veľmi pekne za všetky rady.
Alphard
Profil
Tomáš123:
možno by bolo lepšie v cykle údaje iba kontrolovať a zvyšok porovnávať mimo neho. Ako však dostať else zvnútra cyklu von.
Ano, přesně tak.
Přesun else bloku mimo cyklus se typicky řeší takto:

$found = false;
while (...) {
  if (...) {
    // tady lze provést kód, když je hledání úspěšné
    $found = true;
    break;
  }
}

if (!$found) {
  // tady je vaše větev, když se nic nenašlo
}
Tomáš123
Profil
Alphard:
To je ako zázrak. Nikto mi tu neprispel už dosť dlho, začal som teda testovať sám. Vytvoril som úplne jednoduchú ukážku, aby sa dalo chybu presne diagnostikovať. Skladal som ju po častiach, aby som zistil kde sa vytvorí. Pridal som iba jedno if a všetko stále fungovalo, keď som však pridal else, počet výsledkov sa zhodoval s počtom zápisov v súbore. Pridal som break, aby som tomu zabránil a už som vedel, čo robím zle. Ak pridám break a zistí sa, že hľadaný výraz sa na prvom riadku nenachádza, automaticky sa to smeruje ku else, na konci ktorého sa cyklus zastaví. To vysvetľuje, prečo sa zobrazí iba jeden záznam. Napadlo mi, že bez else to fungovalo správne, aj keď podmienka na jej konci žiadne zastavenie cyklu neobsahovala. Mal som teda v pláne obrátiť podmienku. Doteraz hovorila: Ak sa tam to meno nachádza, vypíš toto. Ak nie pridaj ho tam, break;. Chudák meno. Skrývalo sa na druhom riadku a nikdy sa k nemu nedošlo. Ale ak by podmienka vyzerala opačne, teda: Ak sa tam to slovo nenachádza, pridaj ho tam, zastavovanie by sa vyriešilo. Problém je v tom, že pri tejto variante je cyklus nekonečný. Ako to tak zhŕňam, dochádza mi prečo. Práve som tu chcel napísať svoje zistenie, keď ste tu napísali, Alphard. Ďakujem za objasnenie. Po úprave to funguje. Ešte k tomu som sa priučil novému nepravidelnému slovesu z angličtiny :-).

Ak by niekoho zaujímal kód, tu je (a je mu dobre):
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Output</title>
    </head>
    <body>
<?php
    if(isset($_POST['name'], $_POST['pass'], $_POST['verpass'])) {
        if($_POST['pass'] === $_POST['verpass']) {
            $name = $_POST['name'];
            $pass = $_POST['pass'];
            $file = "users.txt";
            $data = $name."|".$pass;
            $read = fopen($file, 'r');
            if ($read) {
                while(!feof($read)) {
                    $line = fgets($read);
                    echo $line;
                    $found = strpos($line, $data);
                    if($found !== FALSE) {
                        echo "<p>Už ste zaregistrovaný, prihláste sa!</p>";
                        fclose($read);
                        $found = TRUE;
                        break;
                    }
                }
                if ($found !== TRUE) {
                    $newdata = $name."|".$pass. PHP_EOL;
                    $write = fopen($file, 'a+');
                    if($write !== FALSE) {
                        $success = fwrite($write, $newdata);
                        if($success !== FALSE) {
                            echo "<p>Boli ste úspešne zaregistrovaný.</p>";
                        }
                        else {
                            echo "<p>Nepodarilo sa zaregistrovať.</p>";
                        }
                    }
                    else {
                        echo "<p>Súbor sa nepodarilo otvoriť.</p>";
                    }
                    fclose($write);
                }
            }
            else {
                echo "<p>Nepodarilo sa načítať súbor.</p>";
            }
        }
        else {
            echo "<p>Obidve heslá sa musia zhodovať.</p>";
        }
    }
    else {
        echo "<p>Ak sa chcete zaregistrovať, musíte vyplniť všetky formulárové polia.</p>";
    }
?>
        <p>Teraz sa môžte prihlásiť</p>
        <form action="login.php" method="POST">
            <input type="text" name="name">
            <input type="password" name="pass">
            <input type="submit">
        </form>
    </body>
</html>

Ešte na ňom urobím dodatočné úpravy ako zobrazenie prihlásenia iba ak je registrácia úspešná. Ďakujem Vám Alphard ;-). Prípad uzavretý.

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: