Thank you very much
On Jan 3, 2010, at 11:42 AM, Simcha Younger wrote:
On Mon, 21 Dec 2009 14:53:58 -0700
Zach Hicken <zach@xxxxxxxxxxxxx> wrote:
You are going to end up with alot of repetitous code if you repeat
the process for every level.
I would instead select all page data, and then construct a nested
array to show the page structure, and then work off of that.
example:
$pages = array();
$sql = "SELECT * FROM $Gen WHERE Category = '$Cat'
ORDER BY Page_Above desc"; //start from the lower levels, build up
$result = mysql_query($sql, $conn) or
die(mysql_error());
//go through each row in the result set
while ($pageArray = mysql_fetch_array($result)) {
if(isset($pages[$pageArray['id']])){
ksort($pages[$pageArray['id']]);
$pageArray['children'] = $pages[$pageArray['id']];
unset( $pages[$pageArray['id']]);
}
$pages[$pageArray['Page_Above']][$pageArray['id']] = $pageArray;
}
$pages = $pages[0]; // remove unnamed top-level (nodes not properly
set as children)
sort($pages);
function showpages($p, $level=0){
$line = "%d\t%s\t%d\r\n";
printf($line, $p['id'], $p['name'],
$p['Page_Above']);
if(isset($p['children']))
foreach($p['children'] as $child) showpages($child);
}
foreach($pages as $page) showpages($page);
I am trying to create a ui for a page management script. During this
step the user chooses which existing page the new page will link
under. Each record has a field called Page_Above, which references
the
primary key number (id) of the page above it. Currently I have 4
records in the database:
(id, name, Page_Above)
1, Page1, 0
2, Page2, 1
3, Page3, 2
4, Page4, 1
Here is the pertinent snippet:
include "config.php";
$conn = mysql_connect($server, $DBusername, $DBpassword);
mysql_select_db($database,$conn);
$sql = "SELECT * FROM $Gen WHERE Category = '$Cat' AND Page_Above
= 0";
$result = mysql_query($sql, $conn) or die(mysql_error());
//go through each row in the result set and display data
while ($pageArray = mysql_fetch_array($result)) {
$prime_id = $pageArray['id'];
$Name = $pageArray['Name'];
print ("<tr><td bgcolor=#ffffff>$Name</td><td bgcolor=#ffffff
align=left valign=top>");
$sql = "SELECT * FROM $Gen WHERE Page_Above = $prime_id";
$result = mysql_query($sql, $conn) or die(mysql_error());
//go through each row in the result set and display data
while ($secpageArray = mysql_fetch_array($result)) {
// give a name to the fields
$second_id = $secpageArray['id'];
$Name = $secpageArray['Name'];
print ("$Name<br>");
$sql = "SELECT * FROM $Gen WHERE Page_Above = $second_id";
$result = mysql_query($sql, $conn) or die(mysql_error());
//go through each row in the result set and display data
while ($thpageArray = mysql_fetch_array($result)) {
// give a name to the fields
$third_id = $thpageArray['id'];
$Name = $thpageArray['Name'];
print ("</td><td>");
print ("$Name<br>");
}
}
}
The results I am getting are incomplete, it only pulls one page per
level instead of all the pages per level, Like this:
"Page1, Page 2, Page3"
it skips Page4.
When I remove the request for the third level, then I get:
"Page1,Page2,Page4" Which is correct up to that point. It breaks
apart when I try to go on the third level.
Any ideas how I can get this to work? In the end there will be 5
levels.
Thanks
--
PHP Database Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
--
Simcha Younger <simcha@xxxxxxxxxxxx>
--
PHP Database Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
--
PHP Database Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php