【问题标题】:Javascript function post and call php scriptJavascript函数发布和调用php脚本
【发布时间】:2013-05-25 21:48:32
【问题描述】:

在 html 中,我有几个按钮,这些按钮是为数据库中具有特定状态的每个对象自动制作的。每个按钮都有自己的 id。

echo '<Button id="button'.$counter.'" onClick="clickedbutton('.$counter.', '.$row['OrderID'].')" >'."<center>".$row['OrderID']."<br>"."</center>".'</Button>';

按钮调用 javascript 函数 clickedbutton 并给它按钮的编号和该按钮的 orderid。

function clickedbutton(buttonid,orderid){
buttonid = "button" + buttonid;

}

此函数加载按钮的编号,使其成为button0,button1等。orderid也成功传递。现在在函数中我要调用一个外部的php脚本,而且orderid也必须要传给脚本。

<?php
    //connect to database
    include_once('mysql_connect.php');

    // Select database
    mysql_select_db("test") or die(mysql_error());

    // SQL query
    $strSQL = "update orders set OrderStatus = 'In Progress' where OrderID = '" + orderid + "'";

    mysql_close();
?>

我知道 mysqli 保护和所有,我稍后会调整它。现在我想重点关注上面的问题,如何调用并通过变量orderid传递给phpscript。

【问题讨论】:

    标签: php javascript jquery html mysql


    【解决方案1】:

    通过使用 Ajax。

    function clickedbutton(buttonid,orderid){
    
        $.post("page.php", { buttonid: buttonid })
        .done(function(data) {
            alert("Data Loaded: " + data);
        });
    
    }
    

    在 php 中,您可以使用 $_POST 获得它。

    //[..] previous php code
    $strSQL = "update orders set OrderStatus = 'In Progress' where OrderID = '" + $_POST['buttonid'] + "'";
    //[..] rest of php code
    

    注意 SQL 注入。不要把这个建议当成书面的。

    【讨论】:

      【解决方案2】:

      编辑 2018

      是的,我还活着。您可以使用fetch API 代替jQuery。除了(猜猜谁?...)IE 11 及以下版本之外,它得到了广泛的支持,但有一个 polyfill。享受现代编码。

      Support for fetch API

      老答案

      您必须使用 AJAX。

      仅 Javascript 无法访问 php 脚本。您必须发出请求,将变量传递给 PHP,评估它并返回结果。如果你使用 jQuery 发送 ajax 请求相当简单:

      $.ajax({
          data: 'orderid=' + your_order_id,
          url: 'url_where_php_is_located.php',
          method: 'POST', // or GET
          success: function(msg) {
              alert(msg);
          }
      });
      

      你的 php 脚本应该得到如下的订单 ID:

      echo $_POST['orderid'];
      

      输出将作为字符串返回到成功函数。

      编辑

      你也可以使用速记函数:

      $.get('target_url', { key: 'value1', key2: 'value2' }).done(function(data) {
          alert(data);
      });
      
      // or eventually $.post instead of $.get
      

      【讨论】:

      • 函数 clickedbutton(buttonid,orderid){ buttonid = "button" + buttonid; $.ajax({ data: 'orderid=' + orderid, url: 'statusupdate.php', method: 'POST', // or GET success: function(msg) { alert(msg); } }); }
      • $strSQL = "更新订单集 OrderStatus = 'In Progress' where OrderID = '" + $_POST['buttonid'] + "'";
      【解决方案3】:

      最简单的方法是构建一个查询字符串并将其附加到 php 脚本 url 的末尾。

      function clickedbutton(buttonid,orderid){
          var url = 'script.php?';
          var query = 'buttonid=' + buttonid + '&orderid=' + orderid;
      
          window.location.href = url + query
      }
      

      在 php 脚本中,您可以通过以下方式访问参数:

      <?php
      echo $_GET['buttonid'];
      echo $_GET['orderid'];
      

      【讨论】:

        【解决方案4】:

        假设您不想使用 AJAX,您可以在 clickedbutton 函数中执行以下操作:

        window.location.replace('path/to/page.php?orderid=' + orderid);
        

        然后在你的page.php中

        "...where OrderID = '" . $_GET('orderid') . "'";
        

        (注意连接字符串的点)

        【讨论】:

          【解决方案5】:

          你可以这样试试

          var url = myurl +'?id=' + orderid;
          window.location.href = url;
          

          在php页面中

           $strSQL = "update orders set OrderStatus = 'In Progress' where OrderID = '".mysql_real_escape_string($_GET['id'])."'";
          

          编辑

          如果您想在不刷新页面的情况下加载php文件,那么您可以按照朋友的建议尝试..

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-12-11
            • 1970-01-01
            • 1970-01-01
            • 2017-04-16
            • 1970-01-01
            • 1970-01-01
            • 2018-02-25
            • 1970-01-01
            相关资源
            最近更新 更多