Re: Alphabetical pagination

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Jul 14, 2009 at 3:38 PM, Miller,
Terion<tmiller@xxxxxxxxxxxxxxxxxxxx> wrote:
> I am trying to make a page that displays a-z like a b c d e etc as links
> then when you click open one it reloads itself and shows only the query
> results that go with that letter...i'm not getting it....I get a page that
> says ARRAY over and over...
>
> What I have so far:
>                             <?php
>
> if(!isset($_SESSION['RestaurantList']))
>
> {
>                                      // List not grabbed yet, so run
> query and store in $_SESSION
>
>                                                        $sql = "SELECT
> DISTINCT name FROM restaurants  GROUP BY name DESC";
>
> $result = mysql_query($sql) or die(mysql_error()) ;
>
> $count = mysql_num_rows($result);
>
> echo $count;
>
>
> while($row = mysql_fetch_array($result)) {
>
>
>
> $name=array($row['name'],0,1);




Why are you setting the value of $name to an array? If you try to echo
$name after this statement (as you are below), PHP will echo the word
"Array".



>
> //$name = array('name');
>
>                                                        echo "<a
> href=\"page.php?name=" .$name. "\"> $name</a>\n";
>
> }
>
>
>                                                                    }
>
>
>
> $alphabet = range('A', 'Z');
>
> foreach ($alphabet as $letter) {
>
> echo '<a href="' . $_SERVER['PHP_SELF']
>
> . '?letter=' . $letter . '">' . $letter . '</a>';
>
> }
>
>
>
>
>
>
> ?>

If the list of restaurants is very long, I wouldn't store it in a
session variable. It is the same for every person who visits your
site, so there is little use storing separate redundant copies in
session scope where it will needlessly fill up disk space and/or
memory.

As far as the query is concerned, you could do this:

<?php

$index_letter = $_GET['letter'];

if (preg_match('/^[A-Za-z]$/', $index_letter)) {

    $sql = "SELECT DISTINCT name FROM restaurants WHERE name LIKE
'$index_letter%' GROUP BY name DESC";

//....
?>

I would also consider whether you really need the keyword DISTINCT in
the query. In a properly normalized table, name should probably
already be distinct (and constrained by a UNIQUE index on that
column).

Andrew

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



[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux