我有一个逻辑错误,$album_id 始终是 albums_table 中的最后一个值
I have a logic error, $album_id is always the last value in the albums_table
Select 声明
<?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 始终是数据库中的最后一个值
我不知道该怎么做
在您指向的行上,您确实在那里分配 $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']);
这里也需要改一下,加上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
.
<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();
}
?>
Select 声明
<?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 始终是数据库中的最后一个值 我不知道该怎么做
在您指向的行上,您确实在那里分配 $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']);
这里也需要改一下,加上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
.
<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();
}
?>