Autor | Zpráva | ||
---|---|---|---|
Jcas Profil * |
#1 · Zasláno: 2. 1. 2011, 18:38:13
Prosím prohlídněte to a prosím poraďte. (Je stažené a nic nemůžu najít)
Jednoduchá reakce se uloží (zkoušel jsem uložit text) Delší reakce, více slov a odstavců se neuloží a chybová $message nevyskočí (také jsem zkoušel-když to neprojde kontrolou, tak chybová $message vyskakuje). Tohle projde normálně, stránka se obnoví (viz. na konci funkce) akorát příspěvek se neuloží. function uloz_prispevek($blacklist, $spamwords) { # odesilame prispevek global $message; if ( isset($_POST['submit']) ) { $_POST['jmeno'] = htmlspecialchars($_POST['jmeno']); # osetrime nebezpecne znaky $_POST['zprava'] = htmlspecialchars($_POST['zprava']); $_POST['web'] = htmlspecialchars($_POST['web']); $_POST['email'] = htmlspecialchars($_POST['email']); $_POST['jmeno'] = trim($_POST['jmeno']); # smazeme bile znaky ze zacatku a konce retezce $_POST['zprava'] = trim($_POST['zprava']); $_POST['web'] = trim($_POST['web']); $_POST['email'] = trim($_POST['email']); $_POST['zprava'] = mb_substr($_POST['zprava'], 0, 1500, 'UTF-8'); # bereme pouze prvnich 1500 znaku if ($_POST['icq'] != "2") # antispam policko, kontroluje se jako prvni return $message = "Buďto jste spam, nebo se naučte sčítat."; if (!empty($_POST['$homepage'])) # dalsi antispam policko, musi zustat prazdne return $message = "Poslední políčko prosím nevyplňujte."; if (strpos($_POST['email'], "@")) # opet antispam, v poli email (ve skutecnosti web) nesmi byt zavinac return $message = "Jste spam. Prosím, nebuďte spam. Děkuji."; if (empty($_POST['jmeno']) or empty($_POST['zprava'])) # jmeno a text jsou povinne return $message = "Nezadali jste jméno, nebo text zprávy."; if (in_array($_SERVER['REMOTE_ADDR'], $blacklist, true) ) # nema nahodou uzivatel ban? return $message = "Je mi líto, ale zasílání příspěvků z Vaší IP adresy bylo zakázáno."; if (substr_count($_POST['zprava'], 'http://') > 10) # pri vice jak 10ti odkazech komentar nepovolime return $message = "Bakanej spam, bakanej. Ale na mě si nepřijdeš :)"; if (substr_count($_POST['zprava'], '**') > 10) # vice jak 10 smajlu nepovolime return $message = "Maximum je 10 smajlů."; if ($_POST['email'] == 'http://' or $_POST['email'] == 'http:/') $_POST['email'] = ""; $zprava_array = explode(" ", $_POST['zprava']); # rozdelime retezec na jednotliva slova $n = count($zprava_array); # zjistime pocet slov $zprava_return = ""; # inicializace vystupni promenne $spamwords_array = explode(" ", $spamwords); # spamwords ulozime do pole $datum = Date("d. " . "+m+ " . "Y, " . "H:i" ); # datum bude mit pekny format $datum = strtr($datum, array('+01+' => 'Ledna', '+02+' => 'Února', '+03+' => 'Března', '+04+' => 'Dubna', '+05+' => 'Května', '+06+' => 'Června', '+07+' => 'Července', '+08+' => 'Srpna', '+09+' => 'Září', '+10+' => 'Října', '+11+' => 'Listopadu', '+12+' => 'Prosince')); if (isset($_GET['reaguj'])) { # je prispevek reakci? $kontrola = mysql_query("SELECT `id` FROM `knizka_2` WHERE `id` = ".intval($_GET['reaguj'])." AND `r`=0"); # reagujeme na skutecny prispevek? mysql_num_rows($kontrola)>0 ? $reaguj = $_GET['reaguj'] : $reaguj = 0; } else { $reaguj = 0; } for ($i = 0; $i <= $n-1; $i++) { # zkontrolujeme kazde slovo $zprava_array_lower = strtolower($zprava_array[$i]); if ( in_array($zprava_array_lower, $spamwords_array, true) ) # zkontrolujeme spamwords return $message = "Komentář nebyl uložen. Použili jste některé z nepovolených slov: $spamwords"; $zprava_array[$i] = wordwrap($zprava_array[$i], 50, "-", 1); # slova delsi nez 40 znaku rozdelime $zprava_return .= $zprava_array[$i] . " "; } mysql_query("INSERT into `knizka_2` VALUES('', '{$_POST['jmeno']}', '$zprava_return', '$datum', '{$_POST['web']}', '{$_POST['email']}', '{$_SERVER['REMOTE_ADDR']}', '$reaguj')"); # ulozime do databaze ?> <meta http-equiv="Refresh" content="1 ; URL=http://www.zocschmoravskebranice.eu/index.php?page=guestbook"><?php # obnovime stranku, osetreni pred duplicitnim odeslanim prispevku } return true; } |
||
Jcas Profil * |
#2 · Zasláno: 2. 1. 2011, 18:54:38
for ($i = 0; $i <= $n-1; $i++) { # zkontrolujeme kazde slovo $zprava_array_lower = strtolower($zprava_array[$i]); if ( in_array($zprava_array_lower, $spamwords_array, true) ) # zkontrolujeme spamwords return $message = "Komentář nebyl uložen. Použili jste některé z nepovolených slov: $spamwords"; $zprava_array[$i] = wordwrap($zprava_array[$i], 50, "-", 1); # slova delsi nez 40 znaku rozdelime $zprava_return .= $zprava_array[$i] . " "; } Když tohle zakomentuju, tak se to uloží, i když s prázdným textem. Proč se neuloží text je jasné, ale co tohle přesně dělá. |
||
Jcas Profil * |
#3 · Zasláno: 2. 1. 2011, 19:21:53
To vypadá, jako by nesnesl dlouhý text.
|
||
fanos Profil |
#4 · Zasláno: 2. 1. 2011, 19:51:08
co vrátí funkce mysql_error() ?
|
||
Jcas Profil * |
#5 · Zasláno: 4. 1. 2011, 05:57:00
si nejsem jist, jak (kam ) vložit mysql_error()
|
||
Keeehi Profil |
#6 · Zasláno: 4. 1. 2011, 06:43:33
44 a 109
echo mysql_error(); |
||
Jcas Profil * |
#7 · Zasláno: 5. 1. 2011, 04:10:39
echo mysql_error(); - tohle vím, ale nevím kam to do stránek vložit (vzhledem k obnovení stránky)
Jsou to uvozovky. Mohu poprosit někoho, aby mi napsal odchycení "" a vyhození message "nepoužívejte uvozovky" děkuji |
||
Tori Profil |
#8 · Zasláno: 5. 1. 2011, 08:49:34
Jcas:
„message "nepoužívejte uvozovky"“ Spíš bych doporučila ošetřit vstupy z formuláře, tj. všechny proměnné $_POST['neco'] a $zprava_return obalit funkcí mysql_real_escape_string. |
||
pcmanik Profil |
#9 · Zasláno: 5. 1. 2011, 11:24:49 · Upravil/a: pcmanik
Par vyhrad proti tvojmu skriptu:
1. Tymto nezistis realnu ip adresu - $_SERVER['REMOTE_ADDR'] 2. Funkcia htmlspecialchars() 3. asi by si o tom mal dat aj uzivatelovy vedet, ak tam napise viac ako je povolene. mb_substr($_POST['zprava'], 0, 1500, 'UTF-8') |
||
Keeehi Profil |
#10 · Zasláno: 5. 1. 2011, 14:42:44
Jcas:
„ale nevím kam to do stránek vložit (vzhledem k obnovení stránky)“ Zřejmě jsi nepochopil, že čísla 44 a 109 jsou čísla řádků v kódu z [#1]. Kdyby jsi chtěl vědět proč, tak proto, že na předchozích rádcích je funkce mysql_query() - takže jinak řečeno mysql_error přijde za každý mysql_query.
|
||
Časová prodleva: 14 let
|
0