using a foreach loop to initialize variables

后端 未结 4 767
抹茶落季
抹茶落季 2021-01-16 08:22

I have built an empty associative array whos keynames refer to submitted post data. I can capture the postdata just fine, but I run into trouble trying to instantiate varia

相关标签:
4条回答
  • 2021-01-16 08:47

    You're not accessing $_POST at all, so all you're doing is taking some array members you defined yourself, filtering them for harmful POST characters (why would you attempt to inject your own code?) and then creating a new array from those self-defined key values.

    If I'm guessing right at what you want, it should be this:

    foreach(array_keys($insArray) as $key) {
        $insArray[$key] = stripslashes(filter_input(INPUT_POST, $_POST[$key]));
    }
    

    The use of stripslashes suggests that you're on a braindead version of PHP which has magic_quotes enable. You should upgrade to a modern version of PHP and/or turn them off.

    0 讨论(0)
  • 2021-01-16 08:52

    The solution is change

    $key = stripslashes(filter_input(INPUT_POST, $key));
    

    to

    $$key = stripslashes(filter_input(INPUT_POST, $key));
    

    See http://www.php.net/manual/en/language.variables.variable.php

    Also, recheck your code, which are doing some mistakes..

    0 讨论(0)
  • 2021-01-16 09:02

    If I understand you correctly, Im going to suggest this approach:

    $defaultValues = array('rUsername'=>'', 'rPass'=>'', 'rQuestion'=>'', 'rAnswer'=>'', 'rFName'=>'', 'rLName'=>'', 'rBDateD'=>'', 'rBDateM'=>'', 'rBDateY'=>'', 'rHCheck'=>'', 'rHCeckOption'=>'', 'rEmail'=>'');
    $values = array_map('stripslashes', array_merge($defaultValues, array_filter($_POST)));
    extract($values, EXTR_SKIP);
    echo $rUsername;
    echo $rPass;
    .........
    

    By using the snippet above, you have to take into account the following

    • Im using the extract function with EXTR_SKIP so you dont overwrite existing variables. Make sure to only use the variables you need in your code and sanitize them appropietly.

    • By using array_filter on the $_POST superglobal im "erasing" all empty or null variables. so if an expected key was not sent via $_POST, it defaults to the value specified by the $defaultValues array.

    • I dont quite understand why you are using filter_input without the third parameter (filter constants).

    0 讨论(0)
  • 2021-01-16 09:03

    Hope this will help, If not may be I have misunderstood the problem.

    Instead of

    $key = stripslashes(filter_input(INPUT_POST, $key)); 
    $insArray[$key] = $key;
    

    Try

    $insArray[$key] =stripslashes(filter_input(INPUT_POST, $key));
    

    Then after the foreach loop

    extract($insArray);
    
    0 讨论(0)
提交回复
热议问题