2016-02-13 152 views
0

,同時努力使登記表格我收到此錯誤: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> 
+2

如果沒有找到電子郵件 - 那麼'$ sentmail'沒有被定義。 –

+1

你已經開放SQL注入與此。使用參數化查詢。更新你的驅動,'PDO'或'mysqli'。 – chris85

回答

1

簡單$sentmail沒有設置在所有if-else分支。當在數據庫中找不到的電子郵件,沒有人誰它設置爲false,並以下線將生產通知:

     if($sentmail){ // **LINE 47**------------------- 

爲了避免它,設置默認false somethwhere開頭:

$sentmail = false; 
+0

工作,但現在我仍然「在我們的數據庫中找不到您的電子郵件。無法發送確認鏈接到您的電子郵件地址」 – CatsAreMLG

+0

@catsaremlg bcz其執行其他部分和yur查詢$ result3 = mysql_query($ sql);不工作 – devpro