Re: populate form input option dropdown box from existing data
| From: | PJ | Date: | Thu, 18 Jun 2009 12:37:02 +0000 |
| Subject: | Re: populate form input option dropdown box from existing data | ||
| References: | 1 2 3 4 5 6 7 8 9 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-294226@lists.php.net to get a copy of this message | ||
Stuart wrote:
> 2009/6/18 PJ <af.gourmet@videotron.ca>:
>
>> I snipped to make it short... continue at bottom...
>>
>>> Step back from the code and consider the steps you need to perform...
>>>
>>> 1) Get an array of the categories, ideally in the form $cats[<catid>]
>>> = categoryname.
>>>
>>> 2) Get an array of the category IDs that should be selected, i.e.
>>> $selectedcats = array(3, 5, 7, 9).
>>>
>>> 3) Start the HTML select element
>>>
>>> 4) foreach ($cats as $id => $catname)
>>>
>>> 5) Determine whether it should be selected. e.g. $selected =
>>> (in_array($id, $selectedcats) ? 'selected="selected"' :
>>> ''.
>>>
>>> 6) Output the HTML option element, like <option value="$id"
>>> $selected>$catname</option>, escaping where appropriate.
>>>
>>> 7) End of loop, job done.
>>>
>>> If your code doesn't have that structure then you may want to consider
>>> starting again.
>>>
>>>
>> I'm quite sure the structure is correct.
>>
>>> Secondly, check that you're not using the same variable name twice.
>>>
>> I did find that in an instance of $id being repeated so I changed it to
>> $bid.
>>
>>> In
>>> one of your previous emails you used $selected to hold the array of
>>> selected categories, and in another you used it for the text to be
>>> inserted into the option element. The latter will blat over the former
>>> leading to no more than 1 option selected, and even then only if it's
>>> the first option displayed.
>>>
>>>
>> The $selected were not mine... as I was using $ccc ; only started using
>> $selected a couple of hours ago.
>>
>>> If you're still stuck please post more of your code in a single chunk
>>> including all the elements in my step-by-step above. The snippets
>>> you're currently posting are not giving us enough context to spot even
>>> the most common mistakes.
>>>
>> I'm including the relevant code:
>>
>> // select categories for book to be updated
>> $sql = "SELECT id, category FROM categories, book_categories
>> WHERE book_categories.bookID = '$bid' &&
>> book_categories.categories_id = categories.id";
>> if ( ( $results = mysql_query($sql, $db) ) ) {
>> while ( $row = mysql_fetch_assoc($results) ) {
>> $selected[] = $row['id'];
>> }
>> }
>> else $selected = Array( 0 => '0');
>> echo $selected;
>> print_r($selected);
>>
>> $sql = "SELECT * FROM categories";
>> echo "<select name='categoriesIN[]' multiple
>> size='8'>";
>> if ( ( $results = mysql_query($sql, $db) ) !== false ) {
>> while ( $row = mysql_fetch_assoc($results) ) {
>> if (in_array($row['id'], $selected)) {
>> echo "<option value=", $row['id'], "
>> selected='selected'
>>
>>> ", $row['category'], "</option><br />";
>>>
>> }
>> else echo "<option value=", $row['id'],
>> ">",
>> $row['category'], "</option><br />";
>> }
>> }
>>
>> Problem #1) in the first query result. I can't figure out how to deal
>> with it. The code works fine if there are categories assigned to the
>> book. If not, an undefined variable error is spewed out for selected.
>>
>
> It's best practice to initialise all variables before using them. The
> code you have will not create the $selected variable if there are no
> results...
>
> (code repeated for clarity)
>
>> if ( ( $results = mysql_query($sql, $db) ) ) {
>>
>
> If there are no results this will still "work" so will drop through to...
>
>
>> while ( $row = mysql_fetch_assoc($results) ) {
>> $selected[] = $row['id'];
>> }
>>
>
> But since there are no results the first call to mysql_fetch_assoc
> will return false so the line in the middle will never get executed.
>
>
>> }
>> else $selected = Array( 0 => '0');
>>
>
> Drop this else line and instead put $selected = array(); before the
> mysql_query line. Not sure why you want an element 0 => '0' in there,
> I'm guessing it's one of your attempts to get rid of the notice.
>
>
>> Problem #2) in the second query, the selected is in the source code but
>> it is not highlited. Several times I did get the categories highlighted,
>> but I could never catch what it was that made it work.
>>
>
> Can you post the HTML you're getting for this select using the above
> code. If the selected attributes are in the code correctly then there
> must be a syntax error in there somewhere and the easiest way to find
> it will be by looking at the HTML.
>
>
Stuart, you are one clear-headed dude. This is such a nice and clear
explanation - it's what we need for dummies llike me.
I had tried to declcare the variable, but didn't understand that it
needed to be declared as an array; I had put $selected = ""; and
obviously it din't work.
As for the seconf problem, today it works. without any changes. I think
the Quirk Daemon struck my browser. Actuall, I have been sabotaged by
the cache when, in not thinking and not taking my ridalin, I would
confuse refresh with go to previous page.
I guess I can get some sleep now.
THANKS TO ALL in clearing my brain toward the path of PHP enlightenment.
:-)
--
Hervé Kempf: "Pour sauver la planète, sortez du capitalisme."
-------------------------------------------------------------
Phil Jourdan --- pj@ptahhotep.com
http://www.ptahhotep.com
http://www.chiccantine.com/andypantry.php