Nejde mi komentář

6 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é.

  1. Dobry vecer, chci si pod clanky dat komentar, ale nejde to, hazi to chyby, je tenhle kod spatny? <center> <div style="text-align: center"> <form method="POST" action=""> Jméno<br> <input type="text" name="name"><br> Předmět<br> <input type="text" name="predmet"><br><br> Zpráva<br><br> <textarea name="text" rows="15" cols="45"></textarea><br><br> <input type="submit" value="Napiš komentář"> <?php $name = $_POST['name']; $predmet = $_POST['predmet']; $text = $_POST['text']; $page = $GET_['page']; $komentar = "$name<br>$predmet<br>$text"; if(!isset($name) || !isset($text)) echo "Vyplňte všechny pole"; $zprava = fopen("$page-komentar", "a+"); fwrite($zprava, $komentar); fclose($zprava); ?> </center> Dekuji za radu..
  2. A jaképak chyby to hází? PS: A co: <form method="POST" action=""> - zkusit něco doplnit do těch prázdných uvozovek?
  3. <HTML>Co je $GET_ na 15. řádku? Jinak pozor na to, proměnné $name i $text budou v té podmínce na 18. řádku vždy nastaveny (protože jim předtím přihazuješ hodnoty z $_POSTu), je třeba to upravit buď na kontrolu prázdnosti (empty(), případně trim() a potom empty() - nelze empty(trim())), nebo kontrolovat isset($_POST[...]). (Nejlépe obojí.) Pokud máš přísný interpret PHP, bude házet Notice chyby při čtení z nepřijatých polí - pokud např. uživatel neodešle pole "name", vyhodí 12. řádek ($name = $_POST['name'];) hlášku. Je třeba tyto vstupy ohlídat pomocí isset. Další věc, na kterou tě chci upozornit, je nezabezpečení proti napsání jakéhokoliv kódu - chybí při sestavování proměnné $komentar použití funkce htmlspecialchars(). Bez tohoto opatření může návštěvník nahrát do knihy např. libovolný nežádoucí skript (říká se tomu cross-site scripting). A pokud příspěvky při výpisu includuješ, může dojít i k PHP injection, protože návštěvník může zapsat do knihy libovolný PHP skript, který se pak při výpisu vykoná. Dále (no je toho hodně... až s úžasem, kolik chyb lze najít v 25řádkovém skriptu) by bylo dobré zamyslet se nad způsobem ukládání příspěvku. Nebylo by lepší zvolit databázi? A pokud chceš zůstat u souboru - je nutné do souboru zapisovat i HTML značky? Já třeba razím zásadu, že skladovaná data by měla být v co nejsyrovější podobě - a jejich upečení by se mělo odehrávat až při výpisu. Výhodou té mé zásady je, že když změním výstupní formát (např. chci přejít z HTML na XHTML, nebo chci trošku jinak strukturovat ten vypsaný komentář, nebo třeba chci vypsat komentáře v nějakém úplně jiném formátu, např. holém textu nebo csv), stačí předělat vypisovací funkci. V tvém případě bys musel projít celý soubor s komentáři a předělat. Dále - pokud dojde k chybě, je dobré při výpisu formuláře znovu vyplnit uživatelem zadaná pole. Za další - pokud uživatel úspěšně odešle komentář, je lepší namísto následného přímého výpisu uživatele přesměrovat (header("Location: komentare.php"). Účelem je zabránit nevědomému znovuodeslání formuláře, pokud uživatel po úspěšném odeslání komentáře refreshne (F5) stránku. No a v neposlední řadě mám výtku k HTML kódu. Nevím, v jaké verzi HTML to děláš, ale obecně: - použití tagu center - ne - použití přímých stylů - ne - šílené řádkování - ne, je lepší formulář hezky strukturovat pomocí divů a labelů A úplně nakonec - taková drobnost, ale štve mě. Nauč se pracovat se středním rodem. Já vím, 90 % Čechů a 100 % politiků mají s tímto rodem problémy, ale není tak těžké jej zvládnout. Správně se totiž píše "Vyplňte všechn<b>a</b> pole"</HTML>
  4. <HTML>Jen tak mimochodem - $_GET['page'] nemůže být přijat z odeslaného formuláře, když není uveden v action. ;)</HTML>
  5. Ano, ale jak to ma byt? Moc s PhP neumim, a je to moc slozite, nedokazu si to predstavit jak v HTML
  6. Např. takto: soubor form.html: (+ hlavičky at..) <form method="POST" action="zpracuj.php?page=hodnota_promenne_page"> Jméno<br><input type="text" name="name"><br> Předmět<br><input type="text" name="predmet"><br><br> Zpráva<br><textarea name="text" rows="15" cols="45"></textarea<br><br> <input type="submit" value="Napiš komentář"> </form> soubor zpracuj.php: if(!isset( $_POST['name']) || !isset($_POST['text']) || !$_POST['predmet']) die('Nezadany hodnoty.'); if(strlen(trim($_POST['name'])) < 1 || strlen(trim($_POST['text'])) < 1 || strlen(trim($_POST['predmet'])) < 1) die('Hodnoty jsou prazdne.'); $komentar = $_POST['name'].'<br>'.$_POST['predmet'].'<br>.'trim($_POST['text']); $zprava = fopen($GET_['page']."-komentar", "a+"); fwrite($zprava, $komentar); fclose($zprava); ___ Cele je to dost zjednodušené. Žádná kontrola vstupu atd.. takže v praxi funkční, ale pro nasazení na veřejně dostupný web nepoužitelné. <myšlenka dne> Kurva, lidi, neblbňete. Neučte se programovat na PHP. Vyberte si nějaký klasický imperativní jazyk (C,C++,Pascal) a hrajte si s ním. PHP je programovací jazyk jako každý jiný - dovoluje ale mnohem více prasáren než ostatní jazyky... Pak má ten web nějak vypadat :/ </myšlenka dne>

← Zpět na všechna témata