Zdravím,
potřebuji poradit s kontrolou formuláře. Mám vytvořenou databázi pomocí PHP která mi přidává nový údaj do tabulky. Potřebuji ale ještě před odesláním formuláře jeho kontrolu, aby se mi do tabulky nezapisovaly nevyplněné údaje. Ta kontrola má být provedena pomocí javascriptu. Lámu si s tím hlavu už delší dobu a stále nic..:-/
Kontrola formuláře PHP/JavaScript
- CZechBoY
- Master Level 9.5
- Příspěvky: 8813
- Registrován: srpen 08
- Bydliště: Brno
- Pohlaví:
- Stav:
Offline
- Kontakt:
Re: Kontrola formuláře PHP/JavaScript
Zdravím,
tak chceš kontrolu přes PHP nebo JS nebo kombinaci?
tak chceš kontrolu přes PHP nebo JS nebo kombinaci?
Kód: Vybrat vše
<script>
$("form").on('submit', function() {
if ($(this).find('input[name=jmeno]').val() == '') {
$(this).append('<div class="error">Nevyplněné jméno</div>');
return false;
}
});
</script>
Kód: Vybrat vše
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (empty($_POST['jmeno'])) {
echo 'Chybí jméno';
}
}
?>
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW
-
- nováček
- Příspěvky: 4
- Registrován: květen 14
- Pohlaví:
- Stav:
Offline
Re: Kontrola formuláře PHP/JavaScript
od CZechBoY » Včera, 13:49
Zrovna něco podobného také hledám a řeším.
1) Jak to mám do formuláře prosím dát?
2) Prý existují nějaké funkce proti zneužití bezpečnosti a XSS. Něco jsem o tom četl a nechápu to. Každopádně v jedné své knize návštěv i přes kontrolní otázku už musím v .htaccessu blokovat IP adresy. Dost se spamy omezily, pořád to je průchozí. Poradíte prosím?
Děkuji moc.
Zrovna něco podobného také hledám a řeším.
1) Jak to mám do formuláře prosím dát?
2) Prý existují nějaké funkce proti zneužití bezpečnosti a XSS. Něco jsem o tom četl a nechápu to. Každopádně v jedné své knize návštěv i přes kontrolní otázku už musím v .htaccessu blokovat IP adresy. Dost se spamy omezily, pořád to je průchozí. Poradíte prosím?
Děkuji moc.
- CZechBoY
- Master Level 9.5
- Příspěvky: 8813
- Registrován: srpen 08
- Bydliště: Brno
- Pohlaví:
- Stav:
Offline
- Kontakt:
Re: Kontrola formuláře PHP/JavaScript
Hoďte tam captchu nebo jinou kontrolní otázku.
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW
-
- nováček
- Příspěvky: 4
- Registrován: květen 14
- Pohlaví:
- Stav:
Offline
Re: Kontrola formuláře PHP/JavaScript
ad captcha:
- ta je z hlediska přívětivosti pro uživatele otravna a to i z hlediska UX
- na ten web chodí tak 200 lidí za týden, takže musí existovat jiné řešení. Až bude na web chodit 100 za den, možná capchu dám
ad jinou konktrolní otázku:
- už to, že jsem ji tam musel dát mě dost štvalo
Existuje jistě jiné řešení a myslel jsem, že ochrana inputů nějak půjde.
Nebo třeba udělat input, který bude uživatelům skrytý, ale pokud ho někdo vyplní, tak se vložení neprovede. To pad dát jako další opatření kontroli.
Děkuji za radu.
- ta je z hlediska přívětivosti pro uživatele otravna a to i z hlediska UX
- na ten web chodí tak 200 lidí za týden, takže musí existovat jiné řešení. Až bude na web chodit 100 za den, možná capchu dám
ad jinou konktrolní otázku:
- už to, že jsem ji tam musel dát mě dost štvalo
Existuje jistě jiné řešení a myslel jsem, že ochrana inputů nějak půjde.
Nebo třeba udělat input, který bude uživatelům skrytý, ale pokud ho někdo vyplní, tak se vložení neprovede. To pad dát jako další opatření kontroli.
Děkuji za radu.
- CZechBoY
- Master Level 9.5
- Příspěvky: 8813
- Registrován: srpen 08
- Bydliště: Brno
- Pohlaví:
- Stav:
Offline
- Kontakt:
Re: Kontrola formuláře PHP/JavaScript
Jo takovej trik existuje 
v css dáš prvku display:none a do html vložíš a blbější bot to vyplní

v css dáš prvku display:none a do html vložíš
Kód: Vybrat vše
<input type="text" name="email" value="nevypl@nov.at">
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW
-
- nováček
- Příspěvky: 4
- Registrován: květen 14
- Pohlaví:
- Stav:
Offline
Re: Kontrola formuláře PHP/JavaScript
Jasné že blbější, ale mít systém podmínek pro kontrolu je asi dobrá volba - nebo ne?
"Jo takovej trik existuje"
- jak to kontrolovat (pomocí PHP)?
"Jo takovej trik existuje"
- jak to kontrolovat (pomocí PHP)?
- CZechBoY
- Master Level 9.5
- Příspěvky: 8813
- Registrován: srpen 08
- Bydliště: Brno
- Pohlaví:
- Stav:
Offline
- Kontakt:
Re: Kontrola formuláře PHP/JavaScript
Kód: Vybrat vše
if ($_POST['email'] != 'nevypl@nov.at') {//bot}
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW
-
- nováček
- Příspěvky: 4
- Registrován: květen 14
- Pohlaví:
- Stav:
Offline
Re: Kontrola formuláře PHP/JavaScript
To vypadá rozumě.
"
"
Tzn do mého příkladu
Je to tak?
Takto vypadá současné zpracování knihy návštěv. Asi to je balast. Budu rád buď o zjednodušení i a o lepší zabezpečení.
Mám tam něco špatně?
Je postup kontrol správně nebo dojde jen k jedné kontrole a teprve pokud projde, nastane odesílání do DB? Chtěl bych samozřejmě aby před každým odesláním formuláře do DB nastala kontrola postupně přes všechny vypsané (nebo Vámi navrhnuté) kontroly.
Možná by to chtělo nějak tu kontrolu zjednodušit do jedné velké funkce, aby se to zpřehlednilo.
Moc všem diskutujícím děkuji.
--- Doplnění předchozího příspěvku (05 Čer 2014 17:14) ---
Nevím proč se kod neobarvil. Bylo by to přehlednější.
--- Doplnění předchozího příspěvku (05 Čer 2014 17:42) ---
Něco jsem našel na to skrytou odpověď. Moc tomu ale také nerozumím. Jak to implementovat?
Asi to funguje tak, že když je vypnutý JS, tak se zobrazí již naformátovaný odstavec s textem informujícím o pravděpodobně nějak vygenerovaném čísle 6590.
Pokud vypnutý JS není, je vložen schovaný input se shodnou hodnotou 6590.
Pravděpodobně se tedy musí po každém odeslání formu a před odesláním do DB nebo emailem i kontrolovat:
- zda je odeslán "input" s jménem "spam" a hodotou "6590".
Jak to udělat opět nevím, ale věřím, že když to sem píšu a já si dal práci s tím, jak SPAM filtrovat, tak že nějaký programátor dříve i později napíše konktrétnější řešení :) . Já mu každopádně poděkuji a pokud bude mít nastavou notivfikaci, přijde mu na email
"
Kód: Vybrat vše
if ($_POST['email'] != 'nevypl@nov.at') {//bot}
"
Tzn do mého příkladu
Kód: Vybrat vše
if ($mail != 'nevypl@nov.at') {
//bot
echo "<h3>Jestli si to vyplnil, jsi SPAM a nechi tě tu!</h3>";
//mail("kam@domena.cz", "QB - Pokus o SPAM (domena.cz) - Skrytá pole", $telomailinfo, "FROM: domena");
echo "<p><a href='guestbook.php'>GO BACK</a></p>";
exit;
}
Je to tak?
Takto vypadá současné zpracování knihy návštěv. Asi to je balast. Budu rád buď o zjednodušení i a o lepší zabezpečení.
Mám tam něco špatně?
Je postup kontrol správně nebo dojde jen k jedné kontrole a teprve pokud projde, nastane odesílání do DB? Chtěl bych samozřejmě aby před každým odesláním formuláře do DB nastala kontrola postupně přes všechny vypsané (nebo Vámi navrhnuté) kontroly.
Možná by to chtělo nějak tu kontrolu zjednodušit do jedné velké funkce, aby se to zpřehlednilo.
Kód: Vybrat vše
<?php
if (IsSet($_POST['domenovy_coockies'])) {
$nick = htmlspecialchars($_POST['nick']);
$web = htmlspecialchars($_POST['web']);
$mail = htmlspecialchars($_POST['mail']);
@setcookie("domena_cookies", $nick . "#" . $web . "#" . $mail . "#", time() + 31536000);
$telomailinfo = "Od: $_POST[nick]";
$telomailinfo .= " \nmesage: $_POST[textstary]";
$telomailinfo .= " \ne-mail: $_POST[mail]";
$telomailinfo .= " \nzadaný web: $_POST[web]";
$telomailinfo .= " \n\nJeho ip: $_SERVER[REMOTE_ADDR]";
}
require "mysqlDB.php";
if (IsSet($_POST['sent'])) {
$adresa = $_POST['adresa'];
$nick = htmlspecialchars($_POST['nick']);
$mail = htmlspecialchars($_POST['mail']);
$web = htmlspecialchars($_POST['web']);
$textstary = $_POST['textstary'];
$text = htmlspecialchars($textstary);
$ip = $_SERVER["REMOTE_ADDR"];
$ip_cele = gethostbyaddr($_SERVER['REMOTE_ADDR']);
/************************************************************************
***** kontroluji SPAMY *****
************************************************************************/
/************************************
***** 1) IP kontrola nemá cenu. Je hodně zavirovaných PC odesílanících SPAM
************************************/
if ($ip == "0.0.0.0" || $ip == "0.0.0.1" || $ip == "0.0.0.2" || $ip == "60.190.240.76") {
echo "<h3>Máš BAN, nemůžeš nic psát. Požádej mě ať Tě smažu z banlistu.</h3>";
//mail("kam@domena.cz", "QB - BAN (domena.cz)", $telomailinfo, "FROM: domena");
echo "<p><a href='guestbook.php'>GO BACK</a></p>";
exit;
}
if ($web != "") {
if (substr($web, 0, 7) == "http://") {
$web = $web;
} else {
$web = "http://" . $web;
}
}
/************************************
***** 2) Uvedení už identifikované email SPAM adresy skoro nemá cenu. SPAM emailů je na netu mraky.
*************************************/
if ($mail == "utillintaps@xpasop3free.in") {
echo "<h3>Jsi SPAM a máš BAN - nemůžeš nic psát. Požádej mě ať Tě smažu z banlistu.</h3>";
mail("kam@domena.cz", "QB - Spam - definován a zachycen (domena.cz)", $telomailinfo, "FROM: domena");
echo "<p><a href='guestbook.php'>GO BACK</a></p>";
exit;
}
/************************************
***** 3) Pokud je v postu více jak 3 adres (mající http://), informuj ho o tom. Pravděpodobně SPAM.
*************************************/
if (substr_count($textstary, "http://") > 3) {
echo "<script language=\"javascript\" type=\"text/javascript\">alert(\"SPAM? nezadavej vice jak tri uplne adresy do textu, takove zpravy mazu jako spam... \");</script>";
echo "<p>Okopíruj si tento text (CTRL+C) a vložíš ho (CTRL+V) se správným kontrolním číslem a pouprav nebo rozděl text</p>";
echo "<p><strong>Napsal jsi:</strong></p>";
echo "<p>" . $_POST['textstary'] . "</p>";
//mail("kam@domena.cz", "QB - SPAM - Více než 3x odkaz (domena.cz)", $telomailinfo, "FROM: domena");
echo "<p><a href='guestbook.php'>GO BACK</a></p>";
exit;
}
/************************************
***** 4) Kontrolní otázka. Nerad, ale musel jsem ji tam dát. Zachytí toho hodně.
***** Po cca roce SPAMy prochází docela hodně :( .
***** Prý to jde skrýt a nenutit běžné uživatele vyplňovat. Pokud to skrýt půjde může se:
***** a/ odpověď měnit nějakým skriptem
***** b/ češtinu prý boti neumí => odpověď: "žluty", "hustědémonskykrutopřísný" :D
***** c/ muže se odpověď kontrolovat nejen na správný řetězec, ale i na počet znaků i na typ (číslo = int)
*************************************/
if ($_POST['check'] != 5) {
echo "<html><head><link rel='stylesheet' type='text/css' href='styl.css' /><title>Smazání příspěvku</title></head>
<div class='okraj'><p><strong>Neodpověděl jsi správně na kontrolní otázku<br>(kontrola proti SPAMU) !</strong></p>";
echo "<p>Okopíruj si tento text (CTRL+C) a vložíš ho (CTRL+V) s již správným kontrolním číslem</p>";
echo "<p><strong>Napsal jsi:</strong></p>";
echo "<p>" . $_POST['textstary'] . "</p>";
//mail("kam@domena.cz", "QB - Kom. BEZ k.o. (domena.cz)", $telomailinfo, "FROM: domena");
echo "<p><a href='guestbook.php'>GO BACK</a></p></div></head></html>";
exit;
}
/* $text= htmlspecialchars(wordwrap($textstary, 68, "\n", 1)); Toto místo 51.řádku (kvůli nedoděl.gravatarum) */
if ($nick == "" || $textstary == "") {
echo "<script language=\"javascript\" type=\"text/javascript\">alert(\"nebyly vyplněny všechny POVINNÉ údaje\");</script>";
//mail("kam@domena.cz", "QB - Nebyly vyplněny všechny povinné údaje (domena.cz)", $telomailinfo, "FROM: domena");
} else {
$query = MySQL_Query("INSERT INTO domena_guestbook VALUES ('', '$nick', '$web', '$mail', '$text', now(), 'obr', '$ip', '$ip_cele')");
if ($query) {
mail("kam@domena.cz", "QB - NEW komentář (domena.cz)", $telomailinfo, "FROM: domena");
}
else
mail("kam@domena.cz", "QB - DB (nepodařilo se vložit data) (domena.cz)", $telomailinfo, "FROM: domena");
@header("Location: guestbook.php");
exit;
}
} // konec sent
echo "<a href='guestbook.php'>GO BACK</a>";
?>
Moc všem diskutujícím děkuji.
--- Doplnění předchozího příspěvku (05 Čer 2014 17:14) ---
Nevím proč se kod neobarvil. Bylo by to přehlednější.
--- Doplnění předchozího příspěvku (05 Čer 2014 17:42) ---
Něco jsem našel na to skrytou odpověď. Moc tomu ale také nerozumím. Jak to implementovat?
Kód: Vybrat vše
<noscript>
<div class="row">
<p><label class="required" for="frmcontactForm-spam">Pro ochranu proti spamu napište do pole číslo ~ 6590 ~</label><br /><input type="text" class="w-full text" name="spam" id="frmcontactForm-spam" required="required" data-nette-rules="{op:':filled',msg:"Mus\u00edte vyplnit ochranu proti spamu."}" value="" />
</p>
</div>
</noscript>
<script type="text/javascript">
<!--
document.write('<input type="hidden" name="spam" value="' + 6590 + '" \/>');
-->
</script>
Asi to funguje tak, že když je vypnutý JS, tak se zobrazí již naformátovaný odstavec s textem informujícím o pravděpodobně nějak vygenerovaném čísle 6590.
Pokud vypnutý JS není, je vložen schovaný input se shodnou hodnotou 6590.
Pravděpodobně se tedy musí po každém odeslání formu a před odesláním do DB nebo emailem i kontrolovat:
- zda je odeslán "input" s jménem "spam" a hodotou "6590".
Jak to udělat opět nevím, ale věřím, že když to sem píšu a já si dal práci s tím, jak SPAM filtrovat, tak že nějaký programátor dříve i později napíše konktrétnější řešení :) . Já mu každopádně poděkuji a pokud bude mít nastavou notivfikaci, přijde mu na email

-
- Mohlo by vás zajímat
- Odpovědi
- Zobrazení
- Poslední příspěvek
-
- 17
- 5506
-
od viktorsavo
Zobrazit poslední příspěvek
10 lis 2024 10:52
-
- 2
- 1982
-
od Alferi
Zobrazit poslední příspěvek
23 kvě 2025 08:49
-
- 0
- 2209
-
od viktorsavo
Zobrazit poslední příspěvek
23 dub 2025 20:40
-
- 0
- 2143
-
od nermitus
Zobrazit poslední příspěvek
17 lis 2024 22:57
-
- 6
- 2770
-
od Alferi
Zobrazit poslední příspěvek
26 říj 2024 19:27
Zpět na “Programování a tvorba webu”
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti