如何将元素id导入PHP变量

时间:2011-03-02 03:53:50

标签: php mysql

是否可以将元素id放入PHP变量?

假设我有许多带ID的元素:

<span id="1" class="myElement"></span>
<span id="2" class="myElement"></span>

如何将此变为PHP变量才能提交查询。我想我必须重新提交页面,这没关系。我想用POST。我可以这样做:

<script language="JavaScript">
$(document).ready(function(){
    $(".myElement").click(function() {
        $.post("'.$_SERVER['REQUEST_URI'].'", { id: $(this).attr("id") });
    });
});
</script>

我需要将$(this).attr('id')传递给$newID才能运行

SELECT * from t1 WHERE id = $newID

jQuery是一个非常强大的工具,我想找到一种方法将其功能与服务器端代码结合起来。

感谢。

4 个答案:

答案 0 :(得分:3)

这就像您的问题:ajax post with jQuery

如果你想将这一切都放在一个文件中(发布到活动文件),这里你需要的是:

<?php 
  // Place this at the top of your file
  if (isset($_POST['id'])) {
    $newID = $_POST['id'];  // You need to sanitize this before using in a query

    // Perform some db queries, etc here

    // Format a desired response (text, html, etc)
    $response = 'Format a response here';

    // This will return your formatted response to the $.post() call in jQuery 
    return print_r($response);
  }
?>

<script type='text/javascript'>
  $(document).ready(function() {
    $('.myElement').click(function() {
      $.post(location.href, { id: $(this).attr('id') }, function(response) {
        // Inserts your chosen response into the page in 'response-content' DIV
        $('#response-content').html(response); // Can also use .text(), .append(), etc
      });
    });
  });
</script>

<span id="1" class="myElement"></span>
<span id="2" class="myElement"></span>

<div id='response-content'></div>

从这里,您可以自定义查询和响应以及您希望如何处理响应。

答案 1 :(得分:2)

在我看来,你有两个“好”的选择。

第一种是每次订单更改时发起一个帖子请求。您可能正在使用jQuery UI sortable更改排序。大多数支持拖放的库也允许您在初始化函数中将事件回调放在drop上。

在这个甚至回调中,你发起了$.post,因为你已经在你的代码中写了它(尽管我会敦促你查找关于这个问题的实际文档,以确保你在帖子中发布正确的位置)。

第二个策略是捎带表单提交操作。如果您使用jQuery Form Plugin来处理表单提交,它们允许您指定序列化回调之前,您可以在表单中添加一个指定元素排序的字段。

在这两种情况下,您都需要编写自己的函数来实际序列化元素ID。像下面这样的东西会很好(完全未经测试;可能包含语法错误):

var order = [];
$('span.myElement').each(function(){
  // N.B., "this" here is a DOM element, not a jQuery container
  order.push(this.id); 
});
return order.join(',');

答案 2 :(得分:1)

你是对的,沿着这些方向发挥作用。这是一个例子:

(顺便说一句,使用$.post$.get不会重新提交页面,但会发送一个AJAX请求,一旦服务器返回就可以调用回调函数,这非常简洁。

<script language="JavaScript">
$(document).ready(function(){
    $(".myElement").click(function() {
        $.post(document.location, { id: $(this).attr("id") },
          function (data) { 
              // say data will be some new HTML the server sends our way
              // update some component on the page with contents representing the element with that new id
              $('div#someContentSpace').html(data);
          });
    });
});
</script>

答案 3 :(得分:1)

你的方法看起来非常好,但是jQuery没有像PHP那样的$ _SERVER变量。您希望提供的网址为window.location(我相信空字符串也可以使用,或者您可以自行指定网址)。你似乎正好发送了这个ID,所以这样可行。

如果您希望页面对此更改做出反应,可以向$.post()添加回调函数。你可以做各种各样的事情。

$.post(window.location, {id: this.id}, function (data) {
   //one
   location.reload();
   //two
   $("#responsedata").html(data);
   //three
   $("#responsedata").load("affected_page.php #output");
});

我认为2号是最优秀的。它不需要重新加载页面。让你的服务器端php脚本回显你想要的任何数据(json,html,无论如何),它将放在data上面,以便jQuery处理你想要的。

顺便说一下,在运行查询的服务器端,不要忘记清理$ id并将其放在引号中。你不希望有人SQL注入你。