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