javascript - PHP - 我如何从查询字符串中取回(jquery)循环数组
问题描述
嘿,我还是 PHP 新手,正在创建一个表单,在表单中我有一个从 JQuery 创建和循环的数组。所以最初表单中只有 1 个输入字段,但用户最多可以创建 5 个输入字段。如果表单失败,那么我想发回用户输入,这样他们就不必重新填写它们。但是没有任何东西被发回,并且在查询字符串中它只是发回了“kname = Array”。然后表单将其重置回 1 个输入字段,即使他们已将其扩展为 5。
这是html:
<label for="names" id="name"> Names:
<input type="text" name="name[]" class="names" required value="<?php if
(isset($_GET['name']) && $_GET['name'] !== '') {echo $_GET['name'];} ?>">
</label>
<span id="warning"></span>
<button id="morenames">ADD MORE NAMES</button>
这是我如何获取然后通过 PHP 将其发送回
得到
if (isset($_POST['name']) && $_POST['name'] !== '') {
$vName= $_POST['name'];
$allnames = '';
foreach ($vName as $vNames) {
$allnames .= $vNames. ' ';
}
if (filter_var($allnames , FILTER_SANITIZE_STRING) === null) {
$vValidation++;
}
} else {
$vValidation++;
}
如果验证失败,则将其发回
$querystring = "kname=$vName";
$querystring .= "&";
$querystring .= "ksurname=$vSurname";
$querystring .= "&";
$querystring .= "kvalidation=failed";
header('Location: questionaire.php?' . $querystring );
exit();
JQuery 代码(当我单击输入时,我从旁注上的堆栈溢出从其他人那里得到它,它也删除了该行是否可以删除它,以便只有当他们单击删除按钮时它才会删除?)
$(document).ready(function() {
var max_fields = 5;
var wrapper = $("#name");
var add_button = $("#morenames");
var x = 1;
$(add_button).click(function(e){
e.preventDefault();
if(x < max_fields){
x++;
$(wrapper).append('<div><input name="name[]" class="names" required style="margin-bottom:5px;"><button id="delete">Delete</button></div>'); //add input box
}
else
{
alert('You Reached the limits')
}
});
$(wrapper).on("click","#delete", function(e){
e.preventDefault(); $(this).parent('div').remove(); x--;
});
});
任何帮助将不胜感激。
我放了什么 放什么
解决方案
您不需要将 get 参数直接放在输入上,例如:
<input type="text" name="name[]" class="names" required value="<?php if
(isset($_GET['name']) && $_GET['name'] !== '') {echo $_GET['name'];} ?>">
但这会从 url 中获取参数,然后从 js 创建您的输入,如下所示
var max_fields = 5;
var wrapper = $("#name");
var add_button = $("#morenames");
var x = 1;
// init inputs
init();
$(add_button).click(function (e) {
e.preventDefault();
if (x < max_fields) {
x++;
$(wrapper).append('<div><input name="name[]" class="names" required style="margin-bottom:5px;"><button id="delete">Delete</button></div>'); //add input box
} else {
alert('You Reached the limits')
}
});
$(wrapper).on("click", "#delete", function (e) {
e.preventDefault();
$(this).parent('div').remove();
x--;
});
function getUrlVars() {
var vars = {};
var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (m, key, value) {
vars[key] = value;
});
return vars;
}
function init() {
var names_p = getUrlVars();
console.log(names_p);
Object.keys(names_p).forEach(function (key) {
x++;
$(wrapper).append(`<div><input name="name[]" class="names" value="${names_p[key]}" required style="margin-bottom:5px;"><button id="delete">Delete</button></div>`); //add input box
})
}
你的 html 变成:
<label for="names" id="name"> Names:
<input type="text" name="name[]" class="names" required value="">
</label>
<span id="warning"></span>
<button id="morenames">ADD MORE NAMES</button
完整代码:
<?php
if (isset($_GET['name']) && $_GET['name'] !== '') {
$vNameas= $_GET['name'];
foreach ($vNameas as $vName) {
$allnames .= $vName. ' ';
}
$querystring = "kname=" . implode ( "_" , $vNameas );
header('Location: ?' . $querystring );
exit();
}
?>
<form method="get" action="">
<label for="names" id="name"> Names:
<input type="text" name="name[]" class="names" required value="">
</label>
<span id="warning"></span>
<button id="morenames" type="button">ADD MORE NAMES</button>
<input type="submit" value="send">
</form>
<script
src="https://code.jquery.com/jquery-3.3.1.min.js"
integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
crossorigin="anonymous"></script>
<script>
var max_fields = 5;
var wrapper = $("#name");
var add_button = $("#morenames");
var x = 1;
// init inputs
init();
$(add_button).click(function (e) {
e.preventDefault();
if (x < max_fields) {
x++;
$(wrapper).append('<div><input name="name[]" class="names" required style="margin-bottom:5px;"><button id="delete">Delete</button></div>');
//add input box
}
else {
alert('You Reached the limits')
}
}
);
$(wrapper).on("click", "#delete", function (e) {
e.preventDefault();
$(this).parent('div').remove();
x--;
}
);
function getUrlVars() {
var vars = {
};
var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (m, key, value) {
if(key === 'kname') vars[key] = value;
}
);
return vars;
}
function init() {
var names_p = getUrlVars();
console.log(names_p);
if( names_p['kname']) {
names_p['kname'].split('_').forEach(function (key) {
x++;
$(wrapper).append(`<div><input name="name[]" class="names" value="${key}" required style="margin-bottom:5px;"><button id="delete">Delete</button></div>`);
console.log(key);
}
)
}
}
</script>
推荐阅读
- c# - identityserver4 和 asp net core spa
- c# - 如何根据四个点计算平均地形坡度?
- node.js - 无法从谷歌日历 api 中读取未定义的属性“删除”
- hadoop - Hadoop YARN - 作业消耗的资源超过用户限制因素
- vbscript - VBS 复制和创建一个连续的文件名
- ios - 应用内购买不提示输入电子邮件
- visual-studio-code - 如何在不丢失扩展和设置的情况下移动 VSCode 安装
- javascript - 如何使 onload 在 customize_controls_enqueue_scripts 上下文中运行 WordPress 主题定制器
- javascript - 您可以将条形厚度设置为与 ChartJS 中的 x 轴刻度对齐吗?
- html - 有没有办法通过在一个特定的选择器上使用悬停来将样式应用于整个页面的所有特定元素/类?