我正在创建一个包含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>
答案 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);
?>