TalkPHP
 
 
Account Login
Latest Articles
» The basic usage of PHPTAL, a XML/XHTML template library for PHP
» Vulnerable methods and the areas they are commonly trusted in.
» Simple way to protect a form from bot
» The Basics On: How Session Stealing Works
» How to keep your forms from double posting data
IRC Channel
IRC Speech Bubble Join the friendly bunch on IRC...
(#TalkPHP on Freenode)

...Also available via a web interface.

See this thread for information on the TalkPHP Free Hugs Initiative™. Subject to availability.
Associates
Associates
CSS Tutorials
Reply
 
LinkBack Thread Tools Search this Thread Display Modes
Old 08-02-2008, 03:13 AM   #1 (permalink)
The Contributor
 
Join Date: Apr 2008
Posts: 78
Thanks: 0
benton is on a distinguished road
Default Filling an array with an array

I'm writing a script where the user can input certain items, which are then converted to php code and written to a file. A cron job will then be used to run that file. For the most part, it is all working fine but I am having problems get an array written correctly. Here is an example:

In the main code that displays for the user:
PHP Code:
//collect data from form
$data = array();
$data['name'] = 'some name';
$data['email'] = 'email address';
$data['options'] = array(=> "opt1",
                         
=> "opt2",
                         
=> "opt3");
$fp = array();
PrepareData($fp$data);
WriteFile($fp); 
For the PrepareFile function
PHP Code:
PrepareFile(&$fp$data) {
$fp[] = "\$name = " $data['name'] . "; \n";
$fp[] = "\$email = " $data['email'] . "; \n";

$fp[] = "\$db_query = mysql_query(\"select * from table\") or die(mysql_error());" "\n";
$fp[] = "while(\$db = mysql_fetch_array(\$db_query, MYSQL_ASSOC)) {" "\n";
$fp[] = "foreach (" $data['options'] . " as $option) {" "\n";
$fp[] = "\$message .= \$db[\$option] .'</tr></td>';" "\n";
}

The problem is with the line
PHP Code:
$fp[] = "foreach (" $data['options'] . " as $option) { 
When the written file is displayed, for that line it shows
PHP Code:
foreach (Array as $option) { 
The rest of the code is converted correctly. If I remove the foreach loop, the created file can be ran and the output is created as expected, using the complete code, of course. Can anyone see a problem with how I am doing this?
benton is offline  
Reply With Quote
Old 08-02-2008, 04:31 AM   #2 (permalink)
is cute and cuddly
 
delayedinsanity's Avatar
 
Join Date: Mar 2008
Location: Vegas, Baby
Posts: 963
Thanks: 31
delayedinsanity is on a distinguished road
Default

PHP Code:
$data['options']['name'] = 'some array name here';
$data['options']['array'] = array(=> "opt1"
                                  
=> "opt2"
                                  
=> "opt3"); 
delayedinsanity is offline  
Reply With Quote
Old 08-02-2008, 08:56 AM   #3 (permalink)
The Acquainted
 
sjaq's Avatar
 
Join Date: Nov 2007
Location: Netherlands
Posts: 113
Thanks: 11
sjaq is on a distinguished road
Default

PHP Code:
$fp[] = "foreach (array('" implode(',\''$data['options']) . "') as $option) { 
or something like that
sjaq is offline  
Reply With Quote
Old 08-02-2008, 09:32 AM   #4 (permalink)
The Frequenter
Newcomer 
 
xenon's Avatar
 
Join Date: Dec 2007
Location: Bucharest, Romania
Posts: 438
Thanks: 3
xenon is on a distinguished road
Default

or, you could simply put the $data['options'] variable into the single quotes...I guess...assuming that you're evaluating the code after.
__________________
I have optimistic thoughts, even though sometimes (if not always) life's a bitch.
xenon is offline  
Reply With Quote
Old 08-02-2008, 08:58 PM   #5 (permalink)
The Frequenter
Zend Certified 
 
Join Date: Sep 2007
Location: Denmark
Posts: 352
Thanks: 8
Kalle is on a distinguished road
Default

Use serialization insted, much easier, but abit slower:

PHP Code:
$fp[] = "foreach (@unserialize('" str_replace('\'''\\\', serialize($data['options'])) . "') as $option) { 
Or something similar
=)
__________________
Send a message via MSN to Kalle Send a message via Skype™ to Kalle
Kalle is offline  
Reply With Quote
Old 08-05-2008, 02:54 AM   #6 (permalink)
The Contributor
 
Join Date: Apr 2008
Posts: 78
Thanks: 0
benton is on a distinguished road
Default

I appreciate all of the suggestions though I wasn't able to get any to work.

1
Quote:
$data['options']['array'] = array(0 => "opt1",
1 => "opt2",
2 => "opt3");
I'm probably missing the point but if I can't get the code to run through a regular array, how will changing it to a multiarray help?

2
Quote:
$fp[] = "foreach (array('" . implode(',\'', $data['options']) . "') as $option) {

Changed to the following to get it to not fail:
$fp[] = "foreach (array('" . implode(',\'', $data['options']) . "') as \$option) {" . "\n";
This almost worked. The output was
PHP Code:
 foreach (array('opt1,'opt2') as $option) { 
I only used two options to test the above. Is there a way to surround each member of the array in single quotes since that seems to be the problem with it?

3
Quote:
put the $data['options'] variable into the single quotes
I'm not sure what was meant by this but if you mean something like
PHP Code:
$fp[] = "foreach (\$data['options'] as \$field ) {" "\n"
If I do that, the actual name shows in the output as
PHP Code:
foreach ($data['options'] as $field ) { 
But that won't work since that array is not known in the created file.

4
Quote:
$fp[] = "foreach (@unserialize('" . str_replace('\'', '\\\', serialize($data['options'])) . "') as $option) {
I couldn't get this to run due to parsing errors. I changed it to the following but it still fails.
PHP Code:
$fp[] = "foreach (@unserialize(str_replace('\'', '\\', serialize(" $data['options'] . ")) . ") as $option) {" . "\n"; 
I would apreciate any other suggestions.
benton is offline  
Reply With Quote
Reply



Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


All times are GMT. The time now is 07:57 AM.

 
     

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.1.0
Inactive Reminders By Icora Web Design