Strano.
In che senso viene cancellata? Cioè la variabile rimane ma viene eliminato il contenuto (empty()) oppure sparisce proprio, come avviene dopo unset()?
Mi spiego meglio: come determini che è quel codice che fa sparire la variabile? Prova così ad esempio:
Codice PHP:
session_start();
# [...]
//test:
if(isset($_SESSION['valore']))
{
if(empty($_SESSION['valore']))
echo 'esiste ma è vuoto';
else
echo 'esiste e vale: '.$_SESSION['valore'];
}
else echo 'Non esiste!';
// codice incriminato:
foreach ($_POST as $nome => $valore)
{
$valore = str_replace("'","\'", $valore);
$valore = str_replace('"', '"', $valore);
$valore = str_replace("\n","", $valore);
$$nome = $valore;
}
//test:
if(isset($_SESSION['valore']))
{
if(empty($_SESSION['valore']))
echo 'esiste ma è vuoto';
else
echo 'esiste e vale: '.$_SESSION['valore'];
}
else echo 'Non esiste!';
# [...]
Se per caso viene confermato che quel codice elimina il contenuto della sessione, dovresti guardare ogni volta cosa vale $nome
Ciao!