MYSQL PDO 从下拉列表功能中插入值

MYSQL PDO insert value from drop down list functionality

在用户创建表单中,我有一个元素,它是一个下拉列表,其中 role_type(即管理员)可以分配给用户。

我不确定如何从下拉列表中提取值并将其设置在 'user' table 中,因为数据库中的 table 需要一个数字,但是用户会 select 下拉列表中的值。

填充下拉列表的 table 只有两列 'RoleTypeCode' 自动递增和 'Role_Title' 用于填充下拉列表的列。

我希望更新的 table 引用了 RoleTypeCode。

USER:(UserRecordID(PK - AutoIncrement),名字,姓氏,电子邮件,RoleTypeCode(FK)

Role_Type: (RoleTypeCode(PK - AutoIncrement), Role_Title)

到目前为止我有:

$forename = $_POST['Forename'];
$surname = $_POST['Surname'];
$email = $_POST['Email'];
$role_title = $_POST['Role_Title'];

/*** connect to database ***/
include "db_conx.php";

try
{
   $db_conx = new PDO("mysql:host=$mysql_hostname;dbname=$mysql_dbname", $mysql_username, $mysql_password);

   $db_conx->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

   $insertUser = $db_conx->prepare("INSERT INTO user (Forename, Surname, Email, Role_TypeCode ) VALUES (:forename, :surname, :email, :role_title )");

    /*** bind the parameters ***/
    $insertUser->bindParam(':forename', $forename, PDO::PARAM_STR);
    $insertUser->bindParam(':surname', $surname, PDO::PARAM_STR);
    $insertUser->bindParam(':email', $email, PDO::PARAM_STR);
    $insertUser->bindParam(':role_title', $role_title, PDO::PARAM_STR);

    /*** execute the prepared statement ***/
    $insertUser->execute();

    /*** success message ***/
    $message = 'New user added';
    }
catch(Exception $e)
{
    /*** check if the email already exists ***/
    if( $e->getCode() == 23000)
    {
        $message = 'This email has already been registered';
    }
    else
    {
        /*** fail message incase something went wrong ***/
        $message = 'Unable to process your request. Please try again later';
    }
}

不确定如何满足 role_title

任何帮助将不胜感激!! :)

更新:我正在寻找的过程是 用户点击提交按钮之后。尝试从下拉列表中提取信息并将其设置在用户 table 中。上面的代码用于用户单击 'submit'

后的提交文件

使用以下内容填充下拉列表

<?php
//database connection
$sql = "SELECT * FROM Role_Type";
$db_conx->query($sql); //query as no parameters
//create html for drop down
$SelectHtml = "<select name='Role_Title' id='Role_Title'>\n";//Name and id to suit
while($row = $db_conx->fetch()) {
  $SelectHtml .=<optionvalue='".$row[$RoleTypeCode]."'>".$row[$Role_Title]."</option>\n";
  }
$SelectHtml .= "<select>\n";
?>

HTML 显示下拉菜单

 <form action="xxx">
 form stuff
 <?php  echo $SelectHtml ?>
 more form stuff

使用 RoleTypeCode 值更新为 USER

中的 UserRecordID

如果我正确理解你的问题,你想要的可以使用 AJAX 来完成——这听起来很复杂,但实际上并不复杂。但是,它是在前端处理的。

这里有一些获得 AJAX 基础知识的好帖子:

A simple example

More complicated example

Populate dropdown 2 based on selection in dropdown 1

Im not sure how to extract the value from the drop down and set it in the 'user' table because the table in the database takes a number however the user will select the value from the drop down.

The table the drop down is populated from only has two columns 'RoleTypeCode' which is auto incremented and 'Role_Title' which is the column used to populate the drop down.

您使用 RoleTypeCode 的主键作为下拉值,而您使用 Role_Title 作为显示值。然后,当您提交表单时,您只需使用 RoleTypeCode 来设置用户的 FK 值。

所以基本上你的表格看起来像:

<?php
$stmt = $pdo->prepare('SELECT * FROM Role_Type');
$roles = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>
<form>
  <label>First Name</label>
  <input type="text" name="forename" />

  <label>Last Name</label>
  <input type="text" name="surname" />

  <label>Email</label>
  <input type="text" name="email" />

  <label>Role</label>
  <select name="role">
      <?php foreach($roles as $role): ?>
          <option value="<?php echo $role['RoleTypeCode'] ?>"><?php echo $role['Role_Title'] ?></option>
      <?php endforeach; ?>
  </select>
</form>

然后当你收到你的提交时它会是这样的:

$insertStmt = $pdo->prepare(prepare('INSERT INTO user (Forename, Surname, Email, Role_TypeCode ) VALUES (:forename, :surname, :email, :role )');
$insertStmt->execute(array(
    ':forname' => $_POST['forename'],
    ':surname' => $_POST['surname'],
    ':email' => $_POST['email'],
    ':role' => $_POST['role']
));