声明一个 JavaScript 变量,它将为 php 变量保留位置

Declare a JavaScript variable that will hold place for php variable

本文关键字:变量 php 位置 保留 声明 一个 JavaScript      更新时间:2023-09-26

我有一个制作问卷的应用程序。用户有索引.php页面,他们在其中创建问题并选择最少数量的答案,然后他们有进程.php页面,他们可以在其中输入答案或添加更多答案

问题:当用户单击add more button时,它会创建特定问题的文本区域,但名称错误。"添加更多"按钮应添加一个文本区域,并根据定义的文本区域的最小值更改其名称。因此,例如,如果您在问题 2 中有 4 个定义的文本区域,则下一个文本区域应该像 odg25、odg26、odg27、odg28 等......

问题出在变量$k(进程.php)中 - 因为它没有在 addmore 函数中定义,但我不知道如何以某种方式传入这部分代码来实现它。

这是测试环节

指数。.PHP

<input id="btntxt" type="submit" value="TEXT" onclick="addtxt();" /><br/><br/>
<form action="process.php" method="post">
Title: <br/><input type="text" name="naslov" size="64" required ><br/>
Maximum characters: <br/><input type="text" name="chars" size="64"><br/><br/>
<div id="brain1"></div><br/>
<input type="submit" name="submit" value="CONFIRM"><br/>
</form>

过程。.PHP

<script type="text/javascript">
<?php $chars = $_POST['chars']; ?>
function addmore(index) {
    var textarea = document.createElement("textarea");
        textarea.name = "odg" + index + //WHAT SHOULD I ADD HERE???;
        textarea.rows = 3;
        textarea.setAttribute('maxlength',<?php echo $chars ?>);
        var div = document.createElement("div");
        div.innerHTML = textarea.outerHTML;
        document.getElementById("inner"+index).appendChild(div);
}
</script> 
<body>
<?php
$bla = "";
$pitanje = $_POST['question'];
$length = count($_POST['question']);
$req = $_POST['req'];
$requiem = '';
$min = $_POST['min'];
$area = array("","","","","","","","","","","","","","","");
for($j=1; $j<$length+1; $j++) {
if($_POST['question'][$j] != "") {
    if(($min[$j])!="") {
    for($k=1;$k<=$min[$j];$k++) {
    $area[$j] .= '<textarea name="odg'.$j.$k.'" rows="3"'.$requiem.' maxlength="'.$chars.'" ></textarea><br/>';}}
    if(($min[$j])=="") {
    $area[$j] = '<textarea name="odg'.$j.$k.'" rows="3"'.$requiem.' maxlength="'.$chars.'" ></textarea>';}
    $addmore = '<input type="button" name="more" value="Add more" onClick="addmore('.$j.');">';
    $bla .= $j.') '.$pitanje[$j].'<br/>'.$area[$j].'<div id="inner'.$j.'"></div>'.$addmore.'<br/>';}}
echo $bla;
?>

FNCS.JS

var n = 1;
function addtxt() {
        var textarea = document.createElement("textarea");
        textarea.name = "question[" + n + "]";
        var required = document.createElement("input");
        required.type = "checkbox";
        required.name = "req[" + n + "]";
        var minimum = document.createElement("input");
        minimum.type = "text";
        minimum.name = "min[" + n + "]";
        var div = document.createElement("div");
        div.innerHTML = n + ". Question: " + "<br />" + textarea.outerHTML + "<br />" + "Required: " + required.outerHTML + "<br />" + "Min: " + minimum.outerHTML + "<br /><hr/><br/>";
        document.getElementById("brain1").appendChild(div);
        n++;
}

我做了同样的开发。

我在javascript中有一个全球化计数器(cpt)每重复增加1我的变量像这样重复id = "foo_" + cpt.

我为计数器<input type="hidden" id = "cpt">添加了一个隐藏字段,并且每次复制都会更改其值。

Php方面,我恢复了计数器,然后恢复了一个循环来遍历所有重复的字段。

// For example
$cpt = $_POST['cpt'];
for ($i = 1; $i <= $cpt; $i++) {
    $foo[$i] = $_POST['foo_' . $i];
}

我希望它会有所帮助。

你正在混合JavaScript和PHP。PHP 正在做问题生成的一部分,然后 JavaScript 必须从它停止的地方继续。

这种方法的问题在于,您会发现最终会复制许多功能。

答案是我应该在这里添加什么???是"odg" + $j + $k

相反,如果您从执行以下操作开始:

var questions = <?php echo json_encode($_POST["question"]);?>;

您现在拥有 JavaScript 中的所有问题数据。您可以将for循环从PHP移动到JavaScript,并在那里jk

你要做的是让$k能够传递到process.php
这是通过这样的事情完成的:

<form action="process.php" method="post">
Title: <br/><input type="text" name="naslov" size="64" required ><br/>
Maximum characters: <br/><input type="text" name="chars" size="64"><br/><br/>
<div id="brain1"></div><br/>
<input id="numRows" type="hidden" name="numRows" value="1"/>
<input type="submit" name="submit" value="CONFIRM"><br/>
</form>

请注意,我添加了一个名为"numRows"的新<input>元素,该元素将通过POST传递到process.php。 我给它一个任意默认value 1,您可以根据需要进行设置。

现在,当用户在 fncs 中单击"添加更多"按钮时.js执行以下操作: document.getElementById("numRows").value++;

最后,在您的process.php中,您需要读取此值,如下所示$k:
<?php $k = isset($_POST['numRows']) ? urldecode($_POST['numRows']) : 1; ?>

在过程中.php您可以随心所欲地做,然后,使用该值$k

您需要将最后一个文本区域值存储在隐藏变量中,并始终递增该值

  • 第一步:开始时设置隐藏变量和计数器的值'n' 相同

  • 第二步:在添加新文本区域的每一步,
    用文本区域的新计数器值覆盖隐藏值

请记住,文本区域计数器应始终从隐藏值中获取

我认为这可以帮助您解决问题