Re: Creating query with multi-dimensional array

From: Date: Thu, 26 Feb 2004 22:37:59 +0000
Subject: Re: Creating query with multi-dimensional array
References: 1  Groups: php.db 
Request: Send a blank email to php-db+get-33171@lists.php.net to get a copy of this message
Lisi wrote:
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>

« previous php.db (#33171) next »