I have a form that allows users to edit an entry in a database. It displays the current values in a textbox/select box/textarea depending on the type of data (text, enum, etc). The same form is used for different tables, so no values are hard coded. Field names are retrieved with a show columns query and then content is retrieved with a select query.
This works fine for almost all fields, I am having trouble with the field that is of type set.
I build the REPLACE query by listing the values entered into the form. The first thing I do is loop through the $_POST variable and create two arrays - one with the keys, and one with the values. So the variable $vals is an array that holds the data the user has entered, and in theory the REPLACE statement could be REPLACE INTO table ($key) VALUES ($vals), if I could list the values of $keys and $vals as follows: (field1, field2, field3) VALUES ('data1', 'data2', 'data3').
I wrote the following function to loop through the array values and list them as needed for the query (separated by a comma, surrounded by single quotes - yes, I know the quotes haven't been added yet):
function print_array($arr) {
//This function takes an array and lists all values in a comma-separated list
//for easy printing in a query or web page
$count = count($arr);
$last = $count - 1 ;
for ($i = 0; $i < $count; $i++) {
if (is_array($arr[$i])) {
/************************************PROBLEM!!!!!!!!!!!!***********************************/
$count2 = count($arr[$i]);
$last2 = $count2 - 1 ;
for ($j = 0; $j < $count2; $j++) {
$list .= "$arr[$i][$j]";
}
/************************************PROBLEM!!!!!!!!!!!!***********************************/
} else { $list .= "$arr[$i]"; } if ($i != $last) { $list .= ", "; } } return $list; }
The problem is that if a value in the array is itself an array, for instance a field of type set that has more than one value chosen, it's not listing the values of that array, just the word array. I tried making it a recursive function
if (is_array($arr[$i])) { print_array($arr[$i]); }
but that also just gave me "Array", so I tried duplicating the code, as you can see in the function above, but this didn't work either. I feel like there must be something obvious I'm missing, but I just can't see it.
The code for the form itself is
<select name="Category[]" SIZE=5 MULTIPLE>
so it is being passed as an array, and I can do print_r of the specific variable and see the array values. I just can't get them to print properly in my query.
The other odd thing is that when I do print_r($vals) it also shows me "Array" for the field that is an array, instead of showing me the values. But when I do print_r($Category) it does show me that it is an array.
Can anyone help?
TIA,
-Lisi
What code are you using to set $vals. In other words, I'd like to see what you're doing with the $_POST data before you send it to print_array().
-- paperCrane <Justin Patrin>
-- PHP Database Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php