【问题标题】:send String[] b httprequest and get in php b $_GET发送 String[] b httprequest 并进入 php b $_GET
【发布时间】:2014-03-24 13:45:45
【问题描述】:

我想通过 HTTP 请求发送 String[] 并使用 $_GET 方法获取 PHP 中的值。
String[] 中的值的总数是可变的。
到目前为止我已经尝试过:

List<NameValuePair> params = new ArrayList<NameValuePair>();
String[] dropdowns = {"1st item","2nd item","3rd item","4th item"};
for (int i = 0; i < dropdowns.length; i++) {
params.add(new BasicNameValuePair("pid", dropdowns[i]));
}

在 PHP 中,我想获取所有值并根据它们进行查询。

$pid = $_GET['pid'];

并像这样使用它们:

$result = mysql_query("SELECT *FROM Apps WHERE pid[0] = $pid" AND pid[1] = $pid" 
AND ...);

但我知道这种方式是错误的。 我该怎么做?

【问题讨论】:

  • 也许如果你在 params.add 中使用名称 'pid[]'。但是你在发送 httprequest 时在 PHP 页面中看到了什么?试试放一个 var_dump($_GET) 看看。
  • 如何在 php 中使用 var_dump($_GET) 来检索 pid[i] 数字?
  • 代替 $pid = $_GET['pid']。放 var_dump($_GET);。所以 PHP 转储 var $_GET 比包含用 Java 发送的参数。但是您必须从 Java 到 PHP 页面发出 httprequest 才能查看发送的内容。
  • 好的。那么如何在 php 中检索 n 个项目的 pid[i] 呢?
  • PHP 接收像数组一样的 'pid' 参数? var_dump 就是看到这个了。

标签: java php json httprequest


【解决方案1】:

这个

$result = mysql_query("SELECT *FROM Apps WHERE pid[0] = $pid" AND pid[1] = $pid" AND ...); 

非常错误和不安全。 (列语法错误、SQL注入、引用错误、SQL语法错误……)

一定是这样的

$result = mysql_query("
            SELECT * FROM Apps WHERE pid
            IN(" . implode(',', mysql_real_escape_string($pid)) . ")
          ");

【讨论】:

    【解决方案2】:

    您可以创建要在 url 中发送的值的序列化表示。它有限制,例如 url 的最大长度。

    'http://domain.com/data_handler.php?data=' . urlencode(serialize($array1));
    

    取回你的数组:

    $array1 = unserialize($_GET['data']);
    

    最好创建一个发布请求并使用以下语法:

    pid[]=1 
    pid[]=2
    

    http://www.php.net/manual/en/faq.html.php

    【讨论】:

      【解决方案3】:

      你不能通过 HTTP 请求发送一个数组,除非你有一个输入数组,例如:

      <input type='text' name='manyOfThese[]' />
      

      要发送数组,您有两种选择。一种是使用 serialize() 和 unserialize() 将数组转换为字符串。另一种是使用会话变量:

      $_SESSION['pid'] = $pid;
      

      然后在下一个脚本

      $pid = $_SESSION['pid'];
      unset($_SESSION['pid']);
       foreach($pid as $element){
          echo $element //or do whatever you need to do to that variable
      }
      

      您还需要在脚本的开头添加: session_start();

      然后当您的 php 应用程序退出时(例如在注销时): session_destroy();

      【讨论】:

      • 您能说得更具体些吗?如何检索 p'p 中 n 个项目的 pid[i]?
      • 查看 foreach 循环的添加
      【解决方案4】:

      这有两个部分,都涉及循环。首先,发送数据时,在名称中加上方括号,将其作为数组发送:

      for (int i = 0; i < dropdowns.length; i++) {
          params.add(new BasicNameValuePair("pid[]", dropdowns[i]));
      }
      

      其次,在 php 端,此数组存储在 $_GET['pid']$_POST['pid'] 中,具体取决于您发送它的方式,因此您将遍历数组并将项目添加到您的 sql 查询中。只需创建一个单独的变量来存储 sql 语句,以便您可以添加到它:

      $x = 0;
      foreach($_GET['pid'] as $value) {
          $yourSQLString .= " AND pid[". $x ."] = '" . $value . "'";
          $x++;
      }
      

      显然你应该用实际值做一些别的事情来避免 sql 注入。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-05
        • 2015-12-08
        • 2011-09-27
        • 2019-02-03
        • 2017-12-26
        • 1970-01-01
        相关资源
        最近更新 更多