Re: First question and introducing myself [message #178023 is a reply to message #178012] |
Thu, 10 May 2012 19:29 |
Jerry Stuckle
Messages: 2598 Registered: September 2010
Karma:
|
Senior Member |
|
|
On 5/10/2012 11:18 AM, Shake wrote:
> Hi All,
>
> That's my first post in this group. I would start introducing myself...
> Hello! and apologizing if I make any mistake, writing (English is no my
> natural language) or not following the rules of this group.
>
> And now, the on topic question:
>
> A little introduction: it's about preparing variables, taking some vars
> getted by $_POST and passing to $_SESSION.
>
> The basic idea is a function to trim(), and check some rules on this
> $_POST values. And the problem to solve is walking throught a
> "multidimensional array path".
>
> An example:
>
> I get via post:
>
> $_POST['not']['interesting']
> $_POST['yes']['interesting']['selector']
> $_POST['yes']['interesting'][0]['something']
> $_POST['yes']['interesting'][0]['otherthing']
> $_POST['yes']['interesting'][1]['something']
> $_POST['yes']['interesting'][1]['otherthing']
> $_POST['other']
> ...
>
> Check (for example) and set into $_SESSION the
>
> $_POST['yes']['interesting'][0] array
>
> And get a checked:
>
> $_SESSION['yes']['interesting'][0]['something']
> $_SESSION['yes']['interesting'][0]['otherthing']
>
>
> Suposse i do:
>
> $selector = trim($_POST['yes']['interesting']['selector'])
>
> if( trim($_POST['yes']['interesting'][$selector]['otherthing'])==''
> || othercheck
> ) {
> $the_data = trim($_POST['yes']['interesting'][$selector]['otherthing']);
> // do more things $the_ data
> $_SESSION['yes']['interesting'][$selector]['otherthing'] = $the_data;
>
> }
>
> And I repeat this kind of if segment a few times... And I want to
> convert it to a method or function...
>
> What I really want to do (And I don't found how to do) is something like:
>
> (This is some... php pseudocode)
>
> public function checkPostData( $array_path)
> {
> if(trim($_POST[ the $array_path ] )) do somethin.
> }
>
> and call by: checkPostData(['yes']['interesting']['selector']);
>
> Thats its not posible, of course...
>
> then I though passing by reference...
>
> public function checkPostData( & $item) {
>
> // Get the parents indexs until arrive to $_POST
>
> }
>
> But I don't get any result in my "investigation". Then I though that
> anybody have to found this requiremente before... and tried to search on
> the web... But I don't get the answers, probably because I don't know
> the best words to search for.
>
> And that's all.
>
> Sorry for the long of the text, and thanks for all.
>
> Bye
Hi, Shake, and welcome to the group. Don't worry about your English -
it's just fine.
As for your problem - there really isn't a good way to handle it in PHP.
Part of the problem is the number of indexes you need for each
variable (number of array dimensions). There is nothing wrong with
doing it; it just makes things harder to process, as you've found.
Another problem is you want to store it in the $_SESSION array with the
same indexes. Is there a reason for that? Again, it's not a problem in
itself, but it does complicate matters.
You could pass the indexes you want as an array, i.e.
checkPostData(array('yes', 'interesting', 'selector'));
But it will be a bit awkward processing in the function. Getting the
value wouldn't be hard, i.e. (not tested)
function checkPostData($indexes) {
$value = $_POST;
foreach ($indexes as $index)
$value = $value[$index];
... $value should now hold the value and can be validated.
However, putting it back into the $_SESSION array would be a little
harder. You wouldn't want to use a foreach() loop because the last
element isn't an array. But something like this might work:
$data = $_SESSION;
for ($i = 0; $i < count($indexes) - 1; $i++) {
if (!exists($data[$indexes[$i]]))
$data[$indexes[$i]] = array();
$data = $data[$indexes[$i]]'
}
$data[$indexes[count($indexes)-1]] = $value;
Note: You could also use $i instead of count($indexes)-1 in the last
statement, but that is more prone to possible errors.
Of course I've left out some testing (like to insure the arrays are
correct), but hopefully you get the idea.
--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex(at)attglobal(dot)net
==================
|
|
|