Мне нужно иметь переменную В моем имени переменной, а не КАК мое имя переменной - PullRequest
1 голос
/ 17 января 2012

Как бы я это сделал?

Согласно 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 ]

2 голосов
/ 17 января 2012

Для конкатенации индекса массива, хорошо, но этот код

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 голосов
/ 17 января 2012

Как насчет конкатенации строк?

$_POST['link'.$i];
1 голос
/ 17 января 2012

Вы получаете синтаксическую ошибку, потому что $link$i недопустим.

Если вы хотите, чтобы конечное значение было link2, вам нужно решение, как предложил Ник Шепард.

Было бы легче увидеть, что происходит, если вы сначала создадите нужную строку для ключа.

$key = 'link' . $i;

После этого вы можете использовать ключ в любое время в условном виде, например

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

и снова в вашем mysql_escape

mysql_real_escape_string($_POST[$key]);
0 голосов
/ 17 января 2012

да ... вы можете сделать следующее

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

или

$_POST[$link.$i]

то же самое относится и к методам

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

$this->$method();   //calls method -> getSomething()
0 голосов
/ 17 января 2012
$_POST['link' . $i];

Это должно решить вашу проблему. Для индексов массива вы можете просто объединить строку для индекса, который вы пытаетесь разрешить.

...