addslashes více proměnných současně?

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ě.