Если у вас есть динамические столбцы, для которых вы подставляете $x
, не заключайте $x
в кавычки:
$Q = "update vote set ans_$x = '$test' where Vote_ID = '1'";
Обязательно экранируйте содержимое $_SERVER['QUERY_STRING']
с помощью mysql_real_escape_string()
.
$test = mysql_real_escape_string($test);
Правильный способ синтаксического анализа строки запроса в PHP - это parse_str()
, вместо попытки explode()
на &
.
* 1017.*
Однако, поскольку вы захватываете всю строку запроса и не фильтруете какие-либо конкретные переменные, почему бы просто не использовать $_GET
?
$x = 0;
foreach ($_GET as $key=>$value) {
// do the loop...
$test = mysql_real_escape_string($value);
$Q = "update vote set ans_'$x' = '$test' where Vote_ID = '1'";
$x++;
}
Обновление
, чтобы помочь вам понятьпочему ваш код не работает, я изменю его здесь.Однако это не предпочтительный метод выполнения этой задачи.Использование foreach($_GET)
, как указано выше, намного лучше.Правильный отступ цикла поможет выявить проблему:
$queries = $_SERVER['QUERY_STRING'];
$answers = explode("&",$queries );
$num = count($answers);
// Your foreach loops over the available querystring params:
// Start by initializing $x to 0
$x = 0;
foreach($answers as $val){
$chars= strlen($val);
$test = substr($val,2,$chars-2);
// You are already inside the foreach loop, so
// you don't want to start another loop which uses the same value for $test
// on each iteration. Instead $x was set to 0 before the outer foreach...
// There is no need for an inner loop.
//for($x=1; $x<=$num; $x++){
// On first iter here, $x is 0. Increments at the end of the loop iter.
$Q = "update vote set ans_$x = '$test' where Vote_ID = '1'";
$R = mysql_query($Q);
if($R) {
echo "done";
} else {
echo mysql_errno();
}
// On each iteration, increment $x here.
$x++;
//} // the inner for loop, commented out...
}