使用ID更新数据表上的行

时间:2016-07-19 16:21:17

标签: javascript php jquery html database

我在oracle数据库中有一个表,我在网页上显示。我使用bootstrap来设置页面样式,dataTables使用分页和搜索以及排序。我想使用唯一ID列(BID)随时更新任何特定行,因此我使用foreach循环在每行旁边添加了更新链接。

我现在的问题是获得构建该功能以制作更新链接的逻辑。我想:

  1. 找到一种方法来了解用户点击要更新的行,并使用该ID将该记录/行检索到表单以进行更新。

    挑战: 我正在使用循环填充表格,我想不出一种方法将每个行ID链接到更新链接。我尝试使用ID填充数组,但是如何将更新链接连接到用于检索的ID。

  2. 我使用的是html和PHP以及一些简单的javascript。我不擅长javascript,也对ajax知之甚少。我还没有学习它们,但我知道它们最适合用于这些事情。也许,我没有使用最好的方法,所以如果有人能帮助我在我的范围内找到更好的方法。在下面找到我的代码。

    <table class="table table-striped" id="scriptstable">
    
    <thead>
      <tr>
            <th>Update</th><!--This is where update links are-->
            <th>Place</th>
            <th>Report Name</th>
            <th>Index</th>
            <th>Source</th>
            <th>Core Field</th>
            <th>Description</th>
        <th>ID</th>
      </tr>
    </thead>
    
    <?php
    //Connection string is here
    
    
    $stid = oci_parse($conn, 'SELECT * FROM mytable ORDER BY REPORT_NAME');
    oci_execute($stid);
    echo "<tbody>";
    
    while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) 
    {
      echo "<tr>";
       echo "    <td><a  data-toggle='modal' data-target='#myModal' href='#' >Update</a>"; 
      foreach ($row as $item) {
        echo "    <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) :    "&nbsp;") . "</td>";
    
    
    } $bid[]=$row['BID'];//Array that stores ID as they come
    echo "</tr>";
    
    }
    
    ?>
    </tbody>
    </table>
    

    更新:     

    $ajaxAction = $_REQUEST['ajaxaction'];
    if (!method_exists('ajaxHandler', $ajaxAction)) {
    die("No such action {$ajaxAction}");
    }
    
    $handler = new ajaxHandler();
    $handler->$ajaxAction();
    
    class ajaxHandler
    { 
    
    
    
    function __construct()
    {
    //just an empty constructor
    }
    
    function updateRow()
        {   
    
    
        //Connection
     $conn = oci_connect('username', 'password',  'localhost/XE', 'WE8MSWIN1252');
    if (!$conn) {
    $e = oci_error();
    trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
     }
        $BID = $_REQUEST['BID'];
        $stid = oci_parse($conn, 'SELECT * FROM Bo_repository WHERE BID =     {$BID}');
        oci_execute($stid);
        $row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS);
         // echo "    <td><a id='{$row['BID']}' data-toggle='modal' data-target='#myModal' href='#' onclick='updateRow(this)'>Update</a></td>";  
        echo "    <td><a id='{$row['BID']}'  href='#' onclick='updateRow(this)'>Update</a></td>"; 
        //header("Location:index.php");
        foreach ($row as $item) {
            echo "    <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : "&nbsp;") . "</td>";
        }
    }
     }
     ?>
    

1 个答案:

答案 0 :(得分:0)

当您在表中发出行时,您可以将id分配给表行...我通常使用行或其他内容进行连接...并将id作为标记的id包含在内。然后,您可以使用onclick使用ajax调用javascript函数来动态更新表格行,例如

while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) 
{
   echo "<tr id='row_{$row['BID']}'>";
   echo "    <td><a id='{$row['BID']}' data-toggle='modal' data-target='#myModal' href='#' onclick='updateRow(this)'>Update</a></td>";  
   foreach ($row as $item) {
       echo "    <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : "&nbsp;") . "</td>";
   }
   $bid[]=$row['BID'];//not sure this is really needed anymore
   echo "</tr>";
}

updateRow函数将是这样的......当然是在脚本标记中......

 function updateRow(element) {
    var id = jQuery(element).prop('id');
    var url = 'your_back_end.php_file_that_handles_Ajax';//e.g. AjaxHandler.php

    var postArg = {};
    postArg['BID'] = id;
    postArg['ajaxaction'] = 'updateRow';

    jQuery.ajax({
        url:      url,
        type:     "post",
        data:     postArg,
        success:  function (response) {
            jQuery('#row_' + id).html(response);
        },
        error: function(response){
            console.log(response);
        }
    });
 }

您的后端文件非常简单......我创建了一个名为AjaxHandler的类,并将所有ajax调用传递给该类,以便进行我需要处理的任何处理...

您的文件可能就像这个例子......

AjaxHandler.php

<?
$ajaxAction = $_REQUEST['ajaxaction'];
if (!method_exists('ajaxHandler', $ajaxAction)) {
    die("No such action {$ajaxAction}");
}

$handler = new ajaxHandler();
$handler->$ajaxAction();

class ajaxHandler
{ 

    function __construct()
    {
    //just an empty constructor
    }

    function updateRow()
    {
        $BID = $_REQUEST['BID'];
        $stid = oci_parse($conn, 'SELECT * FROM mytable WHERE BID = {$BID}');
        oci_execute($stid);
        $row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS);
        echo "    <td><a id='{$row['BID']}' data-toggle='modal' data-target='#myModal' href='#' onclick='updateRow(this)'>Update</a></td>";  
        foreach ($row as $item) {
            echo "    <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : "&nbsp;") . "</td>";
        }
    }
}

这是一个使用php和ajax的非常基本的异步动态更新... 希望这会有所帮助...