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: 15 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0