Databáze
5 příspěvků
Archiv diskusního fóra
Fórum je uzavřené a slouží pouze ke čtení. Některé informace mohou být zastaralé.
-
Mám takový malý problém, ale nevím si s tím rady. Mám formlář, z kterého se mi přidávají data do databáze a zaroveň se mi podtím v zadaném třídění načítají. Problém je v tom, že po zmáčknutí Obnovit se přidá do databáze prázdný záznam. Je to stránka pro správu, takže tam nemám žádné kontroly. Jak tomu zamezit? Doufám, že mě nevynadáte do hňupů.
-
Chtelo by to nejakou podminku, ktera by tomu zamezila. Pokud je input (z formulare nejlepsi pres POST) prazdy, tak zastavit, nebo nekam presmerovat....
-
A nebo pokud je vstupni formular prazdny nebo nedefinovany (typicky pri reload), tak vynechat vlozeni do databaze a pokracovat az na vypisu. V pohode to funguje. A jeste lepsi je, aby ukladani samotne vracelo jen v hlavicce adresu na dokument ohlasujici vysledek. Neulozi se to potom a historii a pri zpetnem prochazeni historii zabrani i opetovnemu vlozeni vyplneneho radku. Viz Jiri Kosek - PHP (knizka)
-
A vůbec nejlepší je "jednorázové" akce dát do samostaného souboru. "Jednorázovými" akcemi rozuměj něco, co nemá proběhnout při každém načtení stránky. Stačí jednou a dost! Nejtypičtějšími příklady je úprava databáze, přihlášení přihlašovacím skriptem, založení session, cookie, úprava souboru atd. stranka.php <?php // tady je celá tvoje strának se všemi blbostmi // obsahuje formulář ?> <form action="jednorazova_akce.php" method="post"> <p>Login: <input type="text" name="login"></p> <p>Login: <input type="password" name="heslo"></p> <p><input type="submit" value="Odeslat"> <input type="reset" value="Vymazat"></p> </form> <?php // a další věci // jako např. zmiňovaný výpis z databáze ?> Vyplněný formulář odešleš na skript: jednorazova_akce.php <?php // nedorazily údaje if (!IsSet($_POST['login']) || !IsSet($_POST['heslo'])) Die('Chyba: skriptu nebyly odeslány všechny potřebné údaje!'); // ošetření údajů - login: písmena, číslice, pomlčky, podtržítka, tečky; heslo: písmena, číslice if (!EReg('^[a-zA-Z0-9_\-\.]{2,10}$', $_POST['login']) || !EReg('^[a-zA-Z0-9]{5,10}$', $_POST['heslo'])) Die('Chyba: odeslaná data obsahují nepovolené znaky!'); // převod na malá písmena a zašifrování hesla $login = StrToLower($_POST['login']); $heslo = MD5(StrToLower($_POST['heslo'])); $query = MySQL_Query('SELECT COUNT(*) FROM uzivatele WHERE login=\''.$login.'\' AND heslo=\''.$heslo.'\''); if (MySQL_Result($query, 0, 0) == 1) { // spravny login i heslo // muzu ho pustit dal } else { // NEspravny login nebo heslo // NEmuzu ho pustit dal } Header('Location: http://'.$_SERVER['HTTP_HOST'].$root.'stranka.php'); ?> skript "jednorazova_akce.php" proběhne, udělá to, co má (v tomto případě přihlašuje uživatele) a pomocí hlavičky Location se vrátí zpět na danou stránku. Obrovskou výhodou tohoto řešení je, že skript, který neobsahuje žádný výstup (echo, html kód, ...), jakým "jednorazova_akce.php" se ani nemůže uložit do historie prohlížeče. Uživatel pak nemůže nicvložit davkraát jen tím, že dá "zpět" nebo "aktualizovat". Pavel
-
Header('Location: http://'.$_SERVER['HTTP_HOST'].$root.'stranka.php'); proměnná $root mi určuje, v jakém podadresáři na serveru se aplikace nachází. Klidně ji odtamtud vypust. Pak to bude vypadat takto: Header('Location: http://'.$_SERVER['HTTP_HOST'].'/stranka.php');