'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, ', ');
これが実際の例です