2014-09-01 89 views
1

我在將多個複選框值從HTML傳遞到PHP時出現了一個奇怪的問題。複選框HTML到PHP

這裏是test.php的:

<!DOCTYPE html> 
<html lang="fr"> 
    <meta charset="utf-8"> 
    <head> 
     <title>Test Multi CheckBox</title> 
    </head> 
    <body> 
<?php 
ini_set('display_errors', 1); 
ini_set('error_reporting', E_ALL); 

foreach($_GET['currency'] as $currency) 
{ 
    echo $currency."<br/>"; 
} 
?> 

<form class="form-horizontal" role="form" name="form_individu" action="http://my-site.com/test.php" method="get"> 
    <input type="checkbox" name="currency[]" value="usd"/>USD 
    <input type="checkbox" name="currency[]" value="euro"/>EURO 
    <input type="checkbox" name="currency[]" value="cad"/>CAD 
    <button type="submit" class="btn btn-primary">Modifier</button> 
</form> 

</body> 
</html> 

測試我的生產服務器上的此功能使我有以下網址:

test.php?currency%255B%255D=usd&currency%255B%255D=euro 

,我不能輸出在PHP中,由於貨幣價值到:

Warning: Invalid argument supplied for foreach() in test.php on line 14 

但在本地主機上,URL變成:

test.php?currency%5B%5D=usd&currency%5B%5D=euro 

和PHP可以正確輸出貨幣值!

所以唯一的區別是在貨幣[]的URL編碼:

-> currency%255B%255D on server 
-> currency%5B%5D on localhost 

什麼可以解釋這種差異?以及如何配置服務器以使其工作?

我希望我要學習的東西我還不知道......感謝你們:)

EUREKA!

錯誤來自我的.htaccess:

SetEnv PHP_VER 5 
SetEnv REGISTER_GLOBALS 0 

# URL rewriting module activation 
Options +FollowSymlinks 
RewriteEngine on 

RewriteBase/

#Redirection http:// vers http://www pour éviter le duplicate content 
# LOCAL 
RewriteCond %{HTTP_HOST} ^my-domain.com$ 
RewriteRule ^(.*) http://www.my-domain.com/$1 [QSA,L,R=301] 

如果我評論最後兩行,代碼工作。我想出了this article的最後一篇文章。看起來brakets []被重寫並將%255B%255D轉換爲%5B%5D。因此,如果有人能夠提供解決方案,我仍然在聽...

+0

你爲什麼用get?你應該使用帖子來代替... – SolidSnake 2014-09-01 18:22:50

+0

你是否將編碼設置爲文件的UTF-8? – 2014-09-01 18:25:24

+0

是的我把文件編碼設置爲UTF-8,我也試過後,但仍然是同樣的問題。我始終堅持我的榜樣,因爲這幫助我診斷出問題所在! – hugsbrugs 2014-09-01 20:19:10

回答

1

也許這是您爲文檔定義的字符編碼。您將它設置爲UTF-8,這是一個2字節編碼。嘗試一種拉丁字符集,如ISO-8859-1,看看是否是問題的根源。

+0

不幸的是,將編碼設置爲ISO並沒有幫助! – hugsbrugs 2014-09-01 20:17:40

0
Try the following code. It is working fine. 

<!DOCTYPE html> 
<html lang="fr"> 
    <meta charset="utf-8"> 
    <head> 
     <title>Test Multi CheckBox</title> 
    </head> 
    <body> 
<?php 
ini_set('display_errors', 1); 
ini_set('error_reporting', E_ALL); 

foreach($_POST['currency'] as $currency) 
{ 
    echo $currency."<br/>"; 
} 
?> 

<form class="form-horizontal" role="form" name="form_individu" action="/test.php" method="post"> 
    <input type="checkbox" name="currency[]" value="usd" />USD 
    <input type="checkbox" name="currency[]" value="euro"/>EURO 
    <input type="checkbox" name="currency[]" value="cad"/>CAD 
    <button type="submit" class="btn btn-primary">Modifier</button> 
</form> 

</body> 
</html> 
+0

服務器上的POST方法沒有更多的運氣... – hugsbrugs 2014-09-01 20:20:01