Javascript isset()对于动态窗体工作不正常
我有一个食堂菜单和购物车系统的代码。在用户从菜单中选择项目并单击“购买”按钮后,他们会得到一个排序的订单摘要,该摘要被动态编码为一个表单,订单按钮的作用类似于提交按钮。当我在php文档中使用isset()告诉它单击订单后要做什么时,即使表单没有出现,它也会返回true,并且没有要单击的提交按钮Javascript isset()对于动态窗体工作不正常,javascript,php,html,css,Javascript,Php,Html,Css,我有一个食堂菜单和购物车系统的代码。在用户从菜单中选择项目并单击“购买”按钮后,他们会得到一个排序的订单摘要,该摘要被动态编码为一个表单,订单按钮的作用类似于提交按钮。当我在php文档中使用isset()告诉它单击订单后要做什么时,即使表单没有出现,它也会返回true,并且没有要单击的提交按钮 <?php if(isset($_POST['ORDER'])){ echo "Hi"; } ?
<?php
if(isset($_POST['ORDER'])){
echo "Hi";
}
?>
即使用户还没有购买任何东西,订单摘要或名为“订单”的订单按钮也还没有出现,这也会让我感到“嗨”。
下面是我的Javascript代码,用于动态地将购物车更改为订单摘要并返回
function array(){
title=document.getElementsByClassName("cafe")[1];
alternate_title=`<br>
<center><h1>Order Summary</h1></center>
<br>`
title.innerHTML=alternate_title;
name=document.getElementsByClassName("cus_name")[0].textContent;
console.log(name);
order=[];
var cartRows=document.getElementsByClassName('cart-items')
for(var i=0;i<cartRows.length;i++){
var cartRow=cartRows[i];
var nameElement=cartRow.getElementsByClassName("item-name")[0];
var name=nameElement.textContent;
var quantityElement=cartRow.getElementsByClassName("quantity")[0];
var quantity=parseFloat(quantityElement.value);
item=[name,quantity];
order.push(item);
}
var contents=`<form method="post"><div class="centered">`
for(var i=0;i<order.length;i++){
contents=contents+`<div class="cart-items" style="display: flex;">
<div style="width:2em;">${i+1}.</div>
<div><input type="text" value="${order[i][0]}" name="pdt_name[]"></div>
<div><input type="number" value="${order[i][1]}" name="pdt_qty[]"></div>
<div></div>
</div><br>`;
}
contents=contents+`<br><center><input type="submit" name="ORDER" class="a" value="Order"></center></div></form>`;
var half=document.getElementsByClassName("bill")[0];
half.innerHTML=contents;
document.getElementsByClassName("e")[0].addEventListener("click", goBack) ;
function goBack(){
title=document.getElementsByClassName("cafe")[1];
alternate_title=`<br>
<center><h1>Cart</h1></center>
<br>`
title.innerHTML=alternate_title;
contents=`<div class="bg">
<div class="all-items">
</div>
<hr>
</div>
<div class="eh"><h2><center>Total: <span class="total">Rs. 0</span></center></h2></div>
<br>
<center><input type="submit" value="Purchase" class="c"></center>
</div>`
var half=document.getElementsByClassName("bill")[0];
half.innerHTML=contents;
}
}
函数数组(){
title=document.getElementsByClassName(“cafe”)[1];
备选标题=`
订单摘要
`
title.innerHTML=备用标题;
name=document.getElementsByClassName(“cus_name”)[0].textContent;
console.log(名称);
订单=[];
var cartRows=document.getElementsByClassName('cart-items')
对于(var i=0;i编辑:这有更简单的解决方案
$PageWasRefresh=isset($_服务器['HTTP_缓存控制'])和&$_服务器['HTTP_缓存控制']=='max age=0';
如果($PageWasRefresh){
//因为页面已刷新,所以执行某些操作;
}否则{
//什么也不做;
}
如果要阻止刷新后执行的相同post数据,可以在表单上使用令牌。
不是最佳解决方案,但它确实有效
Hi!欢迎使用Stackoverflow。很难用假设的代码帮助您。请通读本页。将“Hi”替换为var\u dump($\u POST);
。让我们看看您的数组(3){[“pdt\u name”]=>array(2){[0]=>string(5)“Latte”[1]=>string(7)“Macaron”}[“pdt\u数量”=>array(2){[0]=>string(1]=>string(1)“1”}[“ORDER”]=>string(5)“ORDER”}类似于这样的内容您是在加载新页面,还是碰巧重新加载了已发布的页面?它可以减少您粘贴到问题中的不必要代码的数量,从而帮助其他人。下面是它的说明:“注意:未定义的索引:第167行表单上C:\xampp\htdocs\食堂自动化系统-Copy\cart.php中的令牌已过期!”当我再次订购时,它不会更改。未定义的索引:令牌发生的原因是令牌未按请求发送,它应该在表单上输入名为令牌的令牌。如果令牌未更改,您可以移动regeneraeToken()
在if(isset($\u POST[“submit”])之前打开
关闭标记现在它只给我“表单已过期”。它还打印了“>订单摘要附近…这可能是因为我是在Javascript代码中执行此操作的吗?