Autor Zpráva
Jcas
Profil *
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 *
       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 *
To vypadá, jako by nesnesl dlouhý text.
fanos
Profil
co vrátí funkce mysql_error() ?
Jcas
Profil *
si nejsem jist, jak (kam ) vložit mysql_error()
Keeehi
Profil
44 a 109
echo mysql_error();
Jcas
Profil *
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
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
Par vyhrad proti tvojmu skriptu:

1. Tymto nezistis realnu ip adresu -
$_SERVER['REMOTE_ADDR']

2. Funkcia
htmlspecialchars() 
sa pouziva az pri vypise z DB

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

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: