Php Bootstrap 4是否将组项列为表单输入值?
我正在重做整个帖子,因为我很难解释这个问题。 此代码的作用是: 用户可以创建新的培训课程。他们可以命名它,如果他们愿意,他们可以从以前创建的会话中复制内容 我使用Bootstrap 4列表组项来显示以前的会话。我的问题是,我无法捕获用户选择将数据发布到activateSaveTrainingSession.php,其中包括将新数据插入数据库的SQL查询 我可以将表单中的数据从inputSessionName-input传递到动作php文件。如您所见,我还尝试使用input type=“hidden”。它可以工作,但是它只使用它获取的第一行中的$sessionId,而不是用户选择。这就是问题所在:如何捕获用户选择的列表项,以便将数据发布到activateSaveTrainingSession.phpPhp Bootstrap 4是否将组项列为表单输入值?,php,html,Php,Html,我正在重做整个帖子,因为我很难解释这个问题。 此代码的作用是: 用户可以创建新的培训课程。他们可以命名它,如果他们愿意,他们可以从以前创建的会话中复制内容 我使用Bootstrap 4列表组项来显示以前的会话。我的问题是,我无法捕获用户选择将数据发布到activateSaveTrainingSession.php,其中包括将新数据插入数据库的SQL查询 我可以将表单中的数据从inputSessionName-input传递到动作php文件。如您所见,我还尝试使用input type=“hidde
<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实时禁用它们
例如,您将copySessiondisabled
的所有字段放入其中,并向其中添加一个类。然后在按钮上添加相同类,当用户单击按钮时,相关字段将删除禁用的
使用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);
});