将下拉列表中的文本值传输到其各自的数据库 ID - sql 插入和 php
Posted
技术标签:
【中文标题】将下拉列表中的文本值传输到其各自的数据库 ID - sql 插入和 php【英文标题】:Transfer a text value from a drop down list into it's respective database ID - sql insertion and php 【发布时间】:2014-01-15 14:13:19 【问题描述】:我无法将下拉列表值(:Artist,文本)转换为其各自的 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 与艺术家日期和价格一起存储到事件表中。
任何帮助将不胜感激,谢谢。
【问题讨论】:
你能澄清一下哪里出了问题吗?你有什么问题? 使用option
标签的value
属性:<option value="123">foobar</option>
。
【参考方案1】:
试试这个,同时选择艺术家 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 元素,但我不确定您在第一部分中对 :Artist 类型变量做了什么。如果您使用 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;
?>
【讨论】:
这似乎可行,谢谢,但现在将空数据发布到表中:/有什么想法吗? 嗨,我刚刚更新了我的答案以包括对 INSERT 代码的更正 - 如果您的表单发布“地点”、“日期”和“价格”(除了“艺术家”之外显示的代码)那么这应该可以工作。 当前表单 id 为 :Artist 或 :Venue 等,然后在添加您的代码后,我得到一个参数号无效的 pdoexception。在添加修改后的代码后,它还声明了一个未识别的 Artist 和 Venue 索引 您是否尝试从您的帖子变量中删除冒号?您有两个选择:1)至少尝试了解正在发生的事情以自己取得一些进展。或 2) 如果您希望其他人为您完成,请发布您的所有代码 如果我把冒号拿出来它发布了空数据,设法让它工作发布ID只需要让用户选择文本,例如Lady Gaga而不是艺术家ID,例如。 3 并且仍然只发布我试图理解它的艺术家 ID,它只是向我抛出了我没有经历过 php 的新问题,所以不知道如何解决以上是关于将下拉列表中的文本值传输到其各自的数据库 ID - sql 插入和 php的主要内容,如果未能解决你的问题,请参考以下文章
在 Angular 7 中,选择下拉值 id 传递给 ngFor 列表中的所有选择下拉列表