我有一个PHP表单如下。一旦用户选择了特定的行/行,我需要将相应的数据发送到我的PHP后端脚本。这里的externalID是唯一的。我的代码中面临两个问题
目前我将整个表单数据提供给我的PHP后端脚本,我需要的数据只对应于我选择的行。
我在页面中有两个按钮,如何在单击按钮时调用不同的php脚本。目前点击“发送MTDATA”会在表单操作中调用php脚本。
src代码:
<form target="iframe_b" action="/php_src/first.php" method="POST"
echo "sending data">
<fieldset>
<br><br>
<input type="button" id="activate_device" name="activatedevice" value="Activate_device">
<input type="submit" value="SEND MTDATA">
<table border="1">
<tr>
<th><input type="checkbox" id="selectall"/></th>
<th>External ID</th>
<th>Status</th>
</tr>
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = 'xxxx';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if (!$conn) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db("ApplicationServer") or die(mysql_error());
// Get all the data from the "example" table
$result = mysql_query("SELECT EXTERNAL_ID,CONNECTION_STATUS FROM DEVICE_DETAILS") or die(mysql_error());
while ($row = mysql_fetch_array($result)) {
$extID = $row['EXTERNAL_ID'];
$conStatus = $row['CONNECTION_STATUS'];
echo "</tr><tr>";
echo "</td><td>";
echo "<input type=\"checkbox\" class=\"case\" name=\"checkBox".$extID."\" />";
echo "</td><td>";
echo "<input type=\"text\" class=\"classextID\" value=\"$extID\" name=\"textExID".$extID."\" />";
echo "</td><td>";
echo "<input type=\"text\" class=\"classConnection\" value=\"$conStatus\" name=\"textcon".$extID."\" />";
}
?>
</table>
</fieldset>
</form>
输出:
array(9) { ["checkBox123456@mydomain_com"]=> string(2) "on" ["textExID123456@mydomain_com"]=> string(19) "123456@mydomain.com" ["textcon123456@mydomain_com"]=> string(16) "request accepted" ["checkBox1234@mydomain_com"]=> string(2) "on" ["textExID1234@mydomain_com"]=> string(17) "1234@mydomain.com" ["textcon1234@mydomain_com"]=> string(16) "request accepted" ["checkBox53278@mydomain_com"]=> string(2) "on" ["textExID53278@mydomain_com"]=> string(18) "53278@mydomain.com" ["textcon53278@mydomain_com"]=> string(16) "request accepted" }
答案 0 :(得分:1)
所有html输入 - 除了未选中的复选框 - 都会发送到服务器,因此避免这种情况的唯一方法是在发送表单之前使用javascript从表单中完全删除未选中的行。
但是,如果数据总量不是问题,但您只是希望能够轻松选择已检查的行,则应在html中使用数组:
echo "<input type=\"checkbox\" class=\"case\" name=\"checkBox[".$extID."]\" />";
^ array ^
echo "</td><td>";
echo "<input type=\"text\" class=\"classextID\" value=\"$extID\" name=\"textExID[".$extID."]\" />";
echo "</td><td>";
echo "<input type=\"text\" class=\"classConnection\" value=\"$conStatus\" name=\"textcon[".$extID.]"\" />";
现在你的$_POST['checkBox']
等变量也将成为php中的数组,因此您可以轻松地循环它们,因为键是$extID
值。正如我之前提到的,只有选中的复选框才会发送到服务器:
// Loop over the sent-in / selected checkboxes
foreach (array_keys($_POST['checkBox']) as $key) {
var_dump($_POST['textExID'][$key]);
// etc.
}
另请注意,您的html可能无效,因为您没有关闭最后一行,但我认为这不会导致表单出现任何问题。
答案 1 :(得分:0)
一种方法是在数组中收集输入。
<?php
echo "</tr><tr>";
echo "</td><td>";
echo "<input type='checkbox' class='case' name='$extID[ checkBox ]' />";
echo "</td><td>";
echo "<input type='text' class='classextID' value='$extID' name='$extID[ textExID ]' />";
echo "</td><td>";
echo "<input type='text' class='classConnection' value='$conStatus' name='$extID[ textcon ]' />";
?>
然后,如果您检查$ _POST,您将在数组中找到一个数组,循环第一个数组并收集每个$ extID的详细信息。
对于这两个按钮,您可以命名提交按钮,然后检查已按下哪个按钮。
<input type="button" id="activate_device" name="activatedevice" value="Activate_device">
<input type="submit" value="SEND MTDATA" name="submit_button">
<?php
if( isset( $_POST[ 'submit_button' ] ) )
{
// Process submit
}
elseif( isset( $_POST[ 'activatedevice' ] ) )
{
// Process device
}