我无法将下拉列表值(:艺术家,文本)转换为其各自的ID(Artist_ID,num)并将其插入事件表。 Venue_ID也存在同样的问题。
<?php
$artist =
'SELECT Artist_ID
FROM artist
WHERE :Artist = Artist_Name
';
$venue =
'SELECT Venue_ID
FROM venue
WHERE :Venue = Venue_Name
';
$stmt = $pdo->prepare(
'INSERT INTO event(Event_Date, Artist_ID, Venue_ID, Price)
VALUES (:Event_Date, $artist, $venue, :Price)');
$stmt->bindparam('Artist_ID', $_POST[$artist], PDO::PARAM_STR);
$stmt->bindparam('Venue_ID', $_POST[$venue], PDO::PARAM_STR);
$stmt->bindparam('Date', $_POST[':Date'], PDO::PARAM_STR);
$stmt->bindparam('Price', $_POST[':Price'], PDO::PARAM_STR);
$stmt->execute();
$newId = $pdo->lastInsertId();
exit;
?>
这是下拉列表的代码:
<select name='Artist' id=':Artist'>
<?php
$stmt = $mysqli->prepare(
'SELECT Artist_Name
FROM artist
ORDER BY Artist_Name');
$stmt->execute();
$stmt->bind_result($Artist);
$stmt->store_result();
while($stmt->fetch())
echo("<option> {$Artist} </option>");
?>
</select>
艺术家和地点表的文本值被分配了一个主键ID,该主键ID存储在具有艺术家日期和价格的事件表中。
任何帮助都将不胜感激,谢谢。
答案 0 :(得分:0)
试试这个,同时选择艺术家ID并将其作为值输入您的下拉列表:
<select name='Artist' id=':Artist'>
<?php
$stmt = $mysqli->prepare(
'SELECT Artist_Name, Artist_ID
FROM artist
ORDER BY Artist_Name');
$stmt->execute();
$stmt->bind_result($Artist, $ID);
$stmt->store_result();
while($stmt->fetch())
echo("<option value=\"$ID\"> {$Artist} </option>");
?>
</select>
我认为您还需要更新代码中的POST元素,但我不确定您在第一部分中使用的是:艺术家类型变量。如果你使用id作为值(就像我在这里所做的那样),那么发布的值将是他们选择的名称的id,你不需要查询它。
<?php
$artist = $_POST['Artist'];
$venue = $_POST['venue'];
$stmt = $pdo->prepare(
'INSERT INTO event(Event_Date, Artist_ID, Venue_ID, Price)
VALUES (:Event_Date, :Artist, :Venue, :Price)');
$stmt->bindparam(':Artist', $artist, PDO::PARAM_STR);
$stmt->bindparam(':Venue', $venue, PDO::PARAM_STR);
$stmt->bindparam(':Event_Date', $_POST['Date'], PDO::PARAM_STR);
$stmt->bindparam(':Price', $_POST['Price'], PDO::PARAM_STR);
$stmt->execute();
$newId = $pdo->lastInsertId();
exit;
&GT;