foreach woes

foreach woes

am 07.06.2006 19:06:43 von zac.carey

I'm trying to extend the script(s) provided at
www.phpriot.com/d/articles/client-side/sortable-lists-with-p hp-and-ajax/.
I'm struggling with the foreach syntax - I guess I'm just a dummy. I
still don't get it despite reading through http://uk.php.net/foreach.

Basically, there's a movie table (`movie_id`, `title`, `description`,
`ranking`).

and a function that gets the movies:

function getMovies()
{
$query = 'select movie_id, title, description from movies order
by ranking, lower(title)';
$result = mysql_query($query);

$movies = array();
while ($row = mysql_fetch_object($result)) {
$movies[$row->movie_id] = $row->title;
}

return $movies;
}


and here's where the titles are displayed on the page:



For each movie what do I need to do to echo the movie description -
within the
  • statement for instance.

    Hope that makes sense. Any help appreciated.

  • Re: foreach woes

    am 07.06.2006 19:33:17 von zeldorblat

    strawberry wrote:
    > I'm trying to extend the script(s) provided at
    > www.phpriot.com/d/articles/client-side/sortable-lists-with-p hp-and-ajax/.
    > I'm struggling with the foreach syntax - I guess I'm just a dummy. I
    > still don't get it despite reading through http://uk.php.net/foreach.
    >
    > Basically, there's a movie table (`movie_id`, `title`, `description`,
    > `ranking`).
    >
    > and a function that gets the movies:
    >
    > function getMovies()
    > {
    > $query = 'select movie_id, title, description from movies order
    > by ranking, lower(title)';
    > $result = mysql_query($query);
    >
    > $movies = array();
    > while ($row = mysql_fetch_object($result)) {
    > $movies[$row->movie_id] = $row->title;
    > }
    >
    > return $movies;
    > }
    >
    >
    > and here's where the titles are displayed on the page:
    >
    >


    >
    > For each movie what do I need to do to echo the movie description -
    > within the
  • statement for instance.
    >
    > Hope that makes sense. Any help appreciated.

    In the getMovies() function, change the while loop to something like
    this:

    while ($row = mysql_fetch_object($result)) {
    $movies[] = $row;
    }

    And when you display them:

    foreach($movies as $movie) {
    //$movie->movie_id is the movie_id
    //$movie->title is the title
    //$movie->description is the description
    }

  • Re: foreach woes

    am 07.06.2006 19:56:50 von zac.carey

    Perfect. Thank you very much.

    ZeldorBlat wrote:
    > strawberry wrote:
    > > I'm trying to extend the script(s) provided at
    > > www.phpriot.com/d/articles/client-side/sortable-lists-with-p hp-and-ajax/.
    > > I'm struggling with the foreach syntax - I guess I'm just a dummy. I
    > > still don't get it despite reading through http://uk.php.net/foreach.
    > >
    > > Basically, there's a movie table (`movie_id`, `title`, `description`,
    > > `ranking`).
    > >
    > > and a function that gets the movies:
    > >
    > > function getMovies()
    > > {
    > > $query = 'select movie_id, title, description from movies order
    > > by ranking, lower(title)';
    > > $result = mysql_query($query);
    > >
    > > $movies = array();
    > > while ($row = mysql_fetch_object($result)) {
    > > $movies[$row->movie_id] = $row->title;
    > > }
    > >
    > > return $movies;
    > > }
    > >
    > >
    > > and here's where the titles are displayed on the page:
    > >
    > >


    > >
    > > For each movie what do I need to do to echo the movie description -
    > > within the
  • statement for instance.
    > >
    > > Hope that makes sense. Any help appreciated.
    >
    > In the getMovies() function, change the while loop to something like
    > this:
    >
    > while ($row = mysql_fetch_object($result)) {
    > $movies[] = $row;
    > }
    >
    > And when you display them:
    >
    > foreach($movies as $movie) {
    > //$movie->movie_id is the movie_id
    > //$movie->title is the title
    > //$movie->description is the description
    > }

  • Re: foreach woes

    am 08.06.2006 14:39:48 von zac.carey

    Curiously, the last movie (movie_id 7) now always appears at the bottom
    of the ranked list. Have I done something wrong or is my computer just
    exercising some form of editorial control - after all, it is a Nicholas
    Cage movie!?!

    The rank order processing function looks like this:

    function processMoviesOrder($key)
    {
    if (!isset($_POST[$key]) || !is_array($_POST[$key]))
    return;

    $movies = getMovies();
    $queries = array();
    $ranking = 1;

    foreach ($_POST[$key] as $movie_id) {
    if (!array_key_exists($movie_id, $movies))
    continue;

    $query = sprintf('update movies set ranking = %d where movie_id =
    %d',
    $ranking,
    $movie_id);

    mysql_query($query);
    $ranking++;
    }

    and the complete presentation page now looks like this;

    require_once('database.php');
    require_once('movies.php');

    if (!dbConnect()) {
    echo 'Error connecting to database';
    exit;
    }

    $movies = getMovies();
    ?>
    "DTD/xhtml1-strict.dtd">


    phpRiot Sortable Lists






    phpRiot Sortable Lists









    the javascripts referred to come from the scriptaculous website

    strawberry wrote:
    > Perfect. Thank you very much.
    >
    > ZeldorBlat wrote:
    > > strawberry wrote:
    > > > I'm trying to extend the script(s) provided at
    > > > www.phpriot.com/d/articles/client-side/sortable-lists-with-p hp-and-ajax/.
    > > > I'm struggling with the foreach syntax - I guess I'm just a dummy. I
    > > > still don't get it despite reading through http://uk.php.net/foreach.
    > > >
    > > > Basically, there's a movie table (`movie_id`, `title`, `description`,
    > > > `ranking`).
    > > >
    > > > and a function that gets the movies:
    > > >
    > > > function getMovies()
    > > > {
    > > > $query = 'select movie_id, title, description from movies order
    > > > by ranking, lower(title)';
    > > > $result = mysql_query($query);
    > > >
    > > > $movies = array();
    > > > while ($row = mysql_fetch_object($result)) {
    > > > $movies[$row->movie_id] = $row->title;
    > > > }
    > > >
    > > > return $movies;
    > > > }
    > > >
    > > >
    > > > and here's where the titles are displayed on the page:
    > > >
    > > >
    > > >
    > > > For each movie what do I need to do to echo the movie description -
    > > > within the
  • statement for instance.
    > > >
    > > > Hope that makes sense. Any help appreciated.
    > >
    > > In the getMovies() function, change the while loop to something like
    > > this:
    > >
    > > while ($row = mysql_fetch_object($result)) {
    > > $movies[] = $row;
    > > }
    > >
    > > And when you display them:
    > >
    > > foreach($movies as $movie) {
    > > //$movie->movie_id is the movie_id
    > > //$movie->title is the title
    > > //$movie->description is the description
    > > }

  • Re: foreach woes

    am 08.06.2006 19:40:04 von zeldorblat

    strawberry wrote:
    > Curiously, the last movie (movie_id 7) now always appears at the bottom
    > of the ranked list. Have I done something wrong or is my computer just
    > exercising some form of editorial control - after all, it is a Nicholas
    > Cage movie!?!
    >
    > The rank order processing function looks like this:
    >
    > function processMoviesOrder($key)
    > {
    > if (!isset($_POST[$key]) || !is_array($_POST[$key]))
    > return;
    >
    > $movies = getMovies();
    > $queries = array();
    > $ranking = 1;
    >
    > foreach ($_POST[$key] as $movie_id) {
    > if (!array_key_exists($movie_id, $movies))
    > continue;
    >
    > $query = sprintf('update movies set ranking = %d where movie_id =
    > %d',
    > $ranking,
    > $movie_id);
    >
    > mysql_query($query);
    > $ranking++;
    > }
    >
    > and the complete presentation page now looks like this;
    >
    > > require_once('database.php');
    > require_once('movies.php');
    >
    > if (!dbConnect()) {
    > echo 'Error connecting to database';
    > exit;
    > }
    >
    > $movies = getMovies();
    > ?>
    > > "DTD/xhtml1-strict.dtd">
    >
    >
    > phpRiot Sortable Lists
    >
    >
    >
    >
    >
    >
    >

    phpRiot Sortable Lists


    >
    >
    >
    >
    >
    >
    >
    > the javascripts referred to come from the scriptaculous website
    >
    > strawberry wrote:
    > > Perfect. Thank you very much.
    > >
    > > ZeldorBlat wrote:
    > > > strawberry wrote:
    > > > > I'm trying to extend the script(s) provided at
    > > > > www.phpriot.com/d/articles/client-side/sortable-lists-with-p hp-and-ajax/.
    > > > > I'm struggling with the foreach syntax - I guess I'm just a dummy. I
    > > > > still don't get it despite reading through http://uk.php.net/foreach.
    > > > >
    > > > > Basically, there's a movie table (`movie_id`, `title`, `description`,
    > > > > `ranking`).
    > > > >
    > > > > and a function that gets the movies:
    > > > >
    > > > > function getMovies()
    > > > > {
    > > > > $query = 'select movie_id, title, description from movies order
    > > > > by ranking, lower(title)';
    > > > > $result = mysql_query($query);
    > > > >
    > > > > $movies = array();
    > > > > while ($row = mysql_fetch_object($result)) {
    > > > > $movies[$row->movie_id] = $row->title;
    > > > > }
    > > > >
    > > > > return $movies;
    > > > > }
    > > > >
    > > > >
    > > > > and here's where the titles are displayed on the page:
    > > > >
    > > > >
    > > > >
    > > > > For each movie what do I need to do to echo the movie description -
    > > > > within the
  • statement for instance.
    > > > >
    > > > > Hope that makes sense. Any help appreciated.
    > > >
    > > > In the getMovies() function, change the while loop to something like
    > > > this:
    > > >
    > > > while ($row = mysql_fetch_object($result)) {
    > > > $movies[] = $row;
    > > > }
    > > >
    > > > And when you display them:
    > > >
    > > > foreach($movies as $movie) {
    > > > //$movie->movie_id is the movie_id
    > > > //$movie->title is the title
    > > > //$movie->description is the description
    > > > }

    Look at your new version of getMovies() and consider what the keys of
    the array are.

  • Re: foreach woes

    am 09.06.2006 13:05:53 von zac.carey

    Thanks,

    But I'm going to have to have a bit of a think about that. I may be
    some time...

    I'll let you know when I've figured it out.

    Cheers :-)


    ZeldorBlat wrote:
    > strawberry wrote:
    > > Curiously, the last movie (movie_id 7) now always appears at the bottom
    > > of the ranked list. Have I done something wrong or is my computer just
    > > exercising some form of editorial control - after all, it is a Nicholas
    > > Cage movie!?!
    > >
    > > The rank order processing function looks like this:
    > >
    > > function processMoviesOrder($key)
    > > {
    > > if (!isset($_POST[$key]) || !is_array($_POST[$key]))
    > > return;
    > >
    > > $movies = getMovies();
    > > $queries = array();
    > > $ranking = 1;
    > >
    > > foreach ($_POST[$key] as $movie_id) {
    > > if (!array_key_exists($movie_id, $movies))
    > > continue;
    > >
    > > $query = sprintf('update movies set ranking = %d where movie_id =
    > > %d',
    > > $ranking,
    > > $movie_id);
    > >
    > > mysql_query($query);
    > > $ranking++;
    > > }
    > >
    > > and the complete presentation page now looks like this;
    > >
    > > > > require_once('database.php');
    > > require_once('movies.php');
    > >
    > > if (!dbConnect()) {
    > > echo 'Error connecting to database';
    > > exit;
    > > }
    > >
    > > $movies = getMovies();
    > > ?>
    > > > > "DTD/xhtml1-strict.dtd">
    > >
    > >
    > > phpRiot Sortable Lists
    > >
    > >
    > >
    > >
    > >
    > >
    > >

    phpRiot Sortable Lists


    > >
    > >
    > >
    > >
    > >
    > >
    > >
    > > the javascripts referred to come from the scriptaculous website
    > >
    > > strawberry wrote:
    > > > Perfect. Thank you very much.
    > > >
    > > > ZeldorBlat wrote:
    > > > > strawberry wrote:
    > > > > > I'm trying to extend the script(s) provided at
    > > > > > www.phpriot.com/d/articles/client-side/sortable-lists-with-p hp-and-ajax/.
    > > > > > I'm struggling with the foreach syntax - I guess I'm just a dummy. I
    > > > > > still don't get it despite reading through http://uk.php.net/foreach.
    > > > > >
    > > > > > Basically, there's a movie table (`movie_id`, `title`, `description`,
    > > > > > `ranking`).
    > > > > >
    > > > > > and a function that gets the movies:
    > > > > >
    > > > > > function getMovies()
    > > > > > {
    > > > > > $query = 'select movie_id, title, description from movies order
    > > > > > by ranking, lower(title)';
    > > > > > $result = mysql_query($query);
    > > > > >
    > > > > > $movies = array();
    > > > > > while ($row = mysql_fetch_object($result)) {
    > > > > > $movies[$row->movie_id] = $row->title;
    > > > > > }
    > > > > >
    > > > > > return $movies;
    > > > > > }
    > > > > >
    > > > > >
    > > > > > and here's where the titles are displayed on the page:
    > > > > >
    > > > > >
    > > > > >
    > > > > > For each movie what do I need to do to echo the movie description -
    > > > > > within the
  • statement for instance.
    > > > > >
    > > > > > Hope that makes sense. Any help appreciated.
    > > > >
    > > > > In the getMovies() function, change the while loop to something like
    > > > > this:
    > > > >
    > > > > while ($row = mysql_fetch_object($result)) {
    > > > > $movies[] = $row;
    > > > > }
    > > > >
    > > > > And when you display them:
    > > > >
    > > > > foreach($movies as $movie) {
    > > > > //$movie->movie_id is the movie_id
    > > > > //$movie->title is the title
    > > > > //$movie->description is the description
    > > > > }
    >
    > Look at your new version of getMovies() and consider what the keys of
    > the array are.