addslashes více proměnných současně?
14 příspěvků
Archiv diskusního fóra
Fórum je uzavřené a slouží pouze ke čtení. Některé informace mohou být zastaralé.
-
Začínám magořit z escapování v PHP, tak volám SOS ;-). Dokud vše běželo na serveru, kde je zapnutá volba gpc, nebyl problém. Po přesunu na jiný server s vypnutým gpc začal dělat problém apostrof ve zprávě. Řeším.... if (!get_magic_quotes_gpc()) {$zprava = addslashes($zprava);} Jak ale escapovat celý formulář, ne jen políčko "Zpráva"? Formulář používá... <FORM method="post" action="<?php echo $PHP_SELF ?>" name="form" enctype="multipart/form-data"> Předem díky za tip
-
jak asi, proste volas addslashes pro vsechny promeny if (!get_magic_quotes_gpc()) { $zprava = addslashes($zprava); $jmeno=addslashes($jmeno); $email=addslashes($email); ... ... }
-
Dali: if (!get_magic_quotes_gpc()) { $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST, &$_FILES); while (list($key, $val) = each($process)) { foreach ($val as $k => $v) { unset($process[$key][$k]); if (is_array($v)) { $process[$key][($key < 5 ? $k : addslashes($k))] = $v; $process[] =& $process[$key][($key < 5 ? $k : addslashes($k))]; } else { $process[$key][addslashes($k)] = addslashes($v); } } } } ošetříš s tím veškeré vstupy do skriptu.
-
Jo, to je přesně ono. Nechci vypisovat všechny proměnné (jak radí Mike), některé formuláře jsou hodně rozsáhlé... Ten kód mi ale nefunguje. SQL dotaz skončí na hlášce "nejde to" ;-( Proč je tam to <5 ? // --- upravení řádku - formulář odeslat -------------------------------------- elseif ($tl_uprav) {$cas = date ("H:i:s"); $datum = date ("Y-m-d"); if (!get_magic_quotes_gpc()) {$process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST, &$_FILES); while (list($key, $val) = each($process)) {foreach ($val as $k => $v) {unset($process[$key][$k]); if (is_array($v)) {$process[$key][($key < 5 ? $k : addslashes($k))] = $v; $process[] =& $process[$key][($key < 5 ? $k : addslashes($k))]; } else {$process[$key][addslashes($k)] = addslashes($v); } } } } $sql = "UPDATE t_tabule SET datum='$datum',cas='$cas',od='$od',komu='$komu',zprava='$zprava',priloha='$priloha' WHERE id_zpravy='$id_zpravy'" ; $start = mysql_query($sql) or die ("nejde to"); echo "<br><br><br><br><br><br><br><H2 align=center>Upravuji obsah zprávy č. $id_zpravy</H2>\n"; echo "<META HTTP-EQUIV='Refresh' CONTENT='1; URL=tabule.php'> "; }
-
Místo toho or die("nejde to") napiš or die (MySQL_Error()); a potom se zařiď podle chybové hlášky, kterou ti to vypíše ...
-
Vyhodí to... You have an error in your SQL syntax near 'a '',priloha='' WHERE id_zpravy='91'' at line 1 zkrátka potíž s apostrofem, jako by tam žádné "addslashes" kontrolovadlo nebylo :-(
-
A jak vypadá celý SQL dotaz?
-
Viz. výše $sql = "UPDATE t_tabule SET datum='$datum',cas='$cas',od='$od',komu='$komu',zprava='$zprava',priloha='$priloha' WHERE id_zpravy='$id_zpravy'" ; $start = mysql_query($sql) or die ("nejde to"); echo "<br><br><br><br><br><br><br><H2 align=center>Upravuji obsah zprávy č. $id_zpravy</H2>\n"; echo "<META HTTP-EQUIV='Refresh' CONTENT='1; URL=tabule.php'> "; Upravoval jsem $zprávu s textem: pokus2 ' a '
-
Aha ... takže asi vím, kde bude problém: ty proměnné bereš kde? To jsou uživatelské vstupy (formuláře, odkazy, ...) ? Protože ta sranda, co jsem prezentoval výše ošetřuje POUZE uživatelské vstupy. Pokud ty proměnné bereš někde jinde, tak je můžeš dát do pole, třeba $_VARS['cas'], $_VARS['od'], ... a do té srandy přidat $_VARS.
-
Proměnné beru z formuláře, který se odesílá metodou POST. Žil jsem v představě, že se dostávají do té proměnné $_POST ? <FORM method="post" action="<?php echo $PHP_SELF ?>" name="form" enctype="multipart/form-data"> <FIELDSET><LEGEND>Tabule - úprava zprávy č. <?php echo $id_zpravy ?></LEGEND><br> <table> <tr> <td><font color=Gray>Od:</font><br><input type="Text" name="od" readonly value="<?php echo $_SESSION['S_login'] ?>"></td> <td rowspan=2>Zpráva:<br><textarea name="zprava" rows="4" tabindex="2" cols="60" onKeyUp="over();" onpropertychange="over();" onChange="over();"><?php echo $zprava ?></textarea></td> <script> function over() {c=document.form.zprava.value.length; f=document.form.zprava.value; if (c<=250) {document.form.cislo.value=250-c;document.form.cislo2.value=c;} if (c>=250) {window.alert("Délka Vašeho textu přesahuje 250 znaků, ořezávám konec textu!");} if (c>250) {document.form.zprava.value=f.substring(0,250);} } </script> <td><font color=Gray>Příloha:</font><br><input type="text" name="priloha" readonly value="<?php echo $priloha ?>"></td> </tr><tr> <td>Komu:<br><input type="Text" name="komu" tabindex="1" maxlength="20" value="<?php echo $komu ?>"></td> <td><br><input type="hidden" name="id_zpravy" size="5" readonly value="<?php echo $id_zpravy ?>"> Můžete zapsat: <input type="text" name="cislo" size="3" value="250"> znaků, <input type="text" name="cislo2" size="3" value="0">je už zapsáno.</td> </tr><tr> <td><br><input type="submit" name="tl_uprav" tabindex="3" value=" Uprav zprávu "></td> <td>Pro vložení odkazu použijte zápis adresy ve tvaru <B>http://.....</B></td> </tr> </table> </FIELDSET> </FORM>
-
Tak to zkus s proměnnými z $_POST.
-
error_reporting(E_ALL); echo "<hr>$sql<hr>"; $start = mysql_query($sql) or die ("nejde to".mysql_error());
-
HURÁÁÁ :-) už z toho počítače asi špatně vidím.... Problém byl v tom, že jsem měl v SQL dotazu proměnné $zprava... a ne $_POST[zprava]... Nakonec mi pro ošetření všech proměnných z formuláře stačí těchto pár řádek: if (!get_magic_quotes_gpc()) { foreach ($_POST as $index => $hodnota) { $_POST[$index] = addslashes($_POST[$index]); } } Až podezřele snadné, nepřehlédl jsem něco?
-
Pokud budeš používat "advanced" formuláře, tak s tímhle neuspěješ. Někdy v budoucnu uděláš na stránkách nějakou změnu a budeš línej pojmenovávat několik obdobných políček, tak tam vrazíš name="nazev[]" a problém je na světě.