通讯注册页面(PHP和MySQL)

时间:2014-09-08 16:14:03

标签: php mysql ajax newsletter

我正在创建一个包含PHP和MySQL的简报注册页面。我使用this site中的这个免费资源。

我在MySQL中创建了一个数据库并成功测试并将其链接到我的PHP文件。但是,我在预览时遇到错误提示subscribe.php)。不确定我在代码中遗漏了哪些变量。

  

注意:未定义的索引:第15行的C:\ xampp \ htdocs \ test \ subscribe.php中的注册电子邮件   {“status”:“error”,“message”:“电子邮件地址字段不能为空”} **

这是我的代码(2个PHP文件):

newsletters.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>newsletters</title> 
<link rel="stylesheet" href="css/newsletter.css">

</head>
<body>

    <div id="newsletterform">
    <div class="wrap">
        <h3>Get Email Update</h3>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin ullamcorper sapien luctus nisl laoreet, ac commodo tellus placerat. Etiam nec magna lacus. Curabitur quis felis vel nisl tincidunt hendrerit.</p>
        <form action="subscribe.php" method="post" id="newsletter" name="newsletter">
        <input type="email" name="signup-email" id="signup-email" value="" placeholder="Insert email here" />
        <input type="submit" value="Subscribe" name="signup-button" id="signup-button">
        <span class="arrow"></span>
        </form>
        <div id="response"></div>
        </div>
    </div>

<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
<script src="js/lib.js"></script>


</body>
</html>

subscribe.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>newsletter-submit</title> 
</head>

<body>
<?php

$host   = "localhost";
$dbname = "cc_email_list";
$user   = "ccemail";
$pass   = "password";
$email    = filter_var($_POST['signup-email'], FILTER_SANITIZE_EMAIL);
$datetime = date('Y-m-d H:i:s');

try {
    $db = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);

    if (empty($email)) {
        $status = "error";
        $message = "The email address field must not be blank";
    } else if (!preg_match('/^[^0-9][A-z0-9._%+-]+([.][A-z0-9_]+)*[@][A-z0-9_]+([.][A-z0-9_]+)*[.][A-z]{2,4}$/', $email)) {
        $status = "error";
        $message = "You must fill the field with a valid email address";
    } else {
        $existingSignup = $db->prepare("SELECT COUNT(*) FROM signups WHERE     signup_email_address='$email'");
        $existingSignup->execute();
        $data_exists = ($existingSignup->fetchColumn() > 0) ? true : false;

        if (!$data_exists) {
            $sql = "INSERT INTO signups (signup_email_address, signup_date) VALUES (:email, :datetime)";
            $q = $db->prepare($sql);
            $q->execute(
                array(
                    ':email' => $email,
                    ':datetime' => $datetime
            ));

            if ($q) {
                $status = "success";
                $message = "You have been successfully subscribed";
            } else {
                $status = "error";
                $message = "An error occurred, please try again";
            }
        } else {
            $status = "error";
            $message = "This email is already subscribed";
        }
    }

    $data = array(
        'status' => $status,
        'message' => $message
    );

    echo json_encode($data);

    $db = null;
}
    catch(PDOException $e) {
    echo $e->getMessage();
}

?>
</body>
</html>

2 个答案:

答案 0 :(得分:0)

为什么你会遇到这个问题

此错误表示$ _POST ['signup-email']未设置(因此提交的表单未填写名称为“signup-email”的字段,或者根本没有填写)。
这不是一个严重的错误,它不会影响代码的正确操作。

解决方案

如果要关闭此类错误的报告,请在打开PHP标记后立即添加此代码:

error_reporting(E_ERROR | E_WARNING | E_PARSE);

答案 1 :(得分:0)

如果你对“Notices”感到困惑,你将来会非常讨厌大型PHP项目:)大多数人只是关闭它们,你可以通过将以下代码放在任何php页面的顶部来完成它们

<?php
error_reporting(E_ALL ^ E_NOTICE);
?>