有没有一种方法可以使表单提交两次?

时间:2019-06-28 16:39:20

标签: php forms submit

我正在从XML文件加载值,然后使用php页面上的表单更新XML。我的问题是-我有一个在节点上运行计数的查询,该查询工作得很好,但我也想用该计数更新节点并获取准确的值。提交表单时,它会按加载文件时的样子提交值,但是为了正确更新计数(因为我需要更新的节点数),我需要提交两次。我试图让它在body onload函数上提交表单,但是据我所确定的,当您单击“提交”按钮时,它并不能真正刷新整个页面。它会重新加载页面,但我无法使其真正运行任何脚本或onload函数。我想到但不知道如何实现的另一种方法是,如果我将选项值更改为close,则计数将减少。

<!DOCTYPE html>
<?php
$xml->load('test.xml');
$xpath = new DOMXpath($xml);
$liftsopen = $xpath->query("//node/Lifts-Open")->item(0);
$lift1status = $xpath->query("//areas/area[@name='Lift1']/lifts/lift[@name='Lift1']/@status")->item(0);
$lift2status = $xpath->query("//areas/area[@name='Lift2']/lifts/lift[@name='Lift2']/@status")->item(0);

$liftcount = 0;
foreach ( $xpath->query('//lifts/lift[@status="OPEN"]') as $count1 )   {
 $liftcount++;
}

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $lift1->nodeValue = $_POST['lift1statusform'];
    $lift2->nodeValue = $_POST['lift2statusform'];
    $liftsopen->nodeValue = $liftcount;
    $xml->save('test.xml');
}
?>

<body>
<form method="POST" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
        <h4>Lift1</h4>
        <select name="lift1statusform" >
          <option selected value="<?= htmlspecialchars($lift1status->nodeValue)  ?>"><?= htmlspecialchars($lift1status->nodeValue)  ?></option>
          <option value="OPEN">OPEN</option>
          <option value="CLOSED">CLOSED</option>
        </select>
        <h4>Gondola</h4>
        <select name="lift2statusform" >
          <option selected value="<?= htmlspecialchars($lift2status->nodeValue)  ?>"><?= htmlspecialchars($lift2status->nodeValue)  ?></option>
          <option value="OPEN">OPEN</option>
          <option value="CLOSED">CLOSED</option>
        </select>        
<input name="submit" type="button" value="Save"/>
</form>
</body>
</html>

使用以下Ajax函数两次提交表单:

function Test() {
    var form = $('form');
    $.ajax({
      type: 'POST',
      url: form.attr('action'),
      data: form.serialize(),
      success: function(data) {
        $.ajax({
          type: 'POST',
          url: form.attr('action'),
          data: form.serialize(),
          success: function(data) {
          location.reload(true);
          }
        });
        }
      });
    }

1 个答案:

答案 0 :(得分:1)

AJAX是否可以有效解决您的问题?

如果需要执行多个“表单提交”,则应检查AJAX的功能。 Ajax允许您使用后端PHP文件发送交换数据,而无需离开(甚至刷新)当前页面。也许这是您的解决方案。

与大多数js动作一样,它可以是事件驱动的(即由某个事件触发一次或多次),也可以在循环内重复进行,等等。

AJAX大多数使用jQuery库实现:

$(document).ready(function(){
    $.ajax({
        type: 'post',
         url: 'my_backend_file.php',
        data: {varname:value}
    }).done(function(recd){
        console.log('data recd from PHP side, if needed: ' + recd);
    });
});

尽管它在vanilla js中也得到了很好的处理。

参考文献和其他示例:

https://stackoverflow.com/a/54332971/1447509

Should I have one form or two separate forms

https://www.html5rocks.com/en/tutorials/file/xhr2