On 3 October 2011 14:30, Jim Giner <[email protected]> wrote:
> Thanks for the code sample - a little more complex than I've ever used. Can
> you explain something for me?
>
> The first "unset" line - what is it doing? If it is removing the item from
> the $process array, then how can you then reference the value ($v) in the
> very next line? I must be missing something.
>
> Also - I don't see the need to be stripping slashes from the $k
> (keys/indices?) elements. What am I missing there?
>
> As I said - the lines are a something new to me and I may not be
> interpreting what is going on here. Basically I see that you are processing
> all of the arrays (GET,POST, etc) at once, doing each one in turn. For each
> one, you then get down to the values returned to the script as a $k/$v pair
> which you then check to see if it is in itself an array.(although you ask if
> $v is an array, while I would have thought you'd ask if $k was an array).
> Once you get to the basest element you remove the slashes.
>
> Thanks again - still waiting on my host company to get back to me - they've
> escalated the problem of not being able to turn the quotes off. Hmmm....
<?php
// Are magic quotes enabled?
if (get_magic_quotes_gpc()) {
// Create an array of refererences to the GET, POST, COOKIE and
REQUEST super-globals.
// Because these are references, any changes made to $process will
also be reflected
// in the GET, POST, COOKIE and REQUEST super-globals.
$process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
// Iterate each element in $process, creating $key and $val
// $key is the index of $process and $val is the referenced
super-global array.
while (list($key, $val) = each($process)) {
// Iterate $val (the super global array), creating $k and $v
// $k is the name of the entry in the super-global and $v is the value.
foreach ($val as $k => $v) {
// Remove the entry from the super-global.
unset($process[$key][$k]);
// Is the value an array.
if (is_array($v)) {
// Insert the value back into the super-global, but
strip slashes from the key.
$process[$key][stripslashes($k)] = $v;
// Because the value is an array, we don't want to
process it here.
// Instead, append a reference to the value to the
$process array.
// It will be picked up after the other super-globals
are processed by the while() line.
$process[] = &$process[$key][stripslashes($k)];
} else {
// As the value is not an array, insert the stripped
value back into the super-global,
// using a stripped key.
$process[$key][stripslashes($k)] = stripslashes($v);
}
}
}
// All done, so remove $process also.
unset($process);
}
?>
--
Richard Quadling
Twitter : EE : Zend : PHPDoc
@RQuadling : e-e.com/M_248814.html : bit.ly/9O8vFY : bit.ly/lFnVea
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php