Notice: Undefined index

时间:2014-01-21 作者:Pieter Goosen

在我的主题中使用了这个很棒的联系我们页面。它工作得很好,但问题是,在调试模式下,我在以下代码行中得到未定义的索引错误:

$name       = $_POST[\'name\'];
$email      = $_POST[\'email\'];
$message    = $_POST[\'text\'];
$human      = $_POST[\'human\'];
$submitted  = $_POST[\'submitted\'];
因此,我根据前面的答案和教程,将代码更改为下面两段代码:

$name       = (isset($_POST[\'name\'])        ? $_POST[\'name\']    : \'\');
    $email      = (isset($_POST[\'email\'])       ? $_POST[\'email\']   : \'\');
    $message    = (isset($_POST[\'message\'])     ? $_POST[\'message\'] : \'\');
    $human      = (isset($_POST[\'human\'])       ? $_POST[\'human\'] : \'\');
    $submitted  = (isset($_POST[\'submitted\'])   ? $_POST[\'submitted\'] : \'\');
以及

     if (isset ($_POST[\'name\'])) {
  $name = $_POST[\'name\'];
}
if (isset ($_POST[\'email\'])) {
  $email = $_POST[\'email\'];
}
if (isset ($_POST[\'message\'])) {
  $message = $_POST[\'message\'];
}
if (isset ($_POST[\'human\'])) {
  $human = $_POST[\'human\'];
}
if (isset ($_POST[\'submitted\'])) {
  $submitted = $_POST[\'submitted\'];
}
第一组代码删除所有调试错误消息,但当您提交表单时,它会触发

$缺少内容

当所有字段都为空时激发的消息。

第二组代码为我提供了关于以下代码集的未定义索引调试错误消息:

$headers = \'Van: \'. $email . "\\r\\n" .
    \'Aantwoord op: \' . $email . "\\r\\n";

  if(!$human == 0){
else if ($submitted) my_contact_form_generate_response("error", $missing_content);
              <p><label for="name"><?php _e(\'Naam\')?><span>*</span><br><input type="text" name="message_name" value="<?php echo esc_attr($name); ?>" placeholder="Iemand Anders"></label></p>
              <p><label for="message_email"><?php _e(\'E-pos\')?><span>*</span><br><input type="text" name="message_email" value="<?php echo esc_attr($email); ?>" placeholder="[email protected]"></label></p>
              <p><label for="message_text"><?php _e(\'Boodskap\')?><span>*</span><br><textarea type="text" name="message_text" placeholder="Skryf asseblief jou boodskap hier."><?php echo esc_textarea($message); ?></textarea></label></p>
这也给了我

$缺少内容

错误

这一切告诉我,不知何故,我必须在某个地方定义名称、电子邮件、文本、人类和提交。这就是我有限的技能阻碍我前进的地方。

任何关于如何定义上述内容和删除错误的建议,都可以使表单正常工作。在我忘记之前,可以查看完整的代码here

1 个回复
最合适的回答,由SO网友:Borek 整理而成

尝试使用第一个代码-这很有效,但在提交表单时会出现错误isset($_POST[\'name\'] 收件人:

isset($_POST[\'name\'] && !empty($_POST[\'name\']
在代码中,您正在触发$missing_content 这是varsempty. 根据规范(请参阅参考资料),一个空字符串(与您的情况不同)将触发此操作。此外,如果未设置字符串,则认为该字符串为空,因此根据前面的代码,我建议首先设置所有值。

Reference:

现在,我个人会将您的代码改成这样(请记住,现在已经很晚了,我已经完成了10个小时的编码,所以我只给您一个片段开始):

首先设置一些重要的VAR,这些VAR必须由用户填写,并将帮助您验证表单。我将使用姓名、电子邮件和文本。

$error_name = false;
$error_email = false;
$error_message = false;
我将它们设置为false,因为从一开始,我们假设一切正常,用户将填充所有内容。然后,我们设置并获取值。现在您没有发布表单的DOM,但我假设您的提交按钮具有已提交的名称和ID。

if (isset($_POST[\'submitted\'])) {
    $name = \'\';
    $email = \'\';
    $message = \'\';
因此,在提交表单后,将设置值。当然,它们现在都是空的,但至少现在我们不会有值丢失和未设置的问题。因此,我们以后可以省略isset 因为我们确信他们确实已经准备好了。现在让我们得到一些实值,下面是上述代码的延续:

if (trim($_POST[\'name\']) === \'\') {
    $error_name = true;
} else {
    $name = trim($_POST[\'name\']);
}
这里要做的是检查该值是否设置为nothing。由于我们一开始是自己做的,所以如果用户没有输入任何内容,我们可以确定缺少了一个字段。我们还使用trim 因此,如果有人只使用空格或制表符等,它将修剪这些空格或制表符,使其值仍然为零。如果是,那么我们设置$error_name 是真的。我们稍后将使用它。现在,如果值不等于零,那么我们知道用户确实在努力输入他们的名称,所以我们分配值。当然,这只是其中的一部分。对于每个值(姓名、电子邮件和消息),您必须执行三次此操作。

好的,我们都准备好了。我们有用户发送的值,即使他们没有输入任何内容,我们至少知道我们已将其设置为nothing,如果发生这种情况,我们将错误变量设置为true。使用这些错误变量的时间:

if (!$error_name && !$error_email && !$error_message) {
    //rest of your form sending procedure goes here
} else {
    $contact_form_not_filled = true;
}
因此,最后我们检查所有错误变量是否都为false。如果是这样的话,我们可以继续发送表单,如果不是这样的话,我们可以将其他var设置为true,然后我们可以使用它来触发AJAX消息或简单的通知,例如:

<?php if (isset($contact_form_not_filled) && $contact_form_not_filled == true) : ?>
    <strong><?php \'Error! \' ?> </strong><?php \'Fill out the form correctly and try again.\' ?>
<?php endif; ?>

结束

相关推荐

WP_DEBUG通知是否解释了我的站点运行如此缓慢的原因?

当我启用时WP_DEBUG, 我收到很多以下类型的通知(见下文)。当然,我通常不会打开调试,但我想知道这些是否是一条线索,可以解释为什么我的页面加载需要这么长时间。更清楚的是,一旦页面开始加载,我的网站就很好了(所以这与加载大型资源无关)。我也在一个非常快速的专用服务器上运行mod_php, 所以我很有信心服务器不是瓶颈。这种缓慢几乎肯定与MySQL/PHP需要很长时间有关,我很难找出原因。如果这些通知没有用,我还能做些什么来检查吗?我安装了调试栏插件,它显示了大约8.5MB的内存使用量,我认为这对于WP