2014-10-29 287 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

相關問題