$ post in a string?

时间:2012-12-14 00:38:04

标签: php

<?php
$_POST['aantal'] = 4;
$_POST['begin'] = 10;

$iets = $_POST['aantal'] + $_POST['begin'];
$ietsanders = $iets - 1;
$values = "'$_POST[a" . $_POST['begin'] . "]', " ;

for ($i = $_POST['begin'] + 1 ; $i < $ietsanders ; $i++){
    $values = $values . "'$_POST[a" .$i. "]', ";
}
$values = $values."'$_POST[a" . $ietsanders . "]', ";
echo "using  ".$values;
?>

这是我的代码;怎么了?它给我一个错误:

$values = $values . "'$_POST[a" .$i. "]', ";

$values = $values."'$_POST[a" . $ietsanders . "]', ";

当我在'处离开'$_POST时,它没有给我任何错误。我希望我的for循环每次运行都给我'$_POST[a$i]'

'$_POST[a10]', '$_POST[a11]', '$_POST[a12]', '$_POST[a13]', 

2 个答案:

答案 0 :(得分:1)

将字符串'a'$_POST['begin']连接为外部$_POST的索引,如:

$_POST['a' . $_POST['begin']]

你的循环看起来像:

// Concatenate a single quote with the $_POST dynamic key, then another single quote and comma.
$values = "'" . $_POST['a' . $_POST['begin']] ."', " ;

// In the loop, same thing concatenating single quotes around the $_POST key
// dynamically built with $i
for ($i = $_POST['begin'] + 1 ; $i < $ietsanders ; $i++){
    $values = $values . "'" . $_POST['a' .$i] . "', ";
}

通过将$_POST['stuff']作为字符串进行构建来尝试执行此操作的方式需要调用eval(),这在大多数情况下都不会被执行接受$_POST等用户输入时。

如果您打算将这些值从$_POST传递给SQL查询,则需要对它们执行一些SQL注入保护。如果可能,建议切换到支持预备语句的API。

最后,不确定为什么你$_POST超全球。希望你有充分的理由这样做:

$_POST['aantal'] = 4;
$_POST['begin'] = 10;

评论后更新:

嗯,事实证明,构建文字字符串'$_POST[a10]', '$_POST[a11]', '$_POST[a12]', '$_POST[a13]',而不是从中插入值。为此,字符串应该是单引号,以防止$分隔变量。

// Single quote the string, and escape single quotes inside it
$values = '\'$_POST[a' . $_POST['begin'] . ']\', ';

// In the loop, same thing concatenating single quotes around the $_POST key
// dynamically built with $i
for ($i = $_POST['begin'] + 1 ; $i < $ietsanders ; $i++){
    $values = $values . '\'$_POST[a' . $i .']\', ';
}

// After the loop, you have an extra comma and space at the end. trim() it off
$values = trim($values, ', ');

Here's a working example

答案 1 :(得分:0)

我认为你正在尝试这样做:

 $values = $values . "\'$_POST[a" .$i. "]\', ";