2016-11-11 2 views
0

ich bin meinen phpmailer in meiner Registrierungsseite und mit einfachem Ajax einschließlich Daten drücken Interaktion mit db ... alles in meinem localhost funktioniert gut, aber wenn ich auf dem Server laden, erhalte ich diese internen Fehler 500 htmlPHPMailer verursacht internen Fehler 500 mit Ajax

<script> 
$(document).ready(function(){ 
    $("#register-btn").click(function(){ 

     var name=$("#hostel-name").val(); 
     var email=$("#email").val(); 
     var conf_email=$("#conf-email").val(); 
     var password=$("#password").val(); 


     $.ajax({ 
      url:"functions/register.php", 
      data:{ 
       name:name, 
       email:email, 
       conf_email:conf_email, 
       password:password 
       }, 
      type:"POST", 
      success:function(data){ 
       $("#result").html(data); 
      } 
     }); 
    }); 
    }); 

</script> 
<section id="result"> 

</section> 

<section class="row"> 
    <section class="container"> 
     <section class="col-md-offset-4 col-md-4" id="register"> 
     <h1 class="title text-center" style="border-left:0;margin-top: -10px;"><a href="index">Accomonde</a></h1> 
      <h3 class="title">Sign Up</h3> 
      <br> 

       <section class="form-group col-md-12"> 
       <label> Name</label> 
       <input type="text" class="form-control" name="hostel-name" id="hostel-name" autocomplete="off" placeholder="Hostel Name" required> 
       </section> 

       <section class="form-group col-md-12"> 
       <label>Email</label> 
       <input type="email" class="form-control" name="email" id="email" autocomplete="off" placeholder="Your Email" required> 
       </section> 

       <section class="form-group col-md-12"> 
       <label>Confirm Email</label> 
       <input type="email" class="form-control" name="conf-email" id="conf-email" autocomplete="off" placeholder="Confirm Your Email" required> 
       </section> 

       <section class="form-group col-md-12"> 
       <label>Password</label> 
       <input type="password" class="form-control" name="password" id="password" autocomplete="off" placeholder="Your Password" required> 
       <br> 
       <section class="form-group"> 
        <button class="form-control btn-primary" name="register" id="register-btn" ><span class="fa fa-paper-plane"> Sign Up</span></button> 
       </section> 
       <section class="form-group"> 
        <ul class="list-inline"> 
         <li class="pull-left">Already Have an Account?</li> 
         <li class="pull-right"><a href="login">Log in!</a> </li> 
        </ul> 
       </section> 

     </section> 
    </section> 
</section> 

`` `

und das ist mein pHP-Skript

<?php 
    require_once '../libs/phpmailer/PHPMailerAUtoload.php'; 
    try{ 
     include '../database/connection.php'; 
     $hostel_name=$_POST['name']; 
     $email=filter_var($_POST['email'],FILTER_VALIDATE_EMAIL); 
     $password=hash('sha256',$_POST["password"]); 
     $confemail=filter_var($_POST['conf_email'],FILTER_VALIDATE_EMAIL); 
     $confirm_code=md5(uniqid(rand())); 
     $user_id=md5(rand(0,10000)); 
     //new block added 
      if($name="" or $email=="" || $password=="" || $confemail=="" ){echo '<p class="alert alert-danger text-center">Please Make Sure All Fields Are Filled <span class="close pull-right"><span class="close pull-right"> <a href="#" >&times;</a></span></p>';} 

      elseif($email==$confemail){ 
     $query=$dbc->query("select * from users where email='$email'"); 


    if($result=$query->fetch(PDO::FETCH_NUM)==1){ echo ' 
    <p class="alert alert-danger text-center">We already have someone with that email <span class="close pull-right"><span class="close pull-right"> <a href="#" >&times;</a></span></p>'; }elseif($result=$query->fetch(PDO::FETCH_NUM)==0){ 
     $data_result=$dbc->query("insert into users(hostel_name,email,password,confirm_code,user_id) values('$hostel_name','$email','$password','$confirm_code','$user_id')"); 
    if($data_result){ 
      $m = new PHPMailer; 
     $m ->isSMTP(); 
     $m->SMTPAuth=true; 

     // debugging 
     // $m->SMTODebug=1 
     // endof debug 
     $m->Host="smtp.gmail.com"; 
     $m->Username="[email protected]"; 
     $m->Password="lollypop28:)"; 
     $m->SMTPSecure='ssl'; 
     $m->Port=465; 
     $m->isHtml(true); 

     $m->Subject = 'Welcome to Efie'; 
     ob_start(); 
include '../views/email/register-email.php'; 
$body = ob_get_contents(); 

    $m->msgHTML($body, dirname(__FILE__)); 
     $m->FromName="Efie Ghana"; 
     $m->AddAddress($email,$hostel_name); 
     ob_end_clean(); 
     $m->send(); 

     echo '<p class="alert alert-success text-center error-message"> You\'re almost there! Check your inbox to activate your account.</p>'; 

     } 

    } 
} 
}catch(Exception $e){echo '<p class="alert alert-danger text-center error-message">Something is not right <span class="pull-right close"> <a href="#" >&times;</a></span></p>';} 

$dbc=null; 





?> 

` ``

+2

Bitte nicht __roll Ihr own__ Passwort-Hashing. PHP bietet [ 'password_hash()'] (http://php.net/manual/en/function.password-hash.php) und [ 'password_verify()'] (http://php.net/manual/ en/function.password-verify.php) bitten sie benutzen. Und hier sind einige [gute Ideen über Passwörter] (https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet) Wenn Sie eine PHP-Version vor 5.5 verwenden [gibt es ein Kompatibilitätspaket hier] (https :; 'machen die Spalte' auto increment' statt – RiggsFolly

+1

nicht selbst '$ user_id = md5 (rand (0,10000)) erzeugen 500 Fehler. Wenn ich raten müsste würde ich sagen, dass Ihre relativen Pfade zu der Datenbankverbindung oder PHPMailerAUtoload auf Ihrem lokalen Host korrekt sind, aber nicht auf dem Server. – RiggsFolly

+0

Überprüfen Sie Ihre Server-Logs, den Grund für das finden //github.com/ircmaxell/password_compat) – bassxzero

Antwort

1

Linux-Dateisysteme sind in der Regel case-sensitive, so wird dies nicht funktionieren:

require_once '../libs/phpmailer/PHPMailerAUtoload.php'; 

werden soll:

require_once '../libs/phpmailer/PHPMailerAutoload.php'; 

Im Allgemeinen kann jedes Mal, wenn Sie einen Fehler 500 erhalten, können Sie mehr finden Details zum Fehler in den Protokolldateien Ihres Webservers.

Auch Ihr Skript ist anfällig für SQL-Injection - während Sie überprüfen, dass die E-Mail-Adresse gültig ist, ist es möglich, eine Zeichenfolge, die eine gültige E-Mail-Adresse, die auch eine gültige SQL-Injektion Angriff ist. Entkomme immer, was du in dein SQL schreibst.

Verwandte Themen