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

时间:2015-02-22 20:49:57

标签: php mysql pdo

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

我不确定如何从下拉列表中提取值并将其设置在“用户”表中,因为数据库中的表采用数字,但用户将从下拉列表中选择值。

下拉列表中只填充了两列“RoleTypeCode”(自动递增)和“Role_Title”(用于填充下拉列的列)。

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

USER:( UserRecordID(PK - AutoIncrement),Forename,Surname,Email, 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

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

更新:我正在寻找的流程是 用户点击提交按钮后。尝试从下拉列表中提取信息并将其设置在users表中。一旦用户点击“提交”

,上面的代码就是提交文件

3 个答案:

答案 0 :(得分:1)

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

<?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值更新,该值为FK到USER

中的UserRecordID

答案 1 :(得分:1)

  

我不确定如何从下拉菜单中提取值并将其设置在&#39;用户&#39; table,因为数据库中的表采用数字,但用户将从下拉列表中选择值。

     

下拉列表中只填充了两列&#39; RoleTypeCode&#39;这是自动递增的&#39; Role_Title&#39;这是用于填充下拉列的列。

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

答案 2 :(得分:0)

如果我理解你的问题,你可以用AJAX完成你想要的东西 - 听起来很复杂,但不是。但是,它在前端处理。

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

A simple example

More complicated example

Populate dropdown 2 based on selection in dropdown 1