2009-06-23 8 views
1

У меня есть следующая функция, отправляющая электронное письмо дважды (и я считаю, что работает if ($ result) дважды).функция отправки электронной почты дважды

это называется на отдельной странице:

<?php $User = new User(); 
    $User->ValidReg(); 
    $valid = $User->ValidReg(); 
    if ($valid === false) { 

Вот функция в своем классе:

public function ValidReg() { 
    if ( !empty($_POST['username']) 
    && !empty($_POST['password']) 
    && !empty($_POST['email']) 
    && !empty($_POST['state'])) { 

    //valid ? 
    $valid = true; 

    $username = mysql_real_escape_string($_POST['username']); 
    $password = md5(mysql_real_escape_string($_POST['password'])); 
    $email = mysql_real_escape_string($_POST['email']); 
    $firstname = mysql_real_escape_string($_POST['firstname']); 
    $lastname = mysql_real_escape_string($_POST['lastname']); 
    $state = mysql_real_escape_string($_POST['state']); 

    $checkusername = mysql_query("SELECT * FROM users WHERE Username = '".$username."'"); 

    if(mysql_num_rows($checkusername) == 1) { 
     echo "<div id='shopperlogin1'><p>Sorry, that username is taken.<br /> Please go back and try again.</p></div>"; 
    } 
    else { 
     //test 
     $confirm_code=mysql_real_escape_string(md5(uniqid(rand()))); 

     $sql="INSERT INTO temp_users (
       confirm_code, Username, Password, 
       EmailAddress, FirstName, LastName, State) 
      VALUES (
       '$confirm_code', '$username', '$password', 
       '$email', '$firstname', '$lastname', '$state')"; 
     $result=mysql_query($sql) 
     or die ("Query failed: " . mysql_error() . " Actual query: " . $query); 

     // if suceesfully inserted data into database, send confirmation link to email 
     if ($result) { 

     // send e-mail to ... 
     $to=$email; 

     // Your subject 
     $subject="Your confirmation link here"; 

     // From 
     $header="[email protected]"; 

     // Your message 
     $message="Your Comfirmation link \r\n"; 
     $message.="Click on this link to activate your account \r\n"; 
     $message.="http://www.employeediscounted.com/secret/login.php?passkey=$confirm_code"; 

     // send email 
     $sentmail = mail($to,$subject,$message,$header); 
     } 

     // if not found 
     else { 
     echo "<div id='emailmsg'>Not found your email in our database.</div>"; 
     } 

     // if your email succesfully sent 
     if($sentmail){ 
     echo "<div id='emailmsg'>Your Confirmation link Has Been Sent To Your Email Address.</div>"; 
     } 
     else { 
     echo "<div id='emailmsg'>Cannot send Confirmation link to your e-mail address.</div>"; 
     } 
    } 
    } 
    else { 
    $valid = false; 
    } 
    return $valid; 
} 
+0

Я собираюсь принять одну за команда и отформатируйте ад из этого кода. – Welbog

+3

Там я уменьшил общий непоследовательный стиль и нормализовал отступ. Тем не менее, по-прежнему много действительно длинных строк. – Welbog

+0

@Welbog: Большое улучшение - спасибо, что нашли время! – RichieHindle

ответ

6

Либо я что-то не хватает, или вы просто вызов функции дважды :

$User->ValidReg(); 
$valid = $User->ValidReg(); 

Итак, да, вы отправите два письма!

(вы ожидали второй вызов на провал, поскольку пользователь уже существует? Это не потому, что вы используете две различные таблицы, users vs. temp_users.)

+0

Хммм, да, я был. Хорошо, тогда я избавлюсь от первой функции. Я предполагаю, что все должно исправить. – asdfasdfasdfasdf

+0

Да, это исправлено. Спасибо. – asdfasdfasdfasdf