0

我在<selectphp/xhtml 页面上有一个元素。我没有使用提交按钮,而是尝试实现 Javascriptonchange()submit()方法。我需要传递多个变量来弥补丢失的隐藏字段。onchange 和 submit 方法正在触发,但我无法让它触发同一页面上的 PHP isset。

<?php
if(isset($_POST['companykey'])){
$nowIveGot1 = $_POST['COMPANYKEY'];
$nowIveGot2 = $_POST['USERNAME'];
?>

<script language="javascript">
function copy(selectedValuePassed, selectedNamePassed, userIDPassed, formNamePassed) { 
var formNameReceived = formNamePassed;
var userIDReceived = userIDPassed;
var selectedValueReceived = selectedValuePassed;
var selectedNameReceived = selectedNamePassed;

var form = document.createElement("form");     
form.setAttribute("method", "post"); 
form.setAttribute("action", ""); 
form.setAttribute("name", formNameReceived);
form.setAttribute("id", formNameReceived);

var valueSelected = document.createElement("input"); 
valueSelected.setAttribute("type", "hidden"); 
valueSelected.setAttribute("name", selectedNameReceived); 
valueSelected.setAttribute("id", selectedNameReceived);
valueSelected.setAttribute("value", selectedValueReceived);
form.appendChild(valueSelected); 

var passusername = document.createElement("input");
passusername.setAttribute("type", "hidden");
passusername.setAttribute("name", "USERNAME");
passusername.setAttribute("id", "USERNAME");
passusername.setAttribute("value", userIDReceived);
form.appendChild(passusername);

document.body.appendChild(form); 
form.submit(); 
} 
</script>

<select onchange="copy(this, 'COMPANYKEY','jarrett', 'companykey');">
  <option value="Text1">Text 1</option>
  <option value="Text2">Text 2</option>
</select>

已解决:为 valueSelected 和 passusername 创建一个父元素。将其命名为 isset 检查名称。

4

1 回答 1

0

如果我理解你的问题...

<?php
if(isset($_POST['companykey'])){
    $nowIveGot1 = $_POST['COMPANYKEY'];
    $nowIveGot2 = $_POST['USERNAME'];
}

$_POST['companykey']永远存在nullif条件永远不会执行。

这是因为键值对在$_POST附加到<form>元素时不会传递到数组中,只有嵌入<input>的。

在您的 javascript 中,您将'companykey'作为最后一个参数传递给copy. 从那里它被分配到formNameReceived。然后,您将其分配给name表单的属性:

form.setAttribute("name", formNameReceived);
form.setAttribute("id", formNameReceived);

'companykey'永远不会$_POST像这样出现在数组中,它不附加到输入,而是附加到form自身。

作为一个普通的 HTML 类似物,想象一下:

<? print_r($_POST);?>
<html>
<body>
<form method='post' name='cat' value='dog'>
    <input type='hidden' name='foo' value='bar'/>
    <input type='submit'/>
</form>
</body>
</html>

无论您提交此表单多少次,它都不会包含该cat -> dog对。如果要'companykey'出现在数组中,则必须将其分配给另一个隐藏的输入。

于 2012-09-14T00:48:58.333 回答