Autor Zpráva
ladder
Profil
Čaute...

Programujem admin pre vkladanie takéhoto embed kódu do databáze:

<object width="250" height="40" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="gsSong3541847685" name="gsSong3541847685"><param name="movie" value="http://grooveshark.com/songWidget.swf" /><param name="wmode" value="window" /><param name="allowScriptAccess" value="always" /><param name="flashvars" value="hostname=cowbell.grooveshark.com&songIDs=35418476&style=metal&p=0" /><object type="application/x-shockwave-flash" data="http://grooveshark.com/songWidget.swf" width="250" height="40"><param name="wmode" value="window" /><param name="allowScriptAccess" value="always" /><param name="flashvars" value="hostname=cowbell.grooveshark.com&songIDs=35418476&style=metal&p=0" /><span>Rolling In The Deep by <a href="http://grooveshark.com/artist/Adele/71827" title="Adele">Adele</a> on Grooveshark</span></object></object>

Pred tým ako pošlem query ešte replacnem " za \".

$player = str_replace('"','\"',$_GET['player']);

Problém je však ešte stále so znakom & (ampersand). Do databáze sa zapíše iba po prvý ampersand:

<object width="250" height="40" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="gsSong3541847685" name="gsSong3541847685"><param name="movie" value="http://grooveshark.com/songWidget.swf" /><param name="wmode" value="window" /><param name="allowScriptAccess" value="always" /><param name="flashvars" value="hostname=cowbell.grooveshark.com

Potrebujem ho teda zameniť za html entitu %26. str_replace("&","%26",$player) nefunguje, htmlentities($player) nemôžem použiť, lebo ten mi zmení aj <, > a ", čo nechcem.

Vie mi niekto prosím pomôcť? Vopred ďakujem.
Darker
Profil
ladder:
Pred tým ako pošlem query ešte replacnem " za \".
Pořád se tvoje databáze dá nabourat pomocí \. Raději používej mysql_real_escape_string.
ladder
Profil
Okey, skúsil som mysql_real_escape_string. Ale & to aj tak nerieši... problém ostáva.
panther
Profil
ladder:
data taháš z GET, v dané GET proměnná je string před následujícím ampersandem. Za ním následuje další proměnná. Takže, žádný problém nemáš, jen nechápeš základní práce s polem GET. Doporučuji dostudovat.
ladder
Profil
Asi máš pravdu, nechápem... nechápem ani čo máš na mysli ty. Sorry, som v PHP len junior. Dáta posielam z admin.php do spracuj.php cez ajax...

Ak som správne pochopil čo vravíš ty, tak sme sa asi len nedorozumeli, kvôli tomu, že som dal $player = str_replace('"','\"',$_GET['player']); a potom uvádzal už len str_replace("&","%26",$player). Ale na tom nezáleží. Ide o tú istú premennú. Podstatné je, že treba zameniť ampersandy za %26 a je jedno, či obsah premennej ťahám z GET alebo nie.

$player = str_replace('"','\"',$_GET['player']);
$player = str_replace('&','%26',$player);
        
mysql_query("INSERT INTO data (player) VALUES ('" . $player . "')";
LaMMa
Profil
ladder:
ampersandom sa v adrese oddelujú jednotlivé premenné, preto získaš vždy len dáta po prvý &.
Riešením by bolo zamenit & za %26 ešte pred odoslaním do spracuj.php
ladder
Profil
LaMMa:
No jasné! :) Vďaka... už chápem. :) Že mi to nedošlo...
Darker
Profil
Daleko lepší nápad je použít POST.

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: