0
<?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 . "]', ";

'atを省略してもエラーは発生しません'$_POST'$_POST[a$i]'forループですべての実行を取得したい:

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

2 に答える 2

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

これらの値をからSQLクエリに渡す場合は$_POST、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, ', ');

これが実際の例です

于 2012-12-14T00:42:15.393 に答える
0

私はあなたがこれをやろうとしていると思います:

 $values = $values . "\'$_POST[a" .$i. "]\', ";
于 2012-12-14T00:55:35.723 に答える