Re: populate form input option dropdown box from existing data

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

 



PJ wrote:
> Ashley Sheridan wrote:
>> On Wed, 2009-06-17 at 10:01 -0400, PJ wrote:
>>   
>>> 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 --- pj@xxxxxxxxxxxxx
>>> http://www.ptahhotep.com
>>> http://www.chiccantine.com/andypantry.php
>>>
>>> -- 
>>> PHP General Mailing List (http://www.php.net/)
>>> To unsubscribe, visit: http://www.php.net/unsub.php
>>>
>>>     
>> in_array() does work with associative arrays, I used it myself before!
>> Don't forget, it only attempts to match the value in an associative
>> array, not the key.
>>   
> Could you show me how, because just running in_array($test_string,
> $assoc_array) never produced a result regardless of what I put into the
> $test_string or even if I used "value", value, 'value', 14, "14", '14',
> and the corresponding string existed in the array - the results were
> zip, zero, nothing; like a dead fish.

Pretty simple:

$needle01 = 1;
$needle02 = 'test name';
$haystack = array('id' => 1, name => 'test name');

if (in_array($needle01, $haystack)) {
	echo "FOUND $needle01";
}

if (in_array($needle02, $haystack)) {
	echo "FOUND $needle02";
}

> And now there is another little glitch, if the array finds that there is
> no category listed, then I get an error of undeclared variable...
> man, talk about contortions... :-(
> 
> 

I don't know what you mean here, but you should always have an 'id' key
in the array.  You need to do some debugging.  Do a
print_r($selected_ids) and in your loop later do a echo $row['id']. So
in someone's example above, it should look something like:

$selected_ids = array(5, 7, 9, 10, 11);

$row['id'] = 5;

Then this works:  in_array($row['id'], $selected_ids);

Obviously it doesn't work unless row id is 5, 7, 9, 10, 11.


-- 
Thanks!
-Shawn
http://www.spidean.com

-- 
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