Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Bootstrap 4是否将组项列为表单输入值?_Php_Html - Fatal编程技术网

Php Bootstrap 4是否将组项列为表单输入值?

Php Bootstrap 4是否将组项列为表单输入值?,php,html,Php,Html,我正在重做整个帖子,因为我很难解释这个问题。 此代码的作用是: 用户可以创建新的培训课程。他们可以命名它,如果他们愿意,他们可以从以前创建的会话中复制内容 我使用Bootstrap 4列表组项来显示以前的会话。我的问题是,我无法捕获用户选择将数据发布到activateSaveTrainingSession.php,其中包括将新数据插入数据库的SQL查询 我可以将表单中的数据从inputSessionName-input传递到动作php文件。如您所见,我还尝试使用input type=“hidde

我正在重做整个帖子,因为我很难解释这个问题。

此代码的作用是: 用户可以创建新的培训课程。他们可以命名它,如果他们愿意,他们可以从以前创建的会话中复制内容

我使用Bootstrap 4列表组项来显示以前的会话。我的问题是,我无法捕获用户选择将数据发布到activateSaveTrainingSession.php,其中包括将新数据插入数据库的SQL查询

我可以将表单中的数据从inputSessionName-input传递到动作php文件。如您所见,我还尝试使用input type=“hidden”。它可以工作,但是它只使用它获取的第一行中的$sessionId,而不是用户选择。这就是问题所在:如何捕获用户选择的列表项,以便将数据发布到activateSaveTrainingSession.php

<div class="row">
    <div class="col-lg-12">
        <form class="was-validated" action="activateSaveTrainingSession.php" method="post">
            <div class="custom-control">
                <div class="form-group">
                    <label for="inputSessionName" class="float-left"><?php echo $lang['TRAINING_SESSIONNAME_HEADER'] ?></label>
                    <input type="text" class="form-control" id="inputSessionName" name="inputSessionName" placeholder="Example 1" minlength="3" maxLength="128" required>
                    <small id="inputSessionNameHelp" class="form-text text-muted">
                        <?php echo $lang['TRAINING_SESSIONNAME_HELPTEXT'] ?>
                    </small>
                </div>
            </div>
            <h5 class = "mt-3"><?php echo $lang['TRAINING_COPYSESSION_HEADER'] ?></h5>
            <div class="row mt-3">
                <div class="col-lg-6 mb-3">
                    <div class="list-group" id="list-tab" role="tablist">
                        <a class="list-group-item list-group-item-action active" id="list-doNotCopy-list" data-toggle="list" href="#list-doNotCopy" role="tab" aria-controls="list-doNotCopy">Do not copy</a>
                        <?php
                        $stmt = $link->prepare('SELECT `id`, `sessionName`, `createDate` FROM `trainingSessions` WHERE `userId` = ? ORDER BY `id` DESC LIMIT 5');
                        $stmt->bind_param('i', $currentUserId);
                        $stmt->execute();
                        $stmt->store_result();
                        $stmt->bind_result($sessionId, $sessionName, $sessionNameDate);
                        $sessionCounter = 0;
                        $tabsArray = array();
                        if ($stmt->num_rows > 0) {
                            while ($stmt->fetch()) {
                                $sessionNameDateFixed = date("d.m.Y", strtotime($sessionNameDate));
                                $sessionCounter += 1;
                                $listId = "list-$sessionId-list";
                                $tabId = "list-$sessionId";
                                array_push($tabsArray, $sessionId)
                                ?>
                                <a class="list-group-item list-group-item-action" id="<?php echo $sessionId ?>" data-toggle="list" href="#<?php echo $tabId ?>" role="tab" aria-controls="<?php echo $tabId ?>"><?php echo $sessionName ?><input type='hidden' name='copySession' value='<?php echo $sessionId ?> '/></a>
                                <?php
                            }
                        } else {
                            echo "No results.";
                        }
                        $stmt->close();
                        echo "Displaying last $sessionCounter records.";
                        ?>
                    </div>
                </div>
                <div class="col-lg-6">
                    <div class="tab-content" id="nav-tabContent">
                        <div class="tab-pane fade" id="list-doNotCopy" role="tabpanel" aria-labelledby="list-doNotCopy-list">Do not copy data from previous session.</div>
                        <?php
                        foreach ($tabsArray as $session) {
                            $tabsTextArray = array();
                            $stmt = $link->prepare('SELECT trainingSessions.id, workouts.workoutName, exercises.setNumber, exercises.reps, exercises.weights FROM workouts INNER JOIN exercises ON workouts.id = exercises.workoutId INNER JOIN trainingSessions on trainingSessions.id = exercises.sessionId WHERE exercises.userId = ? AND trainingSessions.id = ? ORDER BY exercises.id DESC');
                            $stmt->bind_param('ii', $currentUserId, $session);
                            $stmt->execute();
                            $stmt->store_result();
                            $stmt->bind_result($sessionId, $workoutName, $set, $reps, $weights);
                            if ($stmt->num_rows > 0) {
                                while ($stmt->fetch()) {
                                    $tabText = "<strong>$workoutName</strong> sarja $set, $reps x $weights kg<br>";
                                    array_push($tabsTextArray, $tabText);
                                }
                            }
                            $listId = "list-$sessionId-list";
                            $tabId = "list-$sessionId";
                            ?>
                            <div class = "tab-pane fade" id="<?php echo $tabId ?>" role = "tabpanel" aria-labelledby = "<?php echo $listId ?>"><?php
                                foreach ($tabsTextArray as $text) {
                                    echo "$text";
                                }
                                ?>
                            </div>
                            <?php
                        }
                        $stmt->close();
                        ?>
                    </div>
                </div>
            </div>
            <button type="submit" name="buttonSaveTrainingSession" class="btn btn-success float-left"> 
                <i class="fas fa-sd-card"></i>
                <?php echo $lang['TRAINING_BTN_SAVE'] ?>
            </button>
        </form>
    </div>
</div>

不要复制上一个会话中的数据。
activateSaveTrainingSession.php

<?php

require_once('config/sql.php');
include_once('config/common.php');
if (!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true) {
    header("location: login.php");
    exit;
}

$currentUserId = $_SESSION["currentUserId"];

$submitButton = strip_tags(trim($_POST['buttonSaveTrainingSession']));
if (isset($submitButton)) {
    $inputSessioName = filter_var(trim($_POST["inputSessionName"]), FILTER_SANITIZE_FULL_SPECIAL_CHARS);
    $copySessionID = filter_var(trim($_POST["copySession"]), FILTER_SANITIZE_NUMBER_INT);

    if (empty($inputSessioName) && strlen($inputSessioName) < 3 && $inputSessioName > 128) {
        header("location: training.php?msg=invalidSessionName");
    } else {
        echo "Name: $inputSessioName <br>";
        echo "ID: $copySessionID";
    }
} else {
    header("location: 404.php");
}
?>

我想我理解你的问题

您可以在表单中发送多个字段:

<input type = 'hidden' name = 'copySession' ...>
只有一个,因此是第一个

如果要发送所有邮件,您必须执行以下操作:

<input type = 'hidden' name = 'copySession[]' ...>
如果只想发送一个字段,则必须在选择过程中使用javascript实时禁用它们

例如,您将copySession
disabled
的所有字段放入其中,并向其中添加一个类。然后在按钮上添加相同类,当用户单击按钮时,相关字段将删除禁用的

使用jQuery时,类似于:

//Click on button
$('a.specialClass').on('click', function(){

    //Disabled all copySession inputs
    $('input[name="copySession"]').prop('disabled', true);

    //Let the field concerned able to be send 
    $('input.specialClass[name="copySession"]').prop('disabled', false);
});

祝你好运

您好,为了更好地理解您的请求,您可以分享更多关于sql请求、数据显示和表单的代码吗?谢谢对不起,你说的是一个动作表。你能在代码的结构中发布它吗?您想将信息发送到哪里?谢谢!我以前尝试过使用该表,但不知道如何在activateSaveTrainingSession.php中使用它。我仍然很难理解javascript部分,因为它是我还没有完全学会的部分,但我会尽我最大的努力。一旦完成,我会将此标记为一个答案:)但至少我现在就获得了activateSaveTrainingSession.php的所有ID。是的,在尝试将所选值仅获取到action.php文件后,我似乎无法让它工作:(使用var_dump($\u REQUEST[]向我们展示action.php文件获取的内容)名称:下面每个copySession的测试名称:ID:4 ID:3 ID:2 ID:1下面的变量转储:数组(4){[0]=>string(2)“4”[1]=>string(2)“3”[2]=>string(2)“2”[3]=>string(2)“1”}您收到的数据在数字后面有一个空格([0]=>string(2)“4”)。您可以看到键的值是字符串2,而不是字符串1。您会收到一个额外的空间,这会更改数据。请使用trim()清除它
foreach($_POST["copySession"] as $sessionId){ ... }
//Click on button
$('a.specialClass').on('click', function(){

    //Disabled all copySession inputs
    $('input[name="copySession"]').prop('disabled', true);

    //Let the field concerned able to be send 
    $('input.specialClass[name="copySession"]').prop('disabled', false);
});