我创建了一个允许用户勾选复选框的表单,当用户发布表单时,我想以某种方式将“ - ”符号后面的复选框值拆分,并将两个值插入两个单独的列中。
第1页上的表格:
<form method="post" action="scripts/add-users-to-courses.php">
<table class="table">
<tr>
<td><strong>Course Name</strong></td>
<td><strong>Username</strong></td>
<td><strong>Add User to Course</strong></td>
</tr>
<?php
foreach($course_array as $coursetitle) {
foreach($user_array as $username) {
echo '<tr>';
echo '<td>'. $coursetitle .'</td>';
echo '<td>'. $username .'</td>';
echo '<td><input type="checkbox" name="course" value="'. $coursetitle .'-'. $username .'"></td>';
echo '</tr>';
}
}
?>
</table>
<input type="submit" class="btn btn-default" style="<?php echo $btn_custom; ?>">
</form>
insert语句(表单操作):
<?php
require '../manager-session.php';
require '../../db-config.php';
include '../../distributor-config.php';
if(isset($_POST['course'])) {
$selected = explode(',', $_POST['course']);
$coursetitle = $selected[0];
$username = $selected[1];
echo 'Selected: '. $selected .'';
echo 'Course Title: '. $coursetitle .'';
echo 'Username: '. $username .'';
$stmt = $conn->prepare("INSERT INTO users_on_courses (useroncourse, course) VALUES (?, ?)");
$stmt->bind_param("ss", $username, $coursetitle);
$stmt->execute();
header('location: ../add-users-to-courses.php?page=add-users-to-courses&status=success');
exit();
}
else {
header('location: ../add-users-to-courses.php?page=add-users-to-courses&status=error');
exit();
}
$stmt->close();
$conn->close();
?>
目前,$ selected等于'课程名称 - 用户名'。我正在尝试将课程名称插入课程列,然后显然是useroncourse列中的用户名。
是否可以按照我开始的方式做到这一点?
答案 0 :(得分:0)
您应该使用 explode()
示例 -
$selected = explode('-', $_POST['course']);
$courseName = $selected[0];
$username = $selected[1];
然后您可以将这些变量存储到db。
答案 1 :(得分:0)
你可以使用explode:
*
当您使用带有此 <?php
require '../manager-session.php';
require '../../db-config.php';
include '../../distributor-config.php';
if(isset($_POST['course'])) {
foreach ($_POST['course'] as $course) {
$selected = explode(',', $course);
$courseTitle = $selected[0];
$username = $selected[1];
$stmt = $conn->prepare("INSERT INTO users_on_courses (useroncourse, course) VALUES (:userOnCourse, :username)");
$stmt->bind_param("userOnCourse", $courseTitle);
$stmt->bind_param("username", $username);
$stmt->execute();
}
$stmt->close();
$conn->close();
}
?>
的输入字段时,您在服务器端获得的结果将是一个数组。因此,如果您使用name="names[]"
,您将获得包含所选课程的数组。
答案 2 :(得分:0)
您可以使用.config(['$httpProvider', function($httpProvider) {
$httpProvider.interceptors.push(['$location', '$q', function($location, $q) {
return {
'request': function(request) {
// My angularJS Function goes here.
return request;
},
'responseError': function(response) {
return $q.reject(response);
}
};
}]);
}])
,但如果课程名称或学生姓名也包含explode(' - ', $courseValue);
,则可能会失败。
您可以使用与-
类似的正则表达式模式,但它也不安全。
我建议你这第三个选择。
从表格开始分隔值。
/^(\w)[\s+]-[\s+](\w)$/i
现在使用DOM选择器获取<input type="checkbox"
name="course[]"
value="'. $coursetitle .' - '. $username .'"
data-course="' . $coursetitle . '"
data-user="' . $username . '">
属性并使用Ajax提交此表单。
这也是最佳做法。您不希望合并已经分离的结构化数据,然后将其提取并存在失败风险。