我有一个逻辑错误,$album_id总是albums_table中的最后一个值


I have a logic error, $album_id is always the last value in the albums_table

选择语句

<?php
$q = $db->prepare( 'SELECT album_id, album_name 
                FROM table_albums ORDER BY album_name' );
$q->bindParam( ':album_id',   $album_id );
$q->bindParam( ':album_name', $album_name );
$q->execute();

这里只有html

?>
<!DOCTYPE HTML>
<html>
<head>
   <meta charset="utf-8">
   <title><?php echo basename( __FILE__ ); ?></title>
</head>
<body>
<h1>Add Tracts</h1>
<form method="post">
   Tracks Name:<br>
   <input type="text" name="tracks_name" value="<?php $tracks_name ?>"><br>
   <select>
      <option name="album_id" id="album_id">Select</option>
      <?php while ( $row = $q->fetch() ) { ?>
         <option value="<?php echo $row->album_id;?>">

这就是我认为的问题所在

            <?php echo $row->album_name; $album_id = $row->album_id;?>
         </option>
      <?php } ?>
   </select>
   <input type="submit" value="Submit now"/>
</form>

仅在$_POST不是空的情况下处理表单

<?php 
if ( ! empty( $_POST ) ) {
   $stmt = $db->prepare( "INSERT INTO table_tracks 
                       ( tracks_name,  tracks_id,  album_id ) 
                VALUE  (:tracks_name, :tracks_id, :album_id)" );
   $stmt->bindParam( ':tracks_id',   $tracks_id );
   $stmt->bindParam( ':tracks_name', $tracks_name );
   $stmt->bindParam( ':album_id',    $album_id );

插入一行

   $tracks_name = $_POST["tracks_name"];
   $stmt->execute();
}
?>
</body>
</html>

album_id始终是数据库中的最后一个值我不知道该怎么做

您还需要在此处进行更改,添加echo

<input type="text" name="tracks_name" value="<?php echo $tracks_name; ?>"><br>

  <select  name="album_id" id="album_id">
  <option value="">Select</option>

您的album_id没有提交,我们通常将名称和id提供给select标签,而不是option

在您指向的行上,您确实在那里分配了$album_id,但不在循环中使用它。因此,循环当然会完成,最后一个赋值将反映最后一条记录。

如果您需要用它做其他事情,您要么需要将它放在数组中,要么在手头有数据的时候进行处理。

您对问题所在的位置是正确的。

<?php echo $row->album_name; $album_id = $row->album_id;?>

$album_id始终是数据库中的最后一个相册id。你不需要它。只需使用:

<?php echo $row->album_name; ?>

将正确的变量绑定到:album_id:

$stmt->bindParam( ':album_id', $_POST['$album_id']);
<form method="post">
   Tracks Name:<br>
   <input type="text" name="tracks_name" value="<?php $tracks_name ?>"><br>
   <select  name="album_id" id="album_id">
      <option value"" >Select</option>
      <?php while ( $row = $q->fetch() ) { ?>
         <option value="<?php echo $row->album_id;?>">
            <?php echo $row->album_name; $album_id = $row->album_id;?>
         </option>
      <?php } ?>
   </select>
   <input type="submit" value="Submit now"/>
</form>

<?php include '../includes/logout.php';
// Only process the form if $_POST isn't empty
if ( ! empty( $_POST ) ) {
   var_dump( $_POST ) ;
   $stmt = $db->prepare( "INSERT INTO table_tracks ( tracks_name,  tracks_id,         album_id ) 
                      VALUE                    (:tracks_name, :tracks_id,   :album_id)" );
   $stmt->bindParam( ':tracks_id',   $tracks_id );
   $stmt->bindParam( ':tracks_name', $tracks_name );
   $stmt->bindParam( ':album_id',    $album_id );
   // insert one row
   $album_id = $_POST["album_id"];
   $tracks_name = $_POST["tracks_name"];
   $stmt->execute();
}
?>