0

我有一个带有 PHP 前端的 MySQL 数据库。一旦从数据库中查询到用户的记录,它们就会显示在一个表中。我创建了一个 CRUD,用户可以在其中选择(查看其他详细信息)、删除或编辑。CRUD 使用 Javascript 直到客户端将查询发送到数据库,然后重新绘制索引页面以反映数据库中的更改。

我目前使用 Javascript $_GET,但想将其更改为 $_POST 以隐藏 MySQL 表 ID。我想使用类似jQuery PostLink的东西。我只有一门 Java 课,我懂 Javascript,但我不是最好的 JS 程序员。

这是脚本:

    <script src="http://postlink.googlecode.com/svn/trunk/jquery.postlink.js" type="text/javascript" ></script>

    <script type="text/javascript">
      $(document).ready(function() {
        $('a').postlink();
      });
    </script>

这是绘制我的表格的 PHP 代码:

    foreach ($query as $row){
            $id =  $row['document_id'];
            echo ('<tr>');
            echo ('<td>' . $row [clientName] . '</td>');
            echo ('<td>' . $row [documentNum] . '</td>');
            echo "<td><a href='editDocument.php?tableau={$id}'>Edit</a>";
            echo " / ";
            echo "<a href='#' onclick='deleteDocument( {$id} );'>Delete</a></td>";
            // this calls Javascript function deleteDocument(id) stays on same page
            echo ('</tr>');   
    } //end foreach

我也不想添加表单标签(<form> </form>)。我想调用一个脚本(如 jQuery PostLink),它将与我拥有的代码一起使用并将 href $_GET 链接转换为 $_POST。我希望它重定向到 editDocument.php 并具有 $_POST[tableau]=$id。我一直(不成功)试图通过“类:”来做到这一点

echo "<td><a class='postlink' href='editDocument.php?tableau={$id}'>Edit</a>";

我在使用 PostLink 时遇到 2 个问题:

  1. 给出的示例将 all 转换<a>为 $_POST(包括 DELETE 链接)。
  2. PostLink 缺少文档和示例代码。

有什么想法吗???

先感谢您。

4

4 回答 4

1

如果您希望用户单击链接,并在POST不使用form标签的情况下使用信息重定向浏览器,那么您就陷入了死胡同。

您可以POST使用 AJAX,但页面将作为 AJAX 响应返回。您的应用程序需要将表 ID 存储在会话中,这样用户可以在没有GET信息的情况下访问该页面,并且仍然可以看到正确的信息。

于 2013-07-16T19:53:40.410 回答
0

没有表单标签就无法发帖。你可以像这样使用 AJAX。一个更复杂的解决方案涉及动态创建一个动态表单标签 - 但如果你这样做,为什么不首先创建表单......

试试这样的..

<a class='post_link' href='/action_url' data-action-id="12345">Delete</a>

And then

$(function() {
  $('.post_link').on("click", function() {
    var id = $(this).data("action-id");
    $.ajax({
      method: 'post', 
      url: $(this).prop("href"), 
      data: {
        'id': id
      },
      success: function() {
        // reload the page or whatever - 
      }
    });

  });

});

如果您试图避免添加书签等 - 听起来您最好在后端更好地处理错误,而不是这将提供的任何服务..

于 2013-07-16T21:08:52.280 回答
0
  1. 更改代码以仅选择您感兴趣的链接。如果这是 HTML 代码:

    echo <a class='postlink' href='editDocument.php?tableau={$id}'>编辑</a>;
    

    您可以将 Javascript 代码段更改为:

    $(文档).ready(函数() {
        $('.postLink').postlink();
    });
    
  2. 该插件似乎不是很常用并且很旧(2010)。我会谨慎行事。

如果您真的想隐藏表 ID,我实际上建议您更改方法。即使您更改代码以使用 javascript 触发 POST,任何人都可以使用诸如 Firebug 之类的浏览器开发工具查看网络请求。

一种方法是更改​​ MySQL 表以存储额外的键,并更改 PHP 代码以传递并接受该键作为输入。但是选择的方法取决于您的具体实现和用例。

于 2013-07-16T19:42:27.200 回答
0
<script>
    function editDocument( id, page ){
        var params = "edit_id=" + id;
        postOnClick( params, page );
    }
    function deleteDocument( id, page ){
        var params = "delete_id=" + id;
        postOnClick( params );
    }
    function postOnClick( params, page )
    {
        var http = new XMLHttpRequest();

        http.open("POST", page, true);

        http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        http.setRequestHeader("Content-length", params.length);
        http.setRequestHeader("Connection", "close");

        http.onreadystatechange = function() {
            if (http.readyState == 4 && http.status == 200) {
                document.documentElement.innerHTML = http.responseText;
            }
        }

        http.send(params);
    }
</script>

<?php
    foreach ($query as $row){ 
        $id = $row['document_id']; 
        echo ('<tr>'); 
        echo ('<td>' . $row [clientName] . '</td>'); 
        echo ('<td>' . $row [documentNum] . '</td>'); 
        echo "<td><a href='#' onclick='editDocument( {$id}, 'editDocument.php' );'>Edit</a>"; 
        echo " / "; 
        echo "<a href='#' onclick='deleteDocument( {$id}, 'index.php' );'>Delete</a></td>";
        echo ('</tr>'); 
    }
?>

链接示例:

<a href='#' onclick='editDocument( 1, "editDocument.php" );'>Edit</a>
<a href='#' onclick='deleteDocument( 1, "index.php" );'>Delete</a></td>
于 2013-07-16T20:19:27.360 回答