2014-10-29 485 views
-2

我有一个具有多个输入字段的表单。当我发送此表单时,出现错误。 。 Parse error: syntax error, unexpected '=>' (T_DOUBLE_ARROW), expecting ')'解析错误:语法错误,意外的'=>'(T_DOUBLE_ARROW),期望')'in ... with foreach

<input type="text"name="keuze[]"> 
<input type="text"name="prijs[]"> 
<input type="text"name="cent[]"> 


    foreach (array_combine($_POST['keuze'], $_POST['prijs'], $_POST['cent']) as $keuze => $prijs => $cent) { 

$price = $prijs.".".$cent; 

$query = "INSERT INTO res_sub_menu (
name, 
price, 
owner) VALUES 
(
'$keuze', 
'$price', 
'$session->u_id' 
)"; 

} 
+1

考虑使用MultipleIterators代替 – 2014-10-29 11:30:58

+1

'$ keuze => $ prijs => $ cent'在这种情况下,'$ keuze'会是数组键,'$ prijs'将是值,所以解析语法错误是因为'=> $ cent' ...你为什么需要它,或者你期望达到什么目的? – 2014-10-29 11:33:12

+0

$ _POST ['prijs']是一个数组,$ _POST ['keuze']是一个数组,$ _POST ['cent']也是一个数组 – 2014-10-29 11:35:40

回答

0

尝试做的是这样的:

$cnt = count($_POST["keuze"]); 
for ($i = 0; $i < $cnt; $i++) { 
    $price = $_POST["prijs"][$i] . "." . $_POST["cent"][$i]; 
    $query = "INSERT INTO res_sub_menu (name,price,owner) 
        VALUES ('" . mysqli_real_escape_string($link, $_POST['keuze'][$i]) . ",'" . mysqli_real_escape_string($link, $_POST['price']) . "','$session->u_id')"; 

    mysqli_query($link, $query); 
} 

避免SQL注入。

+0

至少有人关心基本的安全措施。 – lxg 2014-10-29 11:39:10

+1

@lxg - 尽管如果示例使用MySQLi进行查询,那么使用带有绑定变量的准备好的语句会是使用 – 2014-10-29 11:56:35

+1

的好例子,但现在,我只关注基本安全性的快速修复。这是程序风格。 – vaso123 2014-10-29 12:02:12

0

array_combine()一次只能对数组进行操作,它通过使用一个数组作为键和另一个数组的值来创建一个数组。

$array = array_combine($_POST['prijs'], $_POST['cent']); 
$values = array(); 
foreach ($array as $prijs => $cent) { 
    $values[] = $prijs.".".$cent; 
} 

//现在处理的最终数据

foreach (array_combine($_POST['keuze'], $values) as $keuze => $price) { 
    //run your query 
} 
+0

请提一下-1的理由以便理解。 – 2014-10-29 11:39:27

+0

插入SQL查询时不转义POST数据。 – lxg 2014-10-29 11:39:55

+0

伙计...问题是关于如何避免应用安全措施的窍门。如果要求安全,则会给出相应的答案。 @lgx首先尝试解决问题。 – 2014-10-29 11:41:33

1

而不是

foreach (array_combine($_POST['keuze'], $_POST['prijs'], $_POST['cent']) as $keuze => $prijs => $cent) { 

使用PHP的MultipleIterator

$mi = new MultipleIterator(); 
$mi->attachIterator(new ArrayIterator($_POST['keuze'])); 
$mi->attachIterator(new ArrayIterator($_POST['prijs'])); 
$mi->attachIterator(new ArrayIterator($_POST['cent'])); 
foreach($mi as list($keuze, $prijs, $cent)) { 
    ... 
} 

如果它抱怨使用list($keuze, $prijs, $cent)foreach()(需要PHP> = 5.5.0),那么你可以使用

$mi = new MultipleIterator(MultipleIterator::MIT_KEYS_ASSOC); 
$mi->attachIterator(new ArrayIterator($_POST['keuze']), 'keuze'); 
$mi->attachIterator(new ArrayIterator($_POST['prijs']), 'prijs'); 
$mi->attachIterator(new ArrayIterator($_POST['cent']), 'cent'); 
foreach($mi as $details) { 
    extract($details); 
    ... 
} 
+0

谁低估了这个,这是一个很好的功能 – Ghost 2014-10-29 11:43:01

+1

它可能是downvoted,因为我忘记了'MultipleIterator :: MIT_KEYS_ASSOC'标志在第二个例子中;虽然downvoter不能打扰说....我现在编辑它,以补充 – 2014-10-29 11:54:32

+0

我是downvoter在这里。首先,我觉得这个方法有点过分了。 (但是我不会为此付出代价。)另外,就像@sgt发布的帖子一样,我真的很惊讶你没有提到大胆的SQL注入漏洞。这可能很乏味,但我们需要每一次指出这类事情。而且我会继续把我的宝贵代表花费在downvote文章上,甚至不提这些问题。 – lxg 2014-10-29 12:15:05

相关问题