Mysql PHP проблема обновления таблицы из списка результатов - PullRequest
1 голос
/ 17 апреля 2011

Если кто-нибудь с терпением сможет прочитать это и помочь мне, я буду чрезмерно благодарен. У меня возникают проблемы с обновлением одной таблицы MySQL. У меня есть таблица, в которой хранятся комментарии и отзывы ди-джея о записях альбомов, и у меня есть вторая таблица, в которой хранится общая информация об альбоме. Моя проблема заключается в цикле по каждой строке обратной связи, чтобы обновить мою таблицу. Я просто собираюсь опубликовать весь свой код, и, возможно, он будет понятнее (извините за длинный пост).

<?php

$done = false;
$problem = false;

$expected = array('album_id', 'dj','affilliations','rating','comments'
                  , 'content_id','title','ep','date','genre');

$conn = dbConnect('admin');

if ($_GET && !$_POST) {
  if (isset($_GET['album_id']) && is_numeric($_GET['album_id'])) {
    $album_id = $_GET['album_id'];
  }
  else {
    $album_id = NULL;
  }
  if ($album_id) {
    //this statement updates album_info correctly, but not album_comments
      $sql = "SELECT album_info.album_id, album_info.title, album_info.ep
               , album_info.genre, album_info.date, album_comments.content_id
               , album_comments.album_id, album_comments.dj
               , album_comments.affilliations, album_comments.rating
               , album_comments.comments 
             FROM album_info, album_comments 
             WHERE album_info.album_id = $album_id 
               AND album_comments.album_id = $album_id";

    $result = mysql_query($sql) or die (mysql_error());
    $row = mysql_fetch_assoc($result);
  }
}

// if form has been submitted, update record
if (array_key_exists('update', $_POST)) {
  // prepare expected items for insertion in to database
  foreach ($_POST as $key => $value) {
    if (in_array($key, $expected)) {
      ${$key} = mysql_real_escape_string($value);
    }
  }
  // abandon the process if primary key invalid
  if (!is_numeric($album_id)) {
    die('Invalid request');
  }
  if(!empty($_POST['dj']) && !empty($_POST['title'])) {
    $album_id = mysql_real_escape_string(trim($album_id));
    $dj = mysql_real_escape_string(trim($_POST['dj']));
    $affilliations = mysql_real_escape_string(trim($_POST['affilliations']));
    $rating = mysql_real_escape_string(trim($_POST['rating']));
    $comments = mysql_real_escape_string(trim($_POST['comments']));
    $title = mysql_real_escape_string(trim($_POST['title']));
    $ep = mysql_real_escape_string(trim($_POST['ep']));
    $genre = mysql_real_escape_string(trim($_POST['genre']));
    $date = mysql_real_escape_string(trim($_POST['date']));

  }

  $sql="UPDATE album_info, album_comments 
       ON album_info.album_id = album_comments.album_id 
       SET album_info.title = '$title', album_info.ep = '$ep'
         , album_info.date = '$date', album_info.genre = '$genre'
         , album_comments.dj = '$dj'
         , album_comments.affilliations = '$affilliations'
         , album_comments.rating = '$rating'
         , album_comments.comments = '$comments' 
           album_comments.album_id = '$album_id' 
       AND album_info.album_id = '$album_id'";
    // submit the query and redirect if successful
  $done = mysql_query($sql) or die(mysql_error());
  if($done) {
    printf("<script>location.href='?page=albums'</script>");
  }
}
?>

Это корректно обновляет album_info, но необходимо перебирать альбом_комментариев, как показано ниже:

<form id="album_form" name="album_form" method="post" action="">
  <fieldset>
    <legend>Album Info</legend>
    <p>
      <label for="title">Title</label>
      <input type="text" name="title" id="title" 
        value="<?php echo htmlentities($row['title']); ?>" />
    </p>
    <p>
      <label for="ep">EP</label>
      <input type="text" name="ep" id="ep" 
        value="<?php echo htmlentities($row['ep']); ?>" />
    </p>
    <p>
     <label for="day">Date:</label>
      <input name="day" type="text id="day: size="2" maxlength="2" 
        value="<?php echo htmlentities($row['date']); ?>"/>
    </p>
    <p>
      <label for="genre">Genre</label>
      <input type="text" name="genre" id="genre" 
        value="<?php echo htmlentities($row['genre']); ?>"/>
  </fieldset>
  </p>
  <fieldset>
    <legend>Comments</legend>
    <!--data below is from table album_comments -->
<table id="tblInsertRowPHP" class="tableResults" cellpadding="0" 
  cellspacing="0">
      <tbody>
      <?php
      //this spits out all the feedback for the particular album; 
      //this is the part I need help with
      while ($row = mysql_fetch_assoc($result)) { 
      ?>
      <tr>
          <td>
          <?php

        echo '<input type="text" name="dj" size="15" value="'.$row['dj'].'" />';
        echo '<input type="text" name="affilliations" size="30"
              value="'.$row['affilliations'].'" />';
        echo '<input type="text" name="rating" size="8" 
              value="'.$row['rating'].'" />';
        echo '<input type="text" name="comments" size="68"
              value="'.$row['comments'].'" />';
          ?>
          </td>
        </tr>
        <?php } 
        $sql = "SELECT album_id FROM album_info";
        $result = mysql_query($sql) or die (mysql_error());
        $row = mysql_fetch_assoc($result);?>
      </tbody>
    </table>
  </fieldset>
    <input type="submit" name="update" 
     value="Update entry" id="submit" />
  <input name="album_id" type="hidden" 
     value="<?php echo $row['album_id']; ?>" />
</form>
<?php } ?>

Как изменить оператор MYSQL, чтобы он проходил по каждой строке в album_comments и обновлял их? Нужен ли мне подготовленный оператор или я могу изменить оператор PHP SQL? Еще раз спасибо за любую помощь - я немного новичок в этом.

1 Ответ

2 голосов
/ 17 апреля 2011

Предположим, что ваша таблица album_comment имеет первичный ключ comment_id (целое число, автоинкремент, например album_info.album_id, я думаю), вы можете попробовать следующее:

<?php

$done = false;
$problem = false;

$expected = array('album_id', 'dj','affilliations','rating','comments', 'content_id','title','ep','date','genre');

$conn = dbConnect('admin');

if ($_GET && !$_POST) {
    if (isset($_GET['album_id']) && is_numeric($_GET['album_id'])) {
        $album_id = $_GET['album_id'];
    }
    else {
        $album_id = NULL;
    }
    if ($album_id) {
    //this statement updates album_info correctly, but not album_comments
        $sql = "SELECT album_info.album_id, album_info.title, album_info.ep, album_info.genre, album_info.date, album_comments.content_id, album_comments.album_id, album_comments.dj, album_comments.affilliations, album_comments.rating, album_comments.comments FROM album_info, album_comments WHERE album_info.album_id = $album_id AND album_comments.album_id = $album_id";

        $result = mysql_query($sql) or die (mysql_error());
        $row = mysql_fetch_assoc($result);
    }
}

// if form has been submitted, update record
if (array_key_exists('update', $_POST)) {
    // prepare expected items for insertion in to database
    foreach ($_POST as $key => $value) {
        if (in_array($key, $expected)) {
            ${$key} = mysql_real_escape_string($value);
        }
    }
    // abandon the process if primary key invalid
    if (!is_numeric($album_id)) {
        die('Invalid request');
    }
    if(!empty($_POST['dj']) && !empty($_POST['title'])) {
        $album_id = mysql_real_escape_string(trim($album_id));
        $title = mysql_real_escape_string(trim($_POST['title']));
        $ep = mysql_real_escape_string(trim($_POST['ep']));
        $genre = mysql_real_escape_string(trim($_POST['genre']));
        $date = mysql_real_escape_string(trim($_POST['date']));

    }

    $sql="UPDATE album_info SET title = '$title', ep = '$ep', date = '$date', genre = '$genre' WHERE album_id = '$album_id'";

    $done = mysql_query($sql) or die(mysql_error());

    foreach($_POST['comment_id'] as $index => $comment_id)
    {
        $comment_id = intval($comment_id);
        $dj = mysql_real_escape_string(trim($_POST['dj'][$index]));
        $affilliations = mysql_real_escape_string(trim($_POST['affilliations'][$index]));
        $rating = mysql_real_escape_string(trim($_POST['rating'][$index]));
        $comments = mysql_real_escape_string(trim($_POST['comments'][$index]));

        $sql="UPDATE album_comments SET dj = '$dj', affilliations = '$affilliations', rating = '$rating', comments = '$comments' WHERE comment_id = '$comment_id'";

        $done = $done && mysql_query($sql) or die(mysql_error());
    }

    // submit the query and redirect if successful
    if($done) {
        printf("<script>location.href='?page=albums'</script>");
    }
}
?>

Вторая часть:

    <form id="album_form" name="album_form" method="post" action="">
  <fieldset>
    <legend>Album Info</legend>
    <p>
      <label for="title">Title</label>
      <input type="text" name="title" id="title" value="<?php echo htmlentities($row['title']); ?>" />
    </p>
    <p>
      <label for="ep">EP</label>
      <input type="text" name="ep" id="ep" value="<?php echo htmlentities($row['ep']); ?>" />
    </p>
    <p>
     <label for="day">Date:</label>
      <input name="day" type="text id="day: size="2" maxlength="2" value="<?php echo htmlentities($row['date']); ?>"/>
    </p>
    <p>
      <label for="genre">Genre</label>
      <input type="text" name="genre" id="genre" value="<?php echo htmlentities($row['genre']); ?>"/>
  </fieldset>
  </p>
  <fieldset>
    <legend>Comments</legend>
    <!--data below is from table album_comments -->
<table id="tblInsertRowPHP" class="tableResults" cellpadding="0" cellspacing="0">
      <tbody>
      <?php
      //this spits out all the feedback for the particular album; this is the part I need help with
        while ($row = mysql_fetch_assoc($result)) { 
      ?>
      <tr>
          <td>
          <?php
        echo '<input type="hidden" name="comment_id[]" value="'.$row['comment_id'].'" />';
        echo '<input type="text" name="dj[]" size="15" value="'.$row['dj'].'" />';
        echo '<input type="text" name="affilliations[]" size="30" value="'.$row['affilliations'].'" />';
        echo '<input type="text" name="rating[]" size="8" value="'.$row['rating'].'" />';
        echo '<input type="text" name="comments[]" size="68" value="'.$row['comments'].'" />';
          ?>
          </td>
        </tr>
        <?php } 
        $sql = "SELECT album_id FROM album_info";
        $result = mysql_query($sql) or die (mysql_error());
        $row = mysql_fetch_assoc($result);?>
      </tbody>
    </table>
  </fieldset>
    <input type="submit" name="update" value="Update entry" id="submit" />
  <input name="album_id" type="hidden" value="<?php echo $row['album_id']; ?>" />
</form>
<?php } ?>
...