我在尝试创建注册表时遇到此错误:
在我们的数据库中找不到您的电子邮件
无法向您的电子邮件地址发送确认链接
为什么不发送?
这是PHP:
curl -X POST \
-H "Accept: application/json" \
-H "X-Access-Token: ###secureToken###" \
-H "Cache-Control: no-cache" \
-d '{
"frames": [
{
"index": 0,
"text": "SUCCESS",
"icon": null
}
]
}' \
https://developer.lametric.com/api/V1/dev/widget/update/com.lametric.###appid###
这是表格:
<?php
include('config.php');
//test to see if username is alphanumeric
$testname = $_POST['username'];
if (!eregi('([^A-Za-z0-9])',$testname)){
//test for duplicate names
$query = "SELECT * FROM users WHERE username='$_POST[username]'";
$result = mysql_query($query);
$num = mysql_num_rows($result);
if ($num == 0){
//test for duplicate emails
$query2 = "SELECT * FROM users WHERE email='$_POST[email]'";
$result2 = mysql_query($query2);
$num2 = mysql_num_rows($result2);
if ($num == 0){
//test if emails and passwords match up
if(($_POST['pass']==$_POST['pass2'])&&($_POST['email']==$_POST['email2'])){
//generate random confirmation code
$confirm_code = md5(uniqid(rand()));
//get rid of all html from hackers
$name=strip_tags($_POST['username']);
$email=strip_tags($_POST['email']);
$pass=strip_tags($_POST['pass']);
//insert data into database
$sql="INSERT INTO temp SET code='$confirm_code',username='$name',email='$email',pass='$pass'";
$result3 = mysql_query($sql);
if ($result3){
$message = "Your Confirmation link \r\n";
$message .= "Click on this link to activate your account \r\n";
$message .= "localhost/PHPTUT/confirmation.php?passkey=$confirm_code";
$sentmail = mail($email,'Registration Confirmation',$message,'From: email@example.com');
header("Location:thankyou.html");
}else{
echo 'Could not find your email in our database';
}
//if your email successfully sent
if($sentmail){ // **LINE 47**-------------------
echo 'Your confirmation link has been sent to your email address.';
}else{
echo 'Cannot send confirmation link to your email address';
}
}else{
header("Location:badmatch.html");
}
}else{
header("Location:emailinuse.html");
}
}else{
header("Location:nameinuse.html");
}
}else{
header("Location:invalidname.html");
}
?>
答案 0 :(得分:1)
在所有if-else分支中都没有设置$sentmail
。如果在数据库中找不到电子邮件,则没有人将其设置为false,并且以下行将生成通知:
if($sentmail){ // **LINE 47**-------------------
要避免这种情况,请在开头的某处设置默认值false
:
$sentmail = false;