Re: [PHP] populate form input option dropdown box from existing data

[email protected] (PJ)
Newsgroups php.general
Message-ID <[email protected]>
Ford, Mike wrote:
> On 16 June 2009 20:48, PJ advised:
>
>> Now, I was happy to learn that it is simpler to populate the
>> insert new
>> books page dynamically from the db. Much shorter & neater.
>> It looks to me like the best solution for the edit page is
>> close to what
>> Yuri suggests.
>> Since the edit page is very similar to the insert new books page, I
>> merely need to populate the Select options box slightly differently.
>> This is the code to populate the insert page:
>> <select name="categoriesIN[]" multiple size="8">
>> <?php
>> $sql = "SELECT * FROM categories";
>> if ( ( $results = mysql_query($sql, $db) ) !== false ) {
>> while ( $row = mysql_fetch_assoc($results) ) {
>> echo "<option value=", $row['id'], ">", $row['category'],
>> "</option><br />"; }
>> }
>> </select>
>>
>> The problem nowis to find a way to add a conditional clause above that
>> will insert the option="selected" in the output.
>> The input for this comes from:
>> // do categories
>> $sql = "SELECT id, category FROM categories, book_categories
>> WHERE book_categories.bookID = $idIN &&
>> book_categories.categories_id = categories.id";;
>> if ( ( $results = mysql_query($sql, $db) ) !== false ) {
>> while ( $row = mysql_fetch_assoc($results) ) {
>> echo$row['id'], "<br />";
>> }
>> }
>>
>> This may return any number of category ids so the problem is to figure
>> out a way to pass the ids from the above code to the right ids in the
>> first code above. How & what do I search to match the two ids?
>
> Well, if I'm understanding your queries correctly, you need to compare
> the two sets of $row['id'] from the two queries above -- so your first
> query should be the second one above ("SELECT id, category FROM ..."),
> and you need to save the ids it returns for use in the loop which emits
> the <select>s. This can be done by replacing the "echo $row['id']" with
> "$selected_ids[] = $row['id']". Now you have an array of the selected
> ids which you can use in your in_array(). So your finished code is going
> to look something like this:
>
> <select name="categoriesIN[]" multiple size="8">
> <?php
> // do categories
> $selected_ids = array();
> $sql = "SELECT id, category FROM categories, book_categories
> WHERE book_categories.bookID = $idIN &&
> book_categories.categories_id = categories.id";
> if ( ( $results = mysql_query($sql, $db) ) !== false ) {
> while ( $row = mysql_fetch_assoc($results) ) {
> $selected_ids[] = $row['id'];
> }
> }
> $sql = "SELECT * FROM categories";
> if ( ( $results = mysql_query($sql, $db) ) !== false ) {
> while ( $row = mysql_fetch_assoc($results) ) {
> echo "<option value=", $row['id'],
> (in_array($row['id'], $selected_ids)?" selected":""),
> ">", $row['category'],
> "</option>\n";
> }
> }
> ?>
> </select>
>
> Hope this helps.
It does, indeed. This confirms my inexperienced conclusion that
in_array() does not work on associative arrays per se; it works on
simple arrays and I just don't have the experience to think of
extracting only the id fields.
I actually am using a slightly more complicated if else statement which
works.
Also, the other problem was the option selected definition required
Shawn's clarification
<select name='component-select' multiple ... which now highlights the
selected fields.
In all my searches (horrendously wasted time) I did not find any mention
of "component-select" either in php.net or w3c.org (I don't think my
queries on Google brought up anything from php.net) but w3c.org did and
I had looked at the page but somehow missed it.
I'm going to have to look at the way I search things. When you are
looking for something specific, other, even relevant, solutions seem to
get screened out.

Anyway, I learned quite a bit, here.
Thank you very, very much, gentlemen.
PJ

-- 
Hervé Kempf: "Pour sauver la planète, sortez du capitalisme."
-------------------------------------------------------------
Phil Jourdan --- [email protected]
http://www.ptahhotep.com
http://www.chiccantine.com/andypantry.php
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.