【问题标题】:undefined index in PHP WordpressPHP Wordpress 中的未定义索引
【发布时间】:2013-12-19 07:57:09
【问题描述】:

我确定人们以前遇到过这个问题,但我看不出哪里出错了。 (我检查了代码中的 isset() 函数,它看起来不错,但它仍然阻止发送电子邮件)

我已经在 Wordpress 上构建了我的自定义联系表单。所以一个表单调用一个连接到 PHP 文件的 jQuery AJAX 函数。我的 PHP 文件保存在 Wordpress 安装文件夹的根目录中(即在开头) 片段如下

jQuery

$('#contactForm').submit(function (event) {
event.preventDefault();  
sendContactForm(); //Call the function
});

function sendContactForm(){
    var dataString=$('#contactForm').serializeArray(); 

    $.post("/contact.php", dataString, function(data) {
    if(data.status == "1") { 
    alert('Message successfully sent');
    }
    else if(data.status=="2") {
    alert('Please enter Antispam correctly');
    } 
    else { 
    alert('Network error. Please try again');
    }
    },
    "json"
    );  

    };

PHP

header('Content-Type: application/json charset=utf-8');
$name = $_POST['name'];
$email = $_POST['email'];
$telephone = $_POST['telephone'];
$choice = $_POST['choice'];     
$message = $_POST['message'];
$from = 'abc@mail.com'; 
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";   
$headers .= 'From: ' . $from . "\r\n";
$to = 'myname@gmail.com'; 
$subject = $name . ' has sent you a message';
$human = $_POST['antispam'];

$body = "<html><body>";
$body.= "Change Request";
$body.= "<table style='border-color: #666;' cellpadding='2'>";
$body.= "<tr style='background: #eee;'><td><b>Name:</b> </td><td>" . $name . "</td></tr>";
$body.= "<tr style='background: #eee;'><td><b>Email:</b> </td><td>" . $email . "</td></tr>";
$body.= "<tr style='background: #eee;'><td><b>Contact:</b> </td><td>" . $telephone . "</td></tr>";
$body.= "<tr style='background: #eee;'><td><b>Service Type:</b> </td><td>" . $choice . "</td></tr>";    
$body.= "<tr style='background: #eee;'><td><b>Message:</b> </td><td>" . $message . "</td></tr>";
$body.= "</table>";
$body.= "</body></html>";   

if( !empty( $_POST['name']) && 
    !empty( $_POST['email']) && 
    !empty( $_POST['telephone']) && 
    !empty( $_POST['choice']) && 
    !empty( $_POST['message']) && 
    $human == '4') {                 
    if (mail ($to, $subject, $body, $headers)) { 
        echo '{"status":"1"}';
    } else { 
        echo '{"status":"0"}';
    } 
} 
else 
{
    echo '{"status":"2"}';
}

我在网络控制台响应中收到的错误

通知:未定义索引:/clientdata/apache-www/k/i/mywebsite.com.au/www/contact.php 中的名称>3

通知:未定义索引:/clientdata/apache-www/k/i/mywebsite.com.au/www/contact 中的电子邮件。 php 上线 4

通知:未定义索引:电话在 /clientdata/apache-www/k/i/mywebsite .com.au/www/contact.php 上线 5
{“状态”:“2”}

如您所见,我已明确提到每个条目不应为空,并且在填写联系表时也会输入每个条目。它由于某种原因失败,然后进入状态 = 2 的最后一个条件。同样的代码之前在同一个托管服务器上工作。我不确定这是我的代码问题还是托管问题导致无法发送。

我的 HTML 表单也是如此(不确定这是否也有助于调查)

<form class="form" role="form" action="#" id="contactForm" name="contactForm" onsubmit="return false;">
    <div class="form-group">
        <label>Name</label>
          <input type="text" class="form-control" required>
    </div>              
    <div class="form-group">
        <label>Email</label>
          <input type="email" class="form-control" required>
    </div>
    <div class="form-group">
        <label>Contact</label>
          <input type="tel" class="form-control" required>
    </div>
    <div class="form-group">
        <label>Request</label>
            <select class="form-control" name="choice">
                <option value="0" selected="selected">Choose...</option>                        
                <option value="Basic Package">Basic</option>
                <option value="Dynamic Request">Advanced</option>                       
                <option value="Other">Other</option>
            </select>
    </div>              
    <div class="form-group">
        <label>Message</label>
            <textarea class="form-control" rows="6" name="message"></textarea>
    </div>              
    <div class="form-group">
        <label>Anti Spam</label>
            <input type="text" class="form-control" name="antispam" placeholder="What is 2+ 2?" required>
    </div>
    <div class="form-group text-center">
        <button class="btn btn-success btn-lg" type="submit">Submit</button>
    </div>              
</form>

有什么想法吗?

【问题讨论】:

  • 我并没有表明您实际上是在 HTML 中为输入命名。

标签: php jquery ajax wordpress apache


【解决方案1】:

您缺少名称属性标签。这就是为什么它没有找到任何带有这些索引的 POST 数据。

<div class="form-group">
    <label>Name</label>
      <input name="name" type="text" class="form-control" required>
</div>              
<div class="form-group">
    <label>Email</label>
      <input name="email" type="email" class="form-control" required>
</div>
<div class="form-group">
    <label>Contact</label>
      <input name="telephone" type="tel" class="form-control" required>
</div>

【讨论】:

  • 天哪,我觉得好笨!现在我知道它是怎么放错地方的了。我将表单转换为 Bootstrap,但忽略了名称标签。谢谢@Andew。
【解决方案2】:

这些是导致未定义索引问题的原因:

$name = $_POST['name'];
$email = $_POST['email'];
$telephone = $_POST['telephone'];
$choice = $_POST['choice'];     
$message = $_POST['message'];

PHP 说它在 $_POST 数组中找不到“电子邮件”或其他内容。变化:

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

例如或使用功能检查您的内容。

【讨论】:

  • 看看@Andrew 的回答为什么找不到它;-)
  • 我没有在 HTML 中指定 name 属性。这就是为什么。谢谢大家!
  • 感谢您的反馈!
【解决方案3】:

尝试指定您的网站网址

$.post("<?php echo get_site_url(); ?>/contact.php", dataString, function(data) {

因为您的网络服务器根可能不是您网站的根。另外,删除该行

header('Content-Type: application/json charset=utf-8');

那么php应该能够读取你的变量

【讨论】:

    猜你喜欢
    • 2015-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-26
    • 1970-01-01
    • 2014-08-11
    • 1970-01-01
    • 2014-12-19
    相关资源
    最近更新 更多