PHP邮件不断给我未定义的索引,帮助?

Posted

技术标签:

【中文标题】PHP邮件不断给我未定义的索引,帮助?【英文标题】:PHP mail keeps giving me undefined index, help? 【发布时间】:2011-03-06 01:51:54 【问题描述】:

我有一个联系表单脚本,我向其中添加了一些字段,与其余字段相同,但提交时的新变量给出未定义索引的“通知”,并且变量不会填充。我像这样抓住他们 POST,

$name     = $_POST['name'];
$website  = $_POST['website'];
$company  = $_POST['company'];
$addy     = $_POST['addy'];
$email    = $_POST['email'];
$phone    = $_POST['phone'];

姓名、电子邮件和电话都可以,但网站、地址和公司不行。

抓取它的 javascript 看起来是这样的,

$.post(action,  
        name: $('#name').val(),
        email: $('#email').val(),
        website: $('#website').val(),
        company: $('#company').val(),
        addy: $('#addy').val(),
        phone: $('#phone').val(),

..etc

什么会导致这种情况?我不确定还有哪些其他代码会有所帮助,谢谢。

编辑以添加 html

这是 HTML 中的一些表单代码,我看不到我错过的任何内容..

<form method="post" action="send_mail.php" name="contactform" id="contactform">

        <fieldset>

        <legend>Please fill in the following form to contact us</legend>

        <label for=name accesskey=U><span class="required">*</span> Your Name</label>
        <input name="name" type="text" id="name" size="30" value="" /> 

        <br />
        <label for=email accesskey=E><span class="required">*</span> Email</label>
        <input name="email" type="text" id="email" size="30" value="" />

        <br />
        <label for=website accesskey=W>Website</label>
        <input name="website" type="text" id="website" size="30" value="" />

        <br />
        <label for=company accesskey=C>Company</label>
        <input name="company" type="text" id="company" size="30" value="" />

        <br />
        <label for=addy accesskey=A>Address</label>
        <input name="addy" type="text" id="addy" size="30" value="" />

【问题讨论】:

如果您仍然不确定下面的答案,请发布您的一些 HTML,我们会告诉您哪里出错了。 谢谢,我刚刚在原帖中添加了 HTML。 我把完整的代码,HTML、PHP 和 jQuery 的形式放在了这里,如果有人不介意看一看.. :) pastie.textmate.org/1012951 您的 JS 和 PHP 在我看来很好,但您需要在 foraccesskey 属性周围添加双引号。另外,我猜你不小心把关闭的&lt;/fieldset&gt;&lt;/form&gt; 标签和#phone 输入丢了? 谢谢山姆,我添加了你提到的报价。是的,一些字段和表格的结尾我只是没有放在那里,因为它有点长;)我把整个代码结构,HTML,PHP 和 JS 放在了馅饼里,你碰巧看到了吗那? pastie.textmate.org/pastes/1012961 【参考方案1】:

如果值为 false 或空,则帖子不会在 AJAX 调用中包含这些变量。建议您在 PHP 中使用isset() 来验证变量是否设置:

$name     = isset($_POST['name']) ? $_POST['name'] : '';
etc...

详细解释

如果我们在 javascript (jQuery) 中有以下代码:

$.post('url',
  'foo': 'bar',
  'baz': $('#nonexisting_element').val(),
   'qux': 'quux'
,...);

#nonexisting_element 不存在,它将发送以下内容:

foo=bar&qux=quux

在 PHP 端,以下内容将在 PHP 数组中结束:

$_POST = array (
    'foo' => 'bar'
    'qux' => 'quux'
);

【讨论】:

谢谢。是的,我刚刚读到了,但让我感到困惑的是,其他现有的字段/变量不这样做..?为什么它们会起作用? 感谢您的更新。你能检查一下我用一些 HTML 代码更新它的 OP。我得到了所有我相信的领域,所以我不明白为什么他们不会被设置...... @thatryan 如果给定的输入字段为空,则该字段将不会出现在查询中 此外,使用 isset() 可以消除错误,但仍然不会填充变量。我不明白为什么它不会通过...【参考方案2】:

jQuery 不发送值为 null 的 post 字段。因此,在您的情况下,错误可能是您没有具有给定 ID website, addy, ... 的字段。

可能是你在复制旧代码时忘记添加id=".." 属性或忘记更改?

【讨论】:

谢谢,我很确定我得到了所有的字段...我用一些 HTML 更新了原始帖子

以上是关于PHP邮件不断给我未定义的索引,帮助?的主要内容,如果未能解决你的问题,请参考以下文章

数据表:TypeError:我未定义

未定义文件!!!帮助 HTML / PHP [重复]

PHP 注意:未定义索引:将表单提交同步到 mailchimp 列表时

在 redux 中未使用 reactjs 定义调度

未定义索引+未选择数据库[重复]

“注意:未定义的变量”、“注意:未定义的索引”和“注意:未定义的偏移量”使用 PHP