将下拉列表中的文本值传输到其各自的数据库 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属性:&lt;option value="123"&gt;foobar&lt;/option&gt; 【参考方案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的主要内容,如果未能解决你的问题,请参考以下文章

下拉列表中的剑道文本框

如何将引导模式内的下拉列表的选定值获取到php中的文本框中

在 Angular 7 中,选择下拉值 id 传递给 ngFor 列表中的所有选择下拉列表

在选定的剑道网格 mvvm 中获取剑道下拉列表值/文本/索引

如何隐藏组合框下拉列表中的列?

将文本框、日期和下拉列表值绑定到参数 angularJS wcfRest