PHP不发送数据到数据库
问题描述:
,同时努力使登记表格我收到此错误:PHP不发送数据到数据库
找不到你的电子邮件在我们的数据库
无法发送确认链接到您的电子邮件地址
为什么不发送?
这是PHP:
<?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 protected]');
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");
}
?>
这是形式:
<form name="form1" method="POST" action="registernext.php">
<p>Username:</p>
<p><input type="text" name="username" size="25" maxlength="20" value=""></p>
<p>Password:</p>
<p><input type="password" name="pass" size="25" maxlength="20" value=""></p>
<p>Confirm Password:</p>
<p><input type="password" name="pass2" size="25" maxlength="20" value=""></p>
<p>Email:</p>
<p><input type="text" name="email" size="25" maxlength="65" value=""></p>
<p>Confirm Email:</p>
<p><input type="text" name="email2" size="25" maxlength="65" value=""></p>
<p><input type="submit" name="submit" value="Register"></p>
</form>
答
简单$sentmail
没有设置在所有if-else分支。当在数据库中找不到的电子邮件,没有人谁它设置为false,并以下线将生产通知:
if($sentmail){ // **LINE 47**-------------------
为了避免它,设置默认false
somethwhere开头:
$sentmail = false;
+0
工作,但现在我仍然“在我们的数据库中找不到您的电子邮件。无法发送确认链接到您的电子邮件地址” – CatsAreMLG
+0
@catsaremlg bcz其执行其他部分和yur查询$ result3 = mysql_query($ sql);不工作 – devpro
如果没有找到电子邮件 - 那么'$ sentmail'没有被定义。 –
你已经开放SQL注入与此。使用参数化查询。更新你的驱动,'PDO'或'mysqli'。 – chris85