On Sat, 25 Oct 2003 09:17:46 +0100, you wrote:

>I have made this function which should be quite simple but doesn't seem to
>do what it is meant to.
>What I want it to do is create an array where there is a numbered key (the
>rows of the table) and the colume headings as the second key.

First, you can't have two keys on an index (AFAIK). What you're creating is
an array-of-arrays.

Better to create $n when you /output/ the array.

>It doesn't seem to work. If I set $pid=0 then I get no results (even though
>there are such values in the table), and when $pid=1 I get the results I
>expect but they are not sorted in the way I expected.

Use an ORDER BY clause in the SQL to sort the results.

>function getinfo($pid)
>{
> $query = "SELECT name,id,parentid FROM ubsc_menu WHERE parentid='$pid' ";
> $result = mysql_query ($query) or die ("Query failed");

Your code as written assumes that a database connection exists. This is bad,
because your function should be a black-box, not make assumptions about the
environment it's running in.

> $row=mysql_fetch_array($result,MYSQL_ASSOC);

You're throwing away the first row.

> $n = 1;
> while ($row=mysql_fetch_array($result,MYSQL_ASSOC))

'cos it gets overritten first time round the loop

>  foreach ($row as $colname => $value)

The foreach in the while... I have no idea what that's going to do. I
/think/ you're unwrapping the database row into multiple array lines.

Try this rewrite (warning: completely untested)

<?php
        function getinfo ($pid, $dbconn)
        {
                $result = array();

                if (!is_int ($pid)) // to stop SQL injection
                {
                        return (NULL);
                }

                /* no need to get parentid - you already have it */
                $sql = "SELECT id, name FROM ubsc_menu WHERE parentid = $pid ORDER
BY name";

                /* if there's an error while running the query, return NULL */
                if (($rs = mysql_query ($sql, $dbconn)) == FALSE)
                {
                        return (NULL);
                }

                while ($row = mysql_fetch_array ($rs, MYSQL_ASSOC))
                {
                        $result[$row['id']] = $row['name'];
                }

                /*      at this point we have a dictionary where
                        $result['id'] = name */

                /* no results found? return FALSE */
                if (sizeof ($result) == 0)
                {
                        return (FALSE);
                }

                return ($result);
        }

        /* change these to the correct values */
        $dbname = 'ubsc';
        $pid = 1;

        /* attempt to connect to database */
        if (($dbconn = mysql_connect ()) == FALSE)
        {
                die ("<p>There was a problem</p>\r\n");
        }

        $result = getinfo ($pid, $dbconn);

        if ($result === NULL)
        {
                die ("<p>There was a problem</p>\r\n");
        }

        if ($result !== FALSE)
        {
                $n = 0;
                foreach ($result as $id => $name)
                {
                        echo ("<p>" . $n+1 . ". $id: $name</p>\r\n");
                        $n+=1;
                }
        } else {
                echo ("<p>No results found</p>\r\n");
        }
?>

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

Reply via email to