Re: [PHP] Re: array to var - with different name

2011-01-21 Thread Shawn McKenzie


On 01/20/2011 05:26 PM, Tommy Pham wrote:
> On Thu, Jan 20, 2011 at 2:49 PM, Shawn McKenzie  wrote:
>> On 01/20/2011 04:28 PM, Donovan Brooke wrote:
>>> Hello again!
>>>
>>> I'm trying to find a good way to convert array key/value's to
>>> variable name values... but with the caveat of the name being
>>> slightly different than the original key
>>> (to fit my naming conventions).
>>>
>>> first, I (tediously) did this:
>>>
>>> ---
>>> if (isset($_GET['f_action'])) {
>>>   $t_action = $_GET['f_action'];
>>> }
>>>
>>> if (isset($_POST['f_action'])) {
>>>   $t_action = $_POST['f_action'];
>>> }
>>>
>>> if (isset($_GET['f_ap'])) {
>>>   $t_ap = $_GET['f_ap'];
>>> }
>>>
>>> if (isset($_POST['f_ap'])) {
>>>   $t_ap = $_POST['f_ap'];
>>> }
>>> ---
>>>
>>> Instead, I wanted to find *all* incoming "f_" keys in the POST/GET
>>> array, and convert them to a variable name consisting of "t_" in one
>>> statement.
>>>
>>> I then did this test and it appears to work (sorry for email line breaks):
>>>
>>> -
>>> $a_formvars = array('f_1' => '1','f_2' => '2','f_3' => '3','f_4' =>
>>> '4','f_5' => '5','f_6' => '6',);
>>>
>>> $t_string = "";
>>> foreach ($a_formvars as $key => $value) {
>>>   if (substr($key,0,2) == 'f_') {
>>> $t_string = $t_string . "t_" . substr($key,2) . "=$value&";
>>> parse_str($t_string);
>>>   }
>>> }
>>> -
>>>
>>> I figure I can adapt the above by doing something like:
>>>
>>> $a_formvars = array_merge($_POST,$_GET);
>>>
>>> However, I thought I'd check with you all to see if there is something
>>> I'm missing. I don't speak PHP that well and there may be an easier way.
>>>
>>> Thanks,
>>> Donovan
>>>
>>>
>> I'm sure you have a good reason for doing this?  It is needlessly adding
>> complexity, but here is a one liner (not tested):
>>
>> extract(array_combine(str_replace('f_', 't_', array_keys($_POST)),
>> array_values($_POST)));
>>
>> --
>> Thanks!
>> -Shawn
>> http://www.spidean.com
>>
> That will fail if by chance that he has a form name set to
> a_f_something or similar along the line. Or a possible attack that
> comes in the form submission.
>
> Regards,
> Tommy
>
Yes, so maybe a simple preg_replace():

extract(array_combine(preg_replace('/^f_/', 't_', array_keys($_POST)),
array_values($_POST)));

You could also just replace with '' and then use the extract prefix of 't'.

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] Re: array to var - with different name

2011-01-20 Thread Tommy Pham
On Thu, Jan 20, 2011 at 2:49 PM, Shawn McKenzie  wrote:
> On 01/20/2011 04:28 PM, Donovan Brooke wrote:
>> Hello again!
>>
>> I'm trying to find a good way to convert array key/value's to
>> variable name values... but with the caveat of the name being
>> slightly different than the original key
>> (to fit my naming conventions).
>>
>> first, I (tediously) did this:
>>
>> ---
>> if (isset($_GET['f_action'])) {
>>   $t_action = $_GET['f_action'];
>> }
>>
>> if (isset($_POST['f_action'])) {
>>   $t_action = $_POST['f_action'];
>> }
>>
>> if (isset($_GET['f_ap'])) {
>>   $t_ap = $_GET['f_ap'];
>> }
>>
>> if (isset($_POST['f_ap'])) {
>>   $t_ap = $_POST['f_ap'];
>> }
>> ---
>>
>> Instead, I wanted to find *all* incoming "f_" keys in the POST/GET
>> array, and convert them to a variable name consisting of "t_" in one
>> statement.
>>
>> I then did this test and it appears to work (sorry for email line breaks):
>>
>> -
>> $a_formvars = array('f_1' => '1','f_2' => '2','f_3' => '3','f_4' =>
>> '4','f_5' => '5','f_6' => '6',);
>>
>> $t_string = "";
>> foreach ($a_formvars as $key => $value) {
>>   if (substr($key,0,2) == 'f_') {
>>     $t_string = $t_string . "t_" . substr($key,2) . "=$value&";
>>     parse_str($t_string);
>>   }
>> }
>> -
>>
>> I figure I can adapt the above by doing something like:
>>
>> $a_formvars = array_merge($_POST,$_GET);
>>
>> However, I thought I'd check with you all to see if there is something
>> I'm missing. I don't speak PHP that well and there may be an easier way.
>>
>> Thanks,
>> Donovan
>>
>>
>
> I'm sure you have a good reason for doing this?  It is needlessly adding
> complexity, but here is a one liner (not tested):
>
> extract(array_combine(str_replace('f_', 't_', array_keys($_POST)),
> array_values($_POST)));
>
> --
> Thanks!
> -Shawn
> http://www.spidean.com
>

That will fail if by chance that he has a form name set to
a_f_something or similar along the line. Or a possible attack that
comes in the form submission.

Regards,
Tommy

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[PHP] Re: array to var - with different name

2011-01-20 Thread Shawn McKenzie
On 01/20/2011 04:28 PM, Donovan Brooke wrote:
> Hello again!
> 
> I'm trying to find a good way to convert array key/value's to
> variable name values... but with the caveat of the name being
> slightly different than the original key
> (to fit my naming conventions).
> 
> first, I (tediously) did this:
> 
> ---
> if (isset($_GET['f_action'])) {
>   $t_action = $_GET['f_action'];
> }
> 
> if (isset($_POST['f_action'])) {
>   $t_action = $_POST['f_action'];
> }
> 
> if (isset($_GET['f_ap'])) {
>   $t_ap = $_GET['f_ap'];
> }
> 
> if (isset($_POST['f_ap'])) {
>   $t_ap = $_POST['f_ap'];
> }
> ---
> 
> Instead, I wanted to find *all* incoming "f_" keys in the POST/GET
> array, and convert them to a variable name consisting of "t_" in one
> statement.
> 
> I then did this test and it appears to work (sorry for email line breaks):
> 
> -
> $a_formvars = array('f_1' => '1','f_2' => '2','f_3' => '3','f_4' =>
> '4','f_5' => '5','f_6' => '6',);
> 
> $t_string = "";
> foreach ($a_formvars as $key => $value) {
>   if (substr($key,0,2) == 'f_') {
> $t_string = $t_string . "t_" . substr($key,2) . "=$value&";
> parse_str($t_string);
>   }
> }
> -
> 
> I figure I can adapt the above by doing something like:
> 
> $a_formvars = array_merge($_POST,$_GET);
> 
> However, I thought I'd check with you all to see if there is something
> I'm missing. I don't speak PHP that well and there may be an easier way.
> 
> Thanks,
> Donovan
> 
> 

I'm sure you have a good reason for doing this?  It is needlessly adding
complexity, but here is a one liner (not tested):

extract(array_combine(str_replace('f_', 't_', array_keys($_POST)),
array_values($_POST)));

-- 
Thanks!
-Shawn
http://www.spidean.com

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php