原谅这个愚蠢的问题。我是一名音乐老师,而不是程序员。
我正在提交表格。我可能已经检查了“口语”的复选框。
<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]} };
我只是不明白为什么空的复选框没有把我挂在本地主机上,但现在他们这样做了。我无法想到我可以做的任何事情导致这一点,我当然没有测试复选框变量...但我有一个充满INSERTed条目的SQL表。
在本地与服务器上的比较方面是否存在某种差异?
答案 0 :(得分:2)
您的服务器错误报告必须显示通知/警告(不确定具体是哪一个)。
如果你不能改变你的php配置(php.ini),你说if(isset($_POST['checkboxVar']))
就是你需要隐藏的错误。这是您在线服务器上所需要的(通常是/etc/php.ini
):
;Show all errors, except for notices and coding standards warnings
error_reporting = E_ALL & ~E_NOTICE
答案 1 :(得分:2)
您的本地配置可能正在使用默认的php设置,这会禁止任何通知。生产服务器具有更严格的错误报告,可让您了解微小(最可能不重要)的问题。
在这种情况下,您尝试访问未定义的变量,因为浏览器不会为尚未选中的复选框发送任何数据。
正如上面已经指出的那样,一个简单的if(isset($ _ POST [checkboxVar]))可以解决每个变量级别的通知。
如果你希望留下一位音乐老师而不是每次弹出这些东西时都不要碰头,那么简单地将以下内容作为你的程序的第一行可能更容易:
error_reporting(E_ALL & ~E_NOTICE);
答案 2 :(得分:1)
避免此通知的最简单方法是检查您的复选框是否已使用以下内容进行检查:
if (!isset($_POST['checkboxVar'])) $_POST['checkboxVar'] = 'no';
或
$checkboxVar = isset($_POST['checkboxVar']) ? $_POST['checkboxVar'] : 'no';
您遇到的问题是,如果未选中复选框,浏览器将不会在formdata中提交任何内容。