我需要一个变量IN我的变量名,而不是我的变量名

时间:2012-01-16 20:03:48

标签: php variables if-statement for-loop

我该怎么做?

根据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

我该怎么做呢? 谢谢!

5 个答案:

答案 0 :(得分:2)

字符串连接怎么样?

$_POST['link'.$i];

答案 1 :(得分:2)

对于数组索引连接,好的,但这段代码

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 { }
      }

答案 2 :(得分:1)

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

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

如果您首先为密钥创建所需的字符串,则可能更容易看到正在发生的事情。

$key = 'link' . $i;

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

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

再次在你的mysql_escape

mysql_real_escape_string($_POST[$key]);

答案 3 :(得分:0)

$_POST['link' . $i];

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

答案 4 :(得分:0)

是的......你可以做以下事情

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

$_POST[$link.$i]

方法也是如此

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

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