| Autor | Zpráva | ||
|---|---|---|---|
| Nookyn Profil |
#1 · Zasláno: 29. 8. 2009, 17:06:38 · Upravil/a: Nookyn
Zdarec, udělal jsem si návštěvní knihu zde. Ale pořád mam jeden a ten samej problém, HTML je povolené i tam mam funkci htmlspecialchars. Help me pls
<h1>Návštěvní kniha</h1>
<hr>
<?php
//databáze, skript pro upravení
$datum = StrFTime("%d/%m/%Y %H:%M:%S", Time());
$ip = $_SERVER["REMOTE_ADDR"];
//pokud je zmáčknuto tlačítko Přidat
if (isset($_POST['pridat']))
{
//vybereme nejvetěí ID
$ID=mysql_query("SELECT ID FROM kniha ORDER BY ID DESC LIMIT 1");
$ID=mysql_fetch_array($ID);
//nové ID je o jedna větší než to největší současné
$ID=$ID['ID']+1;
//ošetříme data
$nick = htmlspecialchars($nick);
$text = htmlspecialchars($text);
$text = nl2br($text);
$nick=mysql_real_escape_string($_POST['nick']);
$text=mysql_real_escape_string($_POST['text']);
$datum=mysql_real_escape_string($_POST['datum']);
$ip=mysql_real_escape_string($_POST['ip']);
mysql_query("INSERT INTO kniha (ID,nick,text,datum,ip) VALUES
('$ID','$nick','$text','$datum','$ip')");
}
echo("<table><form method='post'>");
echo("<tr><td><input type='hidden' name='ip' value='$ip'></td></tr>");
echo("<tr><td><input type='hidden' name='datum' value='$datum'></td></tr>");
echo("<tr><td><b><span style='font-size: 12px;'>Nick:</span></b> </td><td><input type='text' name='nick' maxlength = '50'></td></tr>");
echo("<tr><td></td><td><textarea name='text' rows ='5' cols='75'></textarea></td></tr>");
echo("</table>");
echo("<input type='submit' name='pridat' value='Přidat příspěvek'>");
echo("</form>");
?>
<br><br><br><br>
<table>
<?php
echo(stripslashes($Vypis));
$clanky = mysql_query('SELECT * FROM `kniha`');
$vysled = mysql_fetch_array($Vyber);
$Vyber = mysql_query('SELECT * FROM `kniha` ORDER BY ID DESC LIMIT 10');
while ($Vypis = mysql_fetch_array($Vyber)){
$Vypis["text"] = stripslashes($Vypis["text"]);
$Vypis["nick"] = stripslashes($Vypis["nick"]);
echo("
<tr>
<td><span style='color: #0067a9; font-weight: bold; font-size: 15'>".$Vypis['nick']."</span> ".$Vypis['datum']." ".$Vypis['ip']."</td>
</tr>
<tr>
<td>".$Vypis['text']."</td>
</tr>
");
}
?>
</table>
|
||
| denCo Profil |
#2 · Zasláno: 29. 8. 2009, 17:13:16
ta funkcia ti nechcene znaky zameni za entity, napr. znak < ti premenny za < ... ale zobrazi ti to ako keby napises obycajne <
|
||
| Nookyn Profil |
#3 · Zasláno: 29. 8. 2009, 21:28:02
Ale já potřebuji vědět jak ten problém odstranim :-D, prostě potřebuji proměnit znaky za entity! :-(
|
||
| Jan Tvrdík Profil |
#4 · Zasláno: 29. 8. 2009, 21:39:12 · Upravil/a: Jan Tvrdík
//ošetříme data $nick = htmlspecialchars($nick); $text = htmlspecialchars($text); $text = nl2br($text); $nick=mysql_real_escape_string($nick); // vyhozeno $_POST $text=mysql_real_escape_string($text); // tady taky $datum=mysql_real_escape_string($_POST['datum']); $ip=mysql_real_escape_string($_POST['ip']); |
||
| Alphard Profil |
#5 · Zasláno: 29. 8. 2009, 21:56:36
Nookyn:
Jste si jist, že chcete přenášet ip a datum v hidden inputu? Tohle jde lehce podvrhnout. A ten váš neatomický výpočet id na tři řádky by šel elegantně řešit s auto_increment. |
||
| Nookyn Profil |
#6 · Zasláno: 29. 8. 2009, 22:13:34
Jane, podle toho co jsi sem dal to nejde...
|
||
| Alphard Profil |
#7 · Zasláno: 29. 8. 2009, 22:20:29
Nookyn:
„Jane, podle toho co jsi sem dal to nejde...“ Buďte konkrétnější, jak nejde? Na 21. řádku je první výskyt $nick, takže by mělo být $_POST['nick'] a dále analogicky. |
||
| tiso Profil |
#8 · Zasláno: 30. 8. 2009, 00:39:09
Nookyn: a tvoj problém je aký? Nepochopil som to z tvojho popisu ani z tvojho kódu.
|
||
| AM_ Profil |
#9 · Zasláno: 30. 8. 2009, 12:08:36
Tohle je strašné,
-jak píše Alphard, přenášení IP a datumu přes formulář mě děsí - proč to přenášet, když to lze zjistit rovnou v PHP? -na řádku 48 vypisuješ proměnou Vypis, která ještě není založená -kde bereš proměnnou $nick a $text? viz řádek 21-28 - stejně ji přepíšeš hodnotami z $_POST proto to zřejmě nefunguje - htmlspecialchars voláš na ještě nezaložené proměnné, takže nemají žádný vliv a ještě budou vyhazovat notice -vzhledem k tomu, že máš zřejmě zaplé magic_quotes_gpc, nemusíš vůbec volat mysql_real_escape_string a následně po vytažení z databáze stripslashes -zajímalo by mě, proč kus HTML vypíšeš pomocí echo, pak ukončíš PHP blok a další HTML kód vypisuješ mimo něj - vypisoval bych vše mimo, ale hlavně to sjednotit |
||
| denCo Profil |
#10 · Zasláno: 30. 8. 2009, 20:04:04
„Ale já potřebuji vědět jak ten problém odstranim :-D, prostě potřebuji proměnit znaky za entity! :-(“
to je kravina, co ked niekto chce napisat 3 < 5 ??? alebo jednoducho ak ti tak velmi na tom zalezi tak pouzi funkciu ktora ti zameni nejaky znak za iny znak |
||
| SwimX Profil |
#11 · Zasláno: 30. 8. 2009, 20:58:46
denCo:
„to je kravina, co ked niekto chce napisat 3 < 5 ???“ no tak se do DB uloži 3 < 5 a při výpisu si to prohlíeč převede a zobrazí 3 < 5 vždyť je to dobře, a je dobře že to dělá, jinak by mu tam někdo vložil "nebezpečný kód" <script>while(true)alert('a');</script>„alebo jednoducho ak ti tak velmi na tom zalezi tak pouzi funkciu ktora ti zameni nejaky znak za iny znak“ a proč by vypisoval str_replace(array(">", "<", ...), array("<", ">", ...));Přemýšlej než napíšeš takovou blbost s tolika otazníky. |
||
| AM_ Profil |
#12 · Zasláno: 30. 8. 2009, 22:39:10
denCo, SwimX:
tazatel se akorat poradne nevyjadril, jeho problem je tento: - htmlspecialchars tam ma, ale na spatnem miste, takze se de facto neaplikuje (aplikuje ho na neinicializovanou promennou $jmeno a v nasledujicim radku jeste prepise $_POST['jmeno'], proste obracene poradi instrukci), ale z napsaneho dotazu to nekteri pochopili tak, ze htmlspecialchars mu bezi, ale vadi mu, ze < se zobrazi jako <. Ja nejdriv taky, ale pak jsem pohledl na ten kod a videl problem. |
||
| Nookyn Profil |
#13 · Zasláno: 31. 8. 2009, 09:18:08 · Upravil/a: Nookyn
Hele, už to funguje (najdete zde), opravil mi to kámoš General, ale jinak moc dík za rady... a sry za otravování...
ŘEŠENÍ: <h1>Návštěvní kniha</h1>
<hr>
<?php
//pokud je zmáčknuto tlačítko Přidat
if (isset($_POST['pridat']))
{
//vybereme nejvetěí ID
$ID=mysql_query("SELECT ID FROM kniha ORDER BY ID DESC LIMIT 1");
$ID=mysql_fetch_array($ID);
//nové ID je o jedna větší než to největší současné
$ID=$ID['ID']+1;
//ošetříme data
$nick = htmlspecialchars($_POST["nick"]);
$text = htmlspecialchars($_POST["text"]);
$text = nl2br($text);
$nick = mysql_real_escape_string($nick);
$text = mysql_real_escape_string($text);
$datum = StrFTime("%d.%m.%Y %H:%M:%S", Time());
$ip = $_SERVER["REMOTE_ADDR"];
mysql_query("INSERT INTO kniha (ID,nick,text,datum,ip) VALUES
('$ID','$nick','$text','$datum','$ip')");
}
echo("<table><form method='post'>");
echo("<tr><td><b><span style='font-size: 12px;'>Nick:</span></b> </td><td><input type='text' name='nick' maxlength = '50'></td></tr>");
echo("<tr><td></td><td><textarea name='text' rows ='5' cols='75'></textarea></td></tr>");
echo("</table>");
echo("<input type='submit' name='pridat' value='Přidat příspěvek'>");
echo("</form>");
?>
<br><br><br><br>
<table>
<?php
echo(stripslashes($Vypis));
$clanky = mysql_query('SELECT * FROM `kniha`');
$vysled = mysql_fetch_array($Vyber);
$Vyber = mysql_query('SELECT * FROM `kniha` ORDER BY ID DESC LIMIT 10');
while ($Vypis = mysql_fetch_array($Vyber)){
$Vypis["text"] = stripslashes($Vypis["text"]);
$Vypis["nick"] = stripslashes($Vypis["nick"]);
echo("
<tr>
<td><span style='color: #0067a9; font-weight: bold; font-size: 15'>".$Vypis['nick']."</span> ".$Vypis['datum']." ".$Vypis['ip']."</td>
</tr>
<tr>
<td>".$Vypis['text']."</td>
</tr>
");
}
?>
</table> |
||
|
Časová prodleva: 16 let
|
|||
Toto téma je uzamčeno. Odpověď nelze zaslat.
0