使用PHP从一个implode变量中创建两个值

时间:2016-10-25 12:29:05

标签: php

我创建了一个允许用户勾选复选框的表单,当用户发布表单时,我想以某种方式将“ - ”符号后面的复选框值拆分,并将两个值插入两个单独的列中。

第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列中的用户名。

是否可以按照我开始的方式做到这一点?

3 个答案:

答案 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提交此表单。

这也是最佳做法。您不希望合并已经分离的结构化数据,然后将其提取并存在失败风险。