查找哪个自动生成的输入被更改/按钮被按下-更新



我有一个PHP&mySQL代码,该代码生成一个html表,其中包含具有唯一名称的输入字段和按钮。这是这样做的代码:

echo     "<input type="hidden"name="id_$num" 
value=".$row['idSales']."><tr><td>".$row['idSales'].
"</td><td>". $username.
"</td><td>". $row['product'].
"</td><td>". $row['productAmount'].
"</td><td>". $row['dateOfPurchase'].
"</td><td>". $row['userAddress'].
"</td><td><a href="$eLink">". $eLink .
"</a></td><td>
<input type="text" name="status_$num" class="input" value=".$row['productStatus']. ">
<input type="submit" name="submit_$num" value="submit" class="button"></td></tr>" ;

(代码循环产生每一行表格(

表格的形式是,当按下按钮时,会触发另一个文件中的代码(动作="…"(

我试图做的是找出按下了哪个按钮:

$num = -1;
while(!isset($_POST["submit_$num"])){
$num = $num +1;
if(isset($_POST["status_$num"])){
$status = $_POST["status_$num"];
$id = $_POST["id_$num"];   
}

问题:我的网站没有停止加载,我认为这意味着循环是无休止的。

问题:

  1. 有办法找到按下的按钮吗?也许我的方法有效,但我有语法错误

2.$_POST函数是否适用于非输入类型?$_POST会提取id吗

谢谢!

编辑:更新感谢大家的回答,我修复了您告诉我的错误,并更新了上面帖子中的代码,尽管循环继续无限循环,但我尝试在if语句中添加一个break,代码有效,但仅用于第一次输入。

提交时无需循环即可完成,使用数组语法输入名称

name="id[$num]"替换name="id_$num",用name="status[$num]"替换name="status_$num",并用name="submit[$num]"替换name="submit_$num"。所以你的代码应该是这样的:

echo     "<input type="hidden"name="id[$num]" 
value=".$row['idSales']."><tr><td>".$row['idSales'].
"</td><td>". $username.
"</td><td>". $row['product'].
"</td><td>". $row['productAmount'].
"</td><td>". $row['dateOfPurchase'].
"</td><td>". $row['userAddress'].
"</td><td><a href="$eLink">". $eLink .
"</a></td><td>
<input type="text" name="status[$num]" class="input" value=".$row['productStatus']. ">
<input type="submit" name="submit[$num]" value="submit" class="button"></td></tr>" ;

$_POST['submit']将包含具有一个元素[$num => 'submit']的数组。CCD_ 9和CCD_。您可以轻松获取id和状态:

$num = array_shift(array_keys($_POST['submit']));
$id = $_POST['id'][$num];
$status = $_POST['status'][$num];

如果$row['idSales']是一个整数并且是唯一的,那么您也可以去掉隐藏的输入"id",并使用$row〔'idSales'〕作为键,而不是$num。所以第一个片段是:

echo    "<tr><td>".$row['idSales'].
"</td><td>". $username.
"</td><td>". $row['product'].
"</td><td>". $row['productAmount'].
"</td><td>". $row['dateOfPurchase'].
"</td><td>". $row['userAddress'].
"</td><td><a href="$eLink">". $eLink .
"</a></td><td>
<input type="text" name="status[" . $row['idSales'] . "]" class="input" value=".$row['productStatus']. ">
<input type="submit" name="submit[" . $row['idSales'] . "]" value="submit" class="button"></td></tr>" ;

和第二个

$id = array_shift(array_keys($_POST['submit']));
$status = $_POST['status'][$id];

如果我理解正确,如果遇到有效的$POST["submit$num"],while((循环应该会中断?

$num在while((循环中没有增加:它的值保持在-1!isset((仍然有效,因此您有一个无休止的循环

我建议将您的表格改写为

echo "... <input type='submit' name 'btnSubmit' value='$num'> ..." ;

然后您可以直接查询$_POST['btnSubmit'],而不需要无休止的循环。

关于$_POST与非输入字段的问题:不,您至少需要一个隐藏的输入字段才能显示在$_POST[]中

edit:在中尝试此示例代码http://phpfiddle.org/:

<html>
<head>
</head>
<body>
<?php
if ( isset($_POST['btnSubmit']) )
{
echo "<P>In previous run, submitted value " . $_POST[ 'entry' . $_POST['btnSubmit'] ] . "</P> rn" ;
}
else
echo "<P>No submit in previous run ...</P> rn" ;    
?>
<form name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" >
<input type=text name="entry1" value="123">
<input type=submit name="btnSubmit" value="1"><br/>
<input type=text name="entry2" value="456">
<input type=submit name="btnSubmit" value="2">
</form>
</body>
</html>

您可以编辑两个文本字段,然后单击1提交按钮:脚本将返回相应的更新值

编辑2

<html>
<head>
<script>
function mySubmit(submitValue)
{   
try
{
// store selected submit value in hidden INPUT 
document.getElementById('submitID').value = submitValue ;
// manually submit the form
document.getElementById('formID').submit() ;
}
catch(err)
{
alert(err.message) ;
}    
}
</script>    
</head>
<body>
<?php
if ( isset($_POST['btnSubmit']) )
echo "<P>In previous run, you submitted value " . $_POST[ 'entry' . $_POST['btnSubmit'] ] . "</P> rn" ;
else
echo "<P>No submit in previous run ...</P> rn" ;
?>
<form id='formID' name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" >
<input type=text name="entry1" value="123">
<button onClick="mySubmit(1);">Submit me !</button><br/>
<input type=text name="entry2" value="456">
<button onClick="mySubmit(2);">Submit me !</button><br/>
<input type=hidden id='submitID' name='btnSubmit'>    
</form>
</body>
</html>

现在,这是一个快速而肮脏的方法,所以根据您的完整情况,您可以考虑设置一个AJAX调用

最新更新