2012-03-14 66 views
1

因此,請原諒這個愚蠢的問題。我是音樂老師,不是程序員。SQL表單中複選框的簡單問題提交

我正在提交表單。我可能已經選中了「口語」複選框。

<input type="checkbox" id="speakEnglish" name="speakEnglish" value="yes" /> 
<input type="checkbox" id="speakGerman" name="speakGerman" value="yes" /> 

,然後提交表單我有

$speakEnglish = $_POST['speakEnglish']; 
$speakGerman = $_POST['speakGerman']; 

,並制定從我的SQL查詢。它被提交和我的本地主機上插入精細,但由於上傳到服務器,我得到這個當複選框是空的......

AN error occurred in the script '/home/berli/public_html/TEST/signup.php' on line 295: 
Undefined index: speakGerman 

這混淆我..雖然我明白怎麼回事。

但是,爲什麼我的表單之前提交空的複選框,現在它會拋出一個錯誤? 處理這個問題的正常方法是什麼?

東西像..?

if(isset($_POST[checkboxVar]) { $SQLcheckboxVar = $_POST[checkboxVar]} }; 

我只是不明白爲什麼空的複選框沒有掛我本地主機,但現在他們這樣做。我不能想到我可以做的其他任何事情,我當然不是在測試複選框變量之前......但是我有一個充滿INSERT條目的SQL表。

在本地和服務器上如何工作會有一些差異嗎?

回答

2

您的服務器錯誤報告必須顯示通知/警告(不確定具體是哪一個)。

你說得對,if(isset($_POST['checkboxVar']))是你所需要隱藏的錯誤,如果你不能改變你的PHP配置(php.ini)。這是你需要你的在線服務器(通常/etc/php.ini)什麼:

;Show all errors, except for notices and coding standards warnings 
error_reporting = E_ALL & ~E_NOTICE 
+0

我記得當我瀏覽一些教程的時候看着php.ini文件(在MAMP中)......但是你在服務器上找到它的位置?我戳了所有,不能看到PHP文件。 – 2012-03-14 11:59:14

+1

Linux服務器?通常需要以root帳戶登錄並在'/ etc/php.ini'中訪問它。如果您處於共享主機環境中,可能會出現在您的控制面板中(某些cPanel允許您設置一些PHP配置),或者如果您可以SSH連接到您的服務器,則可能位於'/ var/www/vhosts/yoursite/conf'某處。但是,你也可以在引導/後端文件中執行'error_reporting(E_ALL&〜E_NOTICE);'在所有頁面上包含的引導程序/後端文件來更改設置。 – Benno 2012-03-15 00:58:28

+0

感謝您的信息! – 2012-03-15 11:44:18

2

你的本地配置可能是使用默認的PHP設置,這是抑制任何聲明。生產服務器有一個更嚴格的錯誤報告,可以讓你知道微小(很可能不重要)的問題。

在這種情況下,您正試圖訪問未定義的變量,因爲瀏覽器不會爲未選中的複選框發送任何數據。

正如前面已經指出的那樣,一個簡單的if(isset($ _ POST [checkboxVar]))將會消除每個變量級別的通知。

如果你想留一個音樂老師,而不是每一個這些東西彈出時間打破你的頭靠在牆上,可能更容易簡單地把下面爲你的程序的第一行:

error_reporting(E_ALL & ~E_NOTICE); 
1

避免這個通知最簡單的方法是檢查你的複選框已被選中的東西,如:

if (!isset($_POST['checkboxVar'])) $_POST['checkboxVar'] = 'no'; 

$checkboxVar = isset($_POST['checkboxVar']) ? $_POST['checkboxVar'] : 'no'; 

您碰到的問題是,如果您的複選框未被選中,瀏覽器將不會提交formdata中的任何內容。