2013-07-30 2 views
-1

Итак, сегодня я отредактировал этот код, который должен сделать так, чтобы пользователи могли изменять свои адреса электронной почты. После того, как они изменят свои адреса электронной почты, он отправит пользователю электронное письмо с подтверждением. Однако вместо этого я перенаправляюсь на внутреннюю страницу с ошибкой 500. :\ любая помощь? Я не вижу ничего плохого с кодом ..Что случилось с кодом моей электронной почты?

<?php 

include("session.php"); 
//Create game account 
$mysqli = new mysqli("localhost", "root", "password", "data"); 

if(mysqli_connect_errno()){ 
    echo("Sorry, the server is 'Under Maintainance'"); 
    exit(); 
} 

$newemail = $mysqli->real_escape_string($_POST['email']); 
$newemail = strtolower($newemail); 
$password = $mysqli->real_escape_string($_POST['password']); 
$hash  = sha1(strtolower($name) . $password); 

if(!isset($name)){ 
    header("Location:index"); 
}else if($password == null || $password == "" || (strlen($password)) < 4 || strpos($password, '<') !== false || strpos($password, '>') !== false){ 
    header("Location:cemail?error=6");//Invalid password 
}else if($newemail == null || $newemail == "" || (strlen($newemail) <= 6 || strpos($newemail, '<') !== false || strpos($newemail, '>') !== false) || strpos($newemail, '@') == false || strpos($newemail, ".com") == false){ 
    header("Location:cemail?error=7");//Invalid Email address 
}else if($email == $newemail){ 
    header("Location:cemail?error=7");//Invalid Email address 
}else{ 
    $result = $mysqli->query("SELECT * FROM characters WHERE email='$newemail' && name!='$name"); 
    $row_cnt = $result->num_rows; 
    $result->free(); 

    if($row_cnt != 0){ 
     header("Location:cemail?error=3");//Email already taken 
    }else{ 

     $result = $mysqli->query("SELECT * FROM characters WHERE originemail='$newemail' && name!='$name'"); 
     $row_cnt = $result->num_rows; 
     $result->free(); 

     if($row_cnt != 0){ 
      header("Location:cemail?error=3");//Email already taken 
     }else{ 

      $result = $mysqli->query("SELECT * FROM characters WHERE name='$name'"); 

      /* fetch associative array */ 
      while($row = $result->fetch_assoc()){ 
       $pass  = $row['pass']; 
       $originemail = $row['originemail']; 
      } 

      /* free result set */ 
      $result->free(); 

      if($hash != $pass){ 
       header("Location:cemail?error=6");//Invalid Password Match 
      }else{ 
       $mysqli->query("UPDATE characters SET email='$newemail' WHERE name='$name'"); 

//Send Email to confirm 
       $to  = $newemail . ", " . $originemail; 
       $subject = "Your email address has now been successfully changed!"; 
       $body = "This is a notification regarding the recent change(s) made to your Legion Online account: " . $username . " 
\n\n 
Your email address has recently been modified through the Legion Online website. If you made this email address change, please disregard this notification. If you did not change your email address, please visit the account recovery page to ensure your account is secure.\n\nEmail addresses connected to this account: \n" . $originemail . "(primary)\n" . $newemail; 
       $headers = "From: [email protected]" . "\r\n"; 
       if(mail($to, $subject, $body, $headers)){ 
        header("Location:accountsettings"); 
       }else{ 
        echo "Email request failed."; 
       } 
      } 
     } 
    } 
} 
$mysqli->close(); 
?> 
+0

Посмотрите в журналах ошибок и увидеть, что ошибка. – JJJ

+0

Или если вы не можете найти журналы ошибок, добавьте 'ini_set ('display_errors', 1);' временно в верхнюю часть файла (прямо под ' Brilliand

+0

Обратите внимание, что пароль, который вы отредактировали, все еще находится в истории изменений. – Brilliand

ответ

0

у вас есть только один цитата переменного $ имя:

$result=$mysqli->query("SELECT * FROM characters WHERE email='$newemail' && name!='$name"); 

копия этого:

$result=$mysqli->query("SELECT * FROM characters WHERE email='$newemail' && name!='$name'"); 
+0

Спасибо, это сработало :) – user2635579

0

ли не забудьте закрыть одиночные/двойные кавычки.

Заменить

$mysqli = new mysqli("localhost", "root", "password", "data); 
$result = $mysqli->query("SELECT * FROM characters WHERE email='$newemail' && name!='$name"); 

по

$mysqli = new mysqli("localhost", "root", "password", "data"); 
$result = $mysqli->query("SELECT * FROM characters WHERE email='$newemail' && name!='$name'"); 
+0

Благодаря синтаксису highlighter – glautrou

+0

Обратите внимание, что отсутствующая цитата после «данных» была просто ошибкой при анонимировании кода, а не фактической проблемой, которую он испытывал. – Brilliand

Смежные вопросы