On Wed, 2009-06-17 at 16:29 -0400, 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 --- p...@ptahhotep.com
> >> 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.
> 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'm using this code on a site, and it works:

$styles = Array('main' => 'Pastel', 'modern' => 'Modern');
if(in_array($style, $styles))
{
        $_SESSION['style'] = $style;
}

I've stripped some of the code not related to this, but essentially I'm
just using it to ensure that user input matches what I have in an array
(which could be sourced from anywhere)

Thanks
Ash
www.ashleysheridan.co.uk


--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to