【问题标题】:I need to have a variable IN my variable name, not AS my variable name我需要在我的变量名中有一个变量,而不是我的变量名
【发布时间】:2012-02-11 17:24:55
【问题描述】:

我该怎么做?

根据 PHP.net,

$a = "hi";
$hi = 2;
$$a; // returns 2

但是,我需要:

$i = 2;
$_POST['link$i'];  // I need this to return the same thing as $_POST['link2']

这是我的代码。

      for ($i = 1; $i <= 40; $i++)
      {
        if(!empty($link$i))
        {
        $link$i = mysql_real_escape_string($_POST['link$i']);
        mysql_query("
          INSERT INTO links (link, rimageid) VALUES
          ('".$link$i."', '".$id."') ");
        } else { }
      }

我这样做的原因是因为我有很多文本输入字段将它们的值发布到这个文件中,我想通过 for 循环定义和插入它们的每个值,而不是手动插入每个链接到mysql。

现在,我明白了:

Parse error: syntax error, unexpected T_VARIABLE, expecting ')' in C:\xampp\htdocs\new2.php on line 22

我该怎么做呢? 谢谢!

【问题讨论】:

  • 变量插值适用于double quoted strings,而不是单引号。所以$_POST["link$i"] 将是内置的语言。

标签: php variables if-statement for-loop


【解决方案1】:
$_POST['link' . $i];

这应该可以解决您的问题。对于数组的索引,您可以简单地将字符串连接到您尝试解析的索引。

【讨论】:

  • if 语句部分 $link$i 怎么样?
【解决方案2】:

字符串连接怎么样?

$_POST['link'.$i];

【讨论】:

  • 请看我对上述答案的评论
【解决方案3】:

您收到语法错误,因为 $link$i 无效。

如果您希望最终值为 link2,那么您需要像 Nick Shepherd 建议的那样的解决方案。

如果您先创建所需的字符串作为密钥,可能会更容易查看发生了什么。

$key = 'link' . $i;

之后,您可以随时使用密钥,例如

if (!empty($_POST[$key])) {

再次在你的 mysql_escape 中

mysql_real_escape_string($_POST[$key]);

【讨论】:

  • 哦,我现在明白他在说什么了。基本上,不要定义它,只需使用 $_POST['link' 。 $i];在 if 语句中。这是有道理的。
【解决方案4】:

对于数组索引连接,可以,但是这段代码

for ($i = 1; $i <= 40; $i++)
      {
        if(!empty($link$i))
        {
        $link$i = mysql_real_escape_string($_POST['link$i']);
        mysql_query("
          INSERT INTO links (link, rimageid) VALUES
          ('".$link$i."', '".$id."') ");
        } else { }
      }

不会像你期望的那样工作,即命名一个像结果一样的变量是没有必要的,你为什么要这样做? PHP 不关心变量名以及它是否与结果相协调。

只要做:

for ($i = 1; $i <= 40; $i++)
      {
      if(!empty($_POST['link'.$i]))
      {
        $regular_variable_name = mysql_real_escape_string($_POST['link'.$i]);
        mysql_query("INSERT INTO links (link, rimageid) VALUES ('".$regular_variable_name."', '".$id."') ");
        } else { }
      }

【讨论】:

  • 哇,这很有意义。在这里被剥夺了一点睡眠。
【解决方案5】:

是的...您可以执行以下操作

$ = 2;
$link = "link" . $i;
if(isset($_POST[$link])){
     //do something
}

$_POST[$link.$i]

方法也是如此

$type = "Something";
$method = "get" . $type;

$this->$method();   //calls method -> getSomething()

【讨论】:

  • 谢谢。这将在后面的脚本中有所帮助。
猜你喜欢
  • 1970-01-01
  • 2011-11-26
  • 1970-01-01
  • 1970-01-01
  • 2017-02-22
  • 1970-01-01
  • 1970-01-01
  • 2014-05-25
  • 2020-11-29
相关资源
最近更新 更多