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


MYSQL PDO insert value from drop down list functionality

在用户创建表单中,我有一个元素,它是一个下拉列表,其中可以为用户分配角色类型(即admin)。

我不知道如何从下拉列表中提取值并将其设置在"用户"表中,因为数据库中的表需要一个数字,但是用户会从下拉列表选择值。

从中填充下拉列表的表只有两列"RoleTypeCode"(自动递增)和"Role_Title"(用于填充下拉列表)。

我想要更新的表引用了RoleTypeCode。

用户:(用户记录ID(PK-自动增量),名字,姓氏,电子邮件,角色类型代码(FK))

角色类型:(角色类型代码(PK-自动增量),角色标题)

到目前为止,我有:

$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';
    }
}

不知道如何满足角色字幕

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

更新:我要查找的流程是在用户点击提交按钮后的。正在尝试从下拉列表中提取信息,并将其设置在用户表中。上面的代码用于用户单击"提交"后的提交文件

我不知道如何从下拉列表中提取值并将其设置在"用户"表中,因为数据库中的表需要一个数字,但是用户会从下拉列表选择值。

从中填充下拉列表的表只有两列"RoleTypeCode"(自动递增)和"Role_Title"(用于填充下拉列表)。

使用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']
));

使用以下内容填充下拉

<?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

用于在USER 中使用RoleTypeCode值更新为UserRecordID

如果我正确理解你的问题,你想要的东西可以使用AJAX来实现——这听起来很复杂,但事实并非如此。但是,它是在前端处理的。

以下是一些获得AJAX基础知识的好帖子:

的一个简单例子

更复杂的示例

根据下拉列表1中的选择填充下拉列表2