Re: Invalid Arguements

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 20 Nov 2008, at 14:37, Terion Miller wrote:
I currently have it like this:
<select name="BannerSize">

if you've got it working don't change it :)

but to explain:

it is possible to send through an array of data from a form, to do this you place multiple elements with the same name followed by [] in the form..
so
<select name="BannerSize[]"> .. (our first select)
<select name="BannerSize[]"> ... (our second select)

when you do this php will recieve the BannerSize as an array.. so in the above scenario
$_POST['BannerSize'] will contain an array as such:
array(
  0 => "300x250", #whatever was chosen in the first select
  0 => "88x31-300x250" #whatever was chosen in the second select
);

now in the script you originally posted, php was using implode($_POST['BannerSize'] , ',' ); this function was basically taking the array values and combining them together as a single string.

the problem was that if you're form had <select name="BannerSize"> (no brackets) then php didn't receive and array of info in $_POST['BannerSize'] - and thus when it tried to implode the array, it broke, as there wasn't an array within :)

now, most got confused because most people write implode with the parameters the other way around, and they thought that was the error, so kind of confused things. [and because you posted it about 5 times under different names which didn't help ;)]

in short:
if you were using <select name="BannerSize[]"> 's then you'd be wanting to implode the data as it's an array you're recieving if you're using <select name="BannerSize"> as you currently are, then you can forget about all the implode etc.

the ideal fix would have been to make the php code accept either and detect if it was an array or not being passed by replacing the original code:

if (isset($_POST['BannerSize'])){$BannerSize =
implode($_POST['BannerSize'],',');} else {$BannerSize = "";}

with this new code:

if (isset($_POST['BannerSize'])) {
 if(is_array($_POST['BannerSize']) ) {
  $BannerSize = implode(',', $_POST['BannerSize']); //in right order..
 } else {
  $BannerSize = $_POST['BannerSize'];
 }
} else {
 $BannerSize = "";
}

which first checks if banner size has been sent at all,
if it has is it an array? [if yes implode it, if not just pick up the value sent]

hope that helps!

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


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux