将文本值从下拉列表传输到它的相应数据库ID - sql插入和php

时间:2013-12-28 01:14:51

标签: php html mysql sql

我无法将下拉列表值(:艺术家,文本)转换为其各自的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存储在具有艺术家日期和价格的事件表中。

任何帮助都将不胜感激,谢谢。

1 个答案:

答案 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;