2012-03-14 40 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中的任何内容。