Autor Zpráva
Petr84
Profil *
Při výpisu vždy používám funkci htmlspecialchars(), ale pokud použiju BB kódování, tak se nevypíše např. tučný text ale jen <strong>text</strong>. Jak se tedy ošetřuje takovýto výpis novinek?
martindeveloper
Profil
Pokud to chápu dobře tak novinka obsahuje jak HTML tak BBCode, nu tak nejdříve provědte htmlspecialchars(), tím se ošetříte HTML tagy a BB tagů se to nedotkne a posléze parsujte BBCode.
Petr84
Profil *
martindeveloper
Díky
Petr84
Profil *
Ještě bych se rád zeptal na to jestli mám správně ošetřené vkládání a výpis textu z databáze.

function dbPut($value) {
    if (get_magic_quotes_gpc() == 0) {
        return addslashes($value);
    }
    return $value;
}

if (isset($_POST['odeslat'])) {
$nadpis = $_POST['nadpis'];
$uvod = $_POST['uvod'];
$text = $_POST['text'];

$sql = "INSERT INTO `tabulka`(`nadpis`, `uvod`, `text`) VALUES (\"" . dbPut($nadpis) . "\", \"" . dbPut($uvod) . "\", \"" . dbPut($text) . "\")";
.......
$sql2 = "SELECT * FROM tabulka";
.......
echo htmlspecialchars($row['text']);
tiso
Profil
http://phpfashion.com/escapovani-definitivni-prirucka
Petr84
Profil *
Abych se přiznal tak ten článek mi nic extra neřekl...

Hlavně mi jde o ošetření vstupů, jestli stačí fce dbPut, popř. jestli něco chybí. Díky
martindeveloper
Profil
Zkuste se ještě podívat na mysql_real_escape_string .
Petr84
Profil *
martindeveloper
Ano, přesně o téhle fci jsem si říkal jestli nechybí...

Takže navíc ještě takto:
$nadpis = mysql_real_escape_string($_POST['nadpis']);
$uvod = mysql_real_escape_string($_POST['uvod']);
$text = mysql_real_escape_string($_POST['text']);


Díky
Petr84
Profil *
function dbPut($value) {
    if (get_magic_quotes_gpc() == 0) {
        return addslashes($value);
    }
    return $value;
}

if (isset($_POST['odeslat'])) {
$nadpis = mysqli_real_escape_string($connection, $_POST['nadpis']);
$uvod = mysqli_real_escape_string($connection, $_POST['uvod']);
$text = mysqli_real_escape_string($connection, $_POST['text']);     
}

$sql = "INSERT INTO `tabulka`(`nadpis`, `uvod`, `text`) VALUES (\"" . dbPut($nadpis) . "\", \"" . dbPut($uvod) . "\", \"" . dbPut($text) . "\")";
.......
$sql2 = "SELECT * FROM tabulka";
.......
echo htmlspecialchars($row['nadpis']);
echo htmlspecialchars($row['uvod']);
echo htmlspecialchars($row['text']);


Mohlo by to tedy takto být? A není tam teď zbytečná fce dbPut?
martindeveloper
Profil
if (isset($_POST['odeslat'])) { (...) }
Pokud byl formulář odeslán tak se pouze ošetří proměnné, ale INSERT do DB jde vždy z toho co vidím.
Odeslání INSERTu bych přehodil do té podmínky.

"A není tam teď zbytečná fce dbPut?"
Je
Petr84
Profil *
martindeveloper
Po vymazání fce dbPut a přidání BB kodování pro tučný text mám nasledující chybu: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'color: green'>You have an error in your SQL syntax; check the manual that corres' at line 1

if (isset($_POST['odeslat'])) {
$nadpis = mysqli_real_escape_string($connection, $_POST['nadpis']);
$uvod = mysqli_real_escape_string($connection, $_POST['uvod']);
$text = mysqli_real_escape_string($connection, $_POST['text']);    

$text = Str_Replace("[b]","<strong style='color: green'>",$text);

$sql = "INSERT INTO `tabulka`(`nadpis`, `uvod`, `text`) VALUES ('$nadpis','$uvod','$text')";
.......
$sql2 = "SELECT * FROM tabulka";
.......
echo htmlspecialchars($row['nadpis']);
echo htmlspecialchars($row['uvod']);
echo htmlspecialchars($row['text']);
Petr84
Profil *
Oprava: ještě jeden řádek:

$text = Str_Replace("","<strong style='color: green'>",$text);
$text = Str_Replace("","</strong>",$text);

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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