【问题标题】:php pass and get parameterphp传递和获取参数
【发布时间】:2014-04-02 07:20:51
【问题描述】:
<?php $daerah_ejen1 = "$_GET[daerah_ejen]";
$kumpulan_ejen1 ="$_GET[kumpulan_ejen]";

echo $daerah_ejen1;
echo $kumpulan_ejen1;
echo $kumpulan_ejen;

$sql= "SELECT * FROM data_ejen WHERE daerah_ejen= '$daerah_ejen1' AND kumpulan_ejen='Ketua Kampung' ORDER BY nama_ejen";
$result = mysql_query($sql) or @error_die("Query failed : $sql " . mysql_error());
?>

我的网址

laporan_kk_detail.php?daerah_ejen=HULU+LANGAT&kumpulan_ejen=Ketua Kampung

对于输出daerah_ejen 变量有显示, 但是对于kumpulan_ejen/kumpulan_ejen1 是不显示的。

不知道哪里出了问题

【问题讨论】:

  • 你是 echo $kumpulan_ejen; 但你似乎没有在任何地方设置 $kumpulan_ejen。您只设置了 $kumpulan_ejen1

标签: php parameter-passing


【解决方案1】:

您访问 $_GET 变量的引号无效。试试这个

<?php 
  $daerah_ejen1 = $_GET["daerah_ejen"];
  $kumpulan_ejen1 =$_GET["kumpulan_ejen"];

您应该阅读一些有关安全性的内容,因为您可以将恶意代码传递给您的脚本!

edit://你可以看看这个帖子https://stackoverflow.com/questions/19539692/sanitizing-user-input-php

【讨论】:

  • 你答案的第一部分是错误的。您可以访问OP使用的方式。
  • 但是,例如,“daerah_ejen”将被视为常量,并且由于未定义,因此将其转换为字符串。这是非常糟糕的做法,并会在您的应用程序中引起注意。所以这只是一个幸运的事件,这确实有效!
  • 你能告诉我你在说什么通知吗?
  • 如果您的 error_reporting 和 display_error php 设置已打开,您可能会看到如下通知:“注意:使用未定义的常量 daerah_ejen - 假定为 'daerah_ejen'。
【解决方案2】:

您正在使用双引号转换字符串中的获取值,因此请删除并尝试

$daerah_ejen1 = $_GET['daerah_ejen'];
$kumpulan_ejen1 =$_GET['kumpulan_ejen'];

也使用mysql_real_escape_string() 来防止sql注入。

【讨论】:

    【解决方案3】:
    1. 引号围绕参数名称。这是因为$_GET[] 是一个关联数组,它的值是使用字符串键引用的

      $daerah_ejen1 = $_GET['daerah_ejen'];

      $kumpulan_ejen1 =$_GET['kumpulan_ejen'];

    2. 始终在查询中使用参数值之前对其进行清理,以保护自己免受 SQL 注入。

      $daerah_ejen1 = mysqli::real_escape_string($daerah_ejen1)

    【讨论】:

      【解决方案4】:

      您的代码面临 2 个问题:

      第一个是:

      $daerah_ejen1 = "$_GET[daerah_ejen]";
      $kumpulan_ejen1 ="$_GET[kumpulan_ejen]";
      

      用这个替换它:

       $daerah_ejen1 = $_REQUEST['daerah_ejen'];
      $kumpulan_ejen1 =$_REQUEST['kumpulan_ejen'];
      

      第二个是:

      $sql= "SELECT * FROM data_ejen WHERE daerah_ejen= '$daerah_ejen1' AND kumpulan_ejen='Ketua Kampung' ORDER BY nama_ejen";
      

      用这个替换它:

      $sql= "SELECT * FROM data_ejen WHERE daerah_ejen= '".$daerah_ejen1. "' AND kumpulan_ejen='Ketua Kampung' ORDER BY nama_ejen";
      

      【讨论】:

      • 您能告诉我为什么您建议 OP 将 $_GET 替换为您使用的方式吗?
      • 第二个问题不是问题。你可以在双引号内写"'$variable'",得到想要的结果。
      • $_REQUEST 代表 $_GET 和 $_POST。我使用 $_REQUEST 更容易你的代码,无需关心应该使用哪个 $_GET 或 $_POST。
      • 在您将$_GET 更改为$_REQUEST 之前已提出该问题。正如 W.K.S 所说,您提到的第二个问题不是问题。也更改为 $_REQUEST 将无法解决问题
      • 我推荐第二个问题,它对您的代码更安全。
      【解决方案5】:

      如果您需要将$_GET['name'] 放在双引号中,请将其括在{} 括号中。

      例如

      $kumpulan_ejen1 ="{$_GET['kumpulan_ejen']}";
      

      另外,正如 dbh 所指出的,您只有 $kumpulan_ejen1,而不是 kumpulan_ejen

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-17
        • 2016-09-09
        • 2012-12-29
        • 2020-04-17
        • 2012-05-30
        • 2015-09-05
        相关资源
        最近更新 更多