如何将选定的html行数据发送到PHP后端脚本

时间:2016-11-18 07:49:52

标签: javascript php jquery html5

我有一个PHP表单如下。一旦用户选择了特定的行/行,我需要将相应的数据发送到我的PHP后端脚本。这里的externalID是唯一的。我的代码中面临两个问题

  1. 目前我将整个表单数据提供给我的PHP后端脚本,我需要的数据只对应于我选择的行。

  2. 我在页面中有两个按钮,如何在单击按钮时调用不同的php脚本。目前点击“发送MTDATA”会在表单操作中调用php脚本。

  3. 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" } 
    

    Htm form with checkbox

2 个答案:

答案 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
}