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']
));
在用户创建表单中,我有一个元素,它是一个下拉列表,其中 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
如果我正确理解你的问题,你想要的可以使用 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']
));