Chapter 7 Novice to Ninja

Hello, Im building teh database in novice to Ninja and am getting stcuk. Im at the authours management part, i have the pages set up, its cycles through and goes back to the original page, it just doesnt want to add or edit an author, only delete works. Any ideas, ive ripped the code from the book and wrote it out myself. What can I be missing that wont edit or added to the daatabse? but it will delete.

Thanks


<?php
include_once $_SERVER['DOCUMENT_ROOT'] .
    '/paranoiddb/includes/magicquotes.inc.php';

if (isset($_GET['add']))
{
  $pageTitle = 'New Band';
  $action = 'addform';
  $name = '';
  $email = '';
  $id = '';
  $button = 'Add Band';

  include 'form.html.php';
  exit();
}

if (isset($_GET['addform']))
{
  include $_SERVER['DOCUMENT_ROOT'] . '/paranoiddb/includes/db.inc.php';

  try
  {
    $sql = 'INSERT INTO band SET
        name = :name,
        email = :email';
    $s = $pdo->prepare($sql);
    $s->bindValue(':name', $_POST['name']);
    $s->bindValue(':email', $_POST['email']);
    $s->execute();
  }
  catch (PDOException $e)
  {
    $error = 'Error adding submitted author.';
    include 'error.html.php';
    exit();
  }

  header('Location:.');
  exit();
}

if (isset($_POST['action']) and $_POST['action'] == 'Edit')
{
  include $_SERVER['DOCUMENT_ROOT'] . '/paranoiddb/includes/db.inc.php';

  try
  {
    $sql = 'SELECT id, name, email FROM band WHERE id = :id';
    $s = $pdo->prepare($sql);
    $s->bindValue(':id', $_POST['id']);
    $s->execute();
  }
  catch (PDOException $e)
  {
    $error = 'Error fetching author details.';
    include 'error.html.php';
    exit();
  }

  $row = $s->fetch();

  $pageTitle = 'Edit Band';
  $action = 'editform';
  $name = $row['name'];
  $email = $row['email'];
  $id = $row['id'];
  $button = 'Update band';

  include 'form.html.php';
  exit();
}

if (isset($_GET['editform']))
{
  include $_SERVER['DOCUMENT_ROOT'] .'/paranoiddb/includes/db.inc.php';

  try
  {
    $sql = 'UPDATE band SET
        name = :name,
        email = :email
        WHERE id = :id';
    $s = $pdo->prepare($sql);
    $s->bindValue(':id', $_POST['id']);
    $s->bindValue(':name', $_POST['name']);
    $s->bindValue(':email', $_POST['email']);
    $s->execute();
  }
  catch (PDOException $e)
  {
    $error = 'Error updating submitted author.';
    include 'error.html.php';
    exit();
  }

  header('Location: .');
  exit();
}

if (isset($_POST['action']) and $_POST['action'] == 'Delete')
{
  include $_SERVER['DOCUMENT_ROOT'] . '/paranoiddb/includes/db.inc.php';

  // Get jokes belonging to author
  try
  {
    $sql = 'SELECT id FROM video WHERE bandid = :id';
    $s = $pdo->prepare($sql);
    $s->bindValue(':id', $_POST['id']);
    $s->execute();
  }
  catch (PDOException $e)
  {
    $error = 'Error getting list of jokes to delete.';
    include 'error.html.php';
    exit();
  }

  $result = $s->fetchAll();

  // Delete joke category entries
  try
  {
    $sql = 'DELETE FROM videocategory WHERE videoid = :id';
    $s = $pdo->prepare($sql);

    // For each joke
    foreach ($result as $row)
    {
      $videoId = $row['id'];
      $s->bindValue(':id', $videoId);
      $s->execute();
    }
  }
  catch (PDOException $e)
  {
    $error = 'Error deleting category entries for joke.';
    include 'error.html.php';
    exit();
  }

  // Delete jokes belonging to author
  try
  {
    $sql = 'DELETE FROM video WHERE bandid = :id';
    $s = $pdo->prepare($sql);
    $s->bindValue(':id', $_POST['id']);
    $s->execute();
  }
  catch (PDOException $e)
  {
    $error = 'Error deleting jokes for author.';
    include 'error.html.php';
    exit();
  }

  // Delete the author
  try
  {
    $sql = 'DELETE FROM band WHERE id = :id';
    $s = $pdo->prepare($sql);
    $s->bindValue(':id', $_POST['id']);
    $s->execute();
  }
  catch (PDOException $e)
  {
    $error = 'Error deleting author.';
    include 'error.html.php';
    exit();
  }

  header('Location: .');
  exit();
}

// Display author list
include $_SERVER['DOCUMENT_ROOT'] . '/paranoiddb/includes/db.inc.php';

try
{
  $result = $pdo->query('SELECT id, name FROM band ');
}
catch (PDOException $e)
{
  $error = 'Error fetching authors from the database!';
  include 'error.html.php';
  exit();
}

foreach ($result as $row)
{
  $bands[] = array('id' => $row['id'], 'name' => $row['name']);
}

include 'bands.html.php';

?>

Try and dump out the get and post vars and inspect them carefully.


if (isset($_GET['addform'])) 
{ 
  include $_SERVER['DOCUMENT_ROOT'] . '/paranoiddb/includes/db.inc.php'; 

// 2 lines of debug you can comment out later
var_dump($_GET);
var_dump($_POST);

  try 
  { 
    $sql = 'INSERT INTO band SET 
        name = :name, 
        email = :email'; 
    $s = $pdo->prepare($sql); 
    $s->bindValue(':name', $_POST['name']); 
    $s->bindValue(':email', $_POST['email']); 
    $s->execute(); 
  } 
  catch (PDOException $e) 
  { 
    $error = 'Error adding submitted author.'; 
    include 'error.html.php'; 
    exit(); 
  } 

  header('Location:.'); 
  exit(); 
} 

The other thing that springs to mind is to check that your table’s id is an auto-increment field.

Sorry, I’ve no direct experience of this book.

Ive done that,and this is what it gives me, an output of the stuff I’m trying to change, but no change happens…


Joyce Collingwood array(0) { } array(3) { ["name"]=> string(17) "Joyce CollingWOOD" ["email"]=> string(27) "girlsgirlsgirls@hotmail.com" ["id"]=> string(2) "3 " } 

```php


Does this look right?

Ive done that,and this is what it gives me, an output of the stuff I’m trying to change, but no change happens…
[COLOR=#464646][FONT=Helvetica Neue]


Joyce Collingwood array(0) { } array(3) { ["name"]=> string(17) "Joyce CollingWOOD" ["email"]=> string(27) "girlsgirlsgirls@hotmail.com" ["id"]=> string(2) "3 " } 

[/FONT][/COLOR]

Does this look right?
Yes this has all values you should have.

Try var_dump (ing) the $_POST inside the try block like:


try
{
  var_dump($_POST);
  var_dump($_GET);

If you still see that values are outputting then try not binding the fields on the insert like:


try
{
  $sql = 'INSET INTO author SET
    name = $_POST['name']
    email = $_POST['email'];
    $s = $pdo->prepare($sql);
    /* Comment these binded parameters out */
    //$s = bindValue('name', $_POST['name']);
    //$s = bindValue('email', $_POST['email']);
    $s->execute();

Do the values insert?
Steve

I did both, typed it all at at first, then ripped the archive.

See my massively edited post above.

It outputs what Im trying to add ,

Unleash The Archers array(0) { } array(3) { [“name”]=> string(19) “UNLEASH THE ARCHERS” [“email”]=> string(20) “METAL4EVER@email.com” [“id”]=> string(2) "1 " }

Ok, but did you try not binding the SQL values like I showed above; without the binding does it insert?

I took the bindings out, still outputs but does not insert.

Is it? Does your table consist of only id, name, email and is id an auto-incremented field?

under the TABLE band, is just id, name and email. id is set to auto increment.