2013-02-28 3 views
0

저는 워드 프레스를 기반으로하고 사용자 정의 로그인 양식을 만들었습니다.Ajax 로그인이 수정 된 헤더 오류를 반환했습니다.

가 아약스 :

(function ($) { 
    jQuery(document).ready(function() { 

    $("#login_form").submit(function(event){ 
     //check the username exists or not from ajax 
     jQuery.ajax({ 
     type: 'POST', 
     url: my_ajax.ajaxurl, 
     data: $('#login_form').serialize(), 
     cache: false, 
     //dataType: 'json', 
     success: function(result) { 
      var result=trim(result); 
     if(result == 'success'){ 
      window.location='/my-dashboard'; 
      } else { 
      $('#message').html(result); 
      } 
      console.log(result); 
     } 
     }); 
     return false;  
    }); 
    }); 

function trim(str){ 
    var str=str.replace(/^\s+|\s+$/,''); 
    return str; 
} 

}(jQuery)); 

로그인 양식 : 오류가 $ 메시지에서 발생 될 때마다

<p id="message" style="color:red;"></p> 
<form method="post" action="" id="login_form"> 

<div align="center"> 
<div > 
    Email : <input name="email" type="text" id="email" value="" /> 
</div> 
<div style="margin-top:5px" > 
    Password : 
    &nbsp;&nbsp; 
    <input name="password" type="password" id="password" value="" /> 
</div> 
    <div class="buttondiv"> 
     <input type="hidden" name="action" value="my_ajax_callback" /> 
     <input type="hidden" name="func" value="check_login" /> 
     <input name="submit" type="submit" id="submit" value="Login" style="margin-left:-10px; height:23px" /> <span id="msgbox" style="display:none"></span> 
    </div> 
</div> 
</form> 

functions.php이

// Ajax 
add_action('wp_ajax_nopriv_my_ajax_callback', 'my_ajax_callback'); 
add_action('wp_ajax_my_ajax_callback', 'my_ajax_callback'); 

// Your Login function 

function check_login($params){ 
    require_once('lib/hash.php'); 
    $session = new SC_Session; 
    // now you can use $session here 
    $message=array(); 

    if(isset($_POST['email']) && !empty($_POST['email'])){ 
    mysqli_real_escape_string($mysqli, $params['email']); 
    }else{ 
     $message[]='Please enter email'; 
    } 

    if(isset($_POST['password']) && !empty($_POST['password'])){ 
     $password= mysqli_real_escape_string($mysqli, $params['password']); 
    }else{ 
     $message[]='Please enter password'; 
    } 

    $countError=count($message); 
    if($countError > 0){ 
     for($i=0;$i<$countError;$i++){ 
      echo ucwords($message[$i]).'<br/><br/>'; 
     } 
    } else { 

    $hc=$mysqli->query("SELECT password FROM %table% email='".$email."' AND active=1"); 
    while($hp = $hc->fetch_object()) { 
     $stored_hash = $hp->password; 
    } 

    $hasherd = new PasswordHash(8, false); 
    $check = $hasherd->CheckPassword($password, $stored_hash); 

if($check) { 
    //now validating the username and password 
    $result=$mysqli->query("SELECT id, first_name, last_name, zip, email, password FROM %table% WHERE email='".$email."' AND active=1"); 
    while($row = $result->fetch_object()) { 
    //if username exists 
     if($result->num_rows > 0) 
     { 
      $date = date('Y-m-d h:i:s'); 
      $update_sql = $mysqli->query("UPDATE %table% SET last_login='".$date."'"); 

      $firstname = $row->first_name; 
      $lastname = $row->last_name; 
      $zip = $row->zip; 
      $user_id = $row->id; 
      $sex = $row->sex; 

      $session->set_userdata('user_id', $user_id); 
      $session->set_userdata('email', $email); 
      $session->set_userdata('firstname', $firstname); 
      $session->set_userdata('lastname', $lastname); 
      $session->set_userdata('zip', $zip); 
      $session->set_userdata('sex', $sex); 

     } 

    } 
    echo ucwords('success');  
    //return $params; 
    } else{ 
      echo ucwords('please enter correct user details'); 
     } 
    } 
} 
/** 
* Ajax Submit 
*/ 
function my_ajax_callback() { 
    $response = call_user_func($_POST['func'], $_POST); 
    header("Content-Type: application/json"); 
    echo json_encode($response); 
    exit; 
} 

그것이 표시하는 로그인이 현재 잘 작동하지만, 헤더 경고와 함께.

경고 :/% wordpresslocation %/wp-content /에서 헤더 정보 - 이미 보낸 헤더 (/%wordpresslocation%/wp-content/themes/%theme%/functions.php:77에서 출력 시작됨)를 수정할 수 없습니다. 내가 바보 같은 느낌

답변 널 라인 (86) 에 테마/% 테마 %/functions.php는 그것을 알아 냈다 나는 PHP에 능숙 나처럼 자바 스크립트와 PHP를 혼합 유지했다.

(function ($) { 
    jQuery(document).ready(function() { 
    $('#message').slideUp(); 
    $("#login_form").submit(function(event){ 
     $('#message').slideUp(); 
     //check the username exists or not from ajax 
     jQuery.ajax({ 
     type: 'POST', 
     url: my_ajax.ajaxurl, 
     data: $('#login_form').serialize(), 
     dataType: 'json', 
     success: function(params) { 
     if(params == 'success'){ 
     $('#message').html(params).fadeIn(); 
      document.location='/my-dashboard'; 
      } else { 
       $('#message').html(params).fadeIn(); 
      } 
     } 
     }); 
     return false;  
    }); 
    }); 
}(jQuery)); 

및이

$params = 'success';  
    return $params; 
}else{ 
    $params = 'fail'; 
    return $params; 

echo ucwords('success');  
     //return $params; 
     } else{ 
       echo ucwords('please enter correct user details'); 
      } 

를 변경하고 에러를 인쇄 되었기 때문에 PARAMS에게

function check_login($params){ 

답변

2

한게를 다시 전송 (에코 ucwords ('입력 해주세요 올바른 사용자 정보 ');)

그런 다음 헤더를 설정하려고합니다. 그건 불가능합니다. 헤더는 항상 다른 것보다 먼저 설정되어야합니다 (http 작동 방식)

헤더를 보내기 전에 텍스트를 인쇄하는 부분을 다시 작성해야합니다. 또한 유효한 json을 전송하지 않으므로 어쨌든 작동하지 않습니다.

관련 문제