2015-01-16 14 views
10

Ho una pagina di iscrizione.php che contiene il login tramite il pulsante facebook. struttura della pagina è qualcosa di similereindirizzare a un nuovo url dopo lo script backend

<?php 
if(!isset($_SESSION['logged_in'])) 
{ 
    echo '<div id="results">'; 
    echo '<!-- results will be placed here -->'; 
    echo '</div>'; 
    echo '<div id="LoginButton">'; 
    echo '<a href="#" rel="nofollow" class="fblogin-button" onClick="javascript:CallAfterLogin();return false;">Login with Facebook</a>'; 
    echo '</div>'; 
} 
else 
{ 
    echo 'Hi '. $_SESSION['user_name'].'! You are Logged in to facebook, <a href="?logout=1">Log Out</a>.'; 
} 
?> 

codice ajax utilizzato in questa pagina chiama un'altra pagina process_facebook.php ed elabora i dati al back-end. codice utilizzato per l'Ajax nella pagina signup.php è

<script type="text/javascript"> 
window.fbAsyncInit = function() { 
    FB.init({ 
     appId: '<?php echo $appId; ?>', 
     cookie: true,xfbml: true, 
     channelUrl: '<?php echo $return_url; ?>channel.php', 
     oauth: true 
     }); 
    }; 
(function() { 
    var e = document.createElement('script'); 
    e.async = true;e.src = document.location.protocol +'//connect.facebook.net/en_US/all.js'; 
    document.getElementById('fb-root').appendChild(e);}()); 

function CallAfterLogin(){ 
    FB.login(function(response) {  
     if (response.status === "connected") 
     { 
      LodingAnimate(); //Animate login 
      FB.api('/me', function(data) { 

       if(data.email == null) 
       { 
        //Facbeook user email is empty, you can check something like this. 
        alert("You must allow us to access your email id!"); 
        ResetAnimate(); 

       }else{ 
        AjaxResponse(); 
       } 

      }); 
     } 
    }, 
    {scope:'<?php echo $fbPermissions; ?>'}); 
} 

//functions 
function AjaxResponse() 
{ 
    //Load data from the server and place the returned HTML into the matched element using jQuery Load(). 
    $("#results").load("process_facebook.php"); 
} 

//Show loading Image 
function LodingAnimate() 
{ 
    $("#LoginButton").hide(); //hide login button once user authorize the application 
    $("#results").html('<img src="img/ajax-loader.gif" /> Please Wait Connecting...'); //show loading image while we process user 
} 

//Reset User button 
function ResetAnimate() 
{ 
    $("#LoginButton").show(); //Show login button 
    $("#results").html(''); //reset element html 
} 

</script> 

Ora il problema è che la pagina process_facebook.php lavora con i dati fb al back-end, e dopo che viene reindirizzato di nuovo alla pagina signup.php e visualizza i dati che la pagina process_facebook.php era stata stampata (opzionale). Quello che voglio è che invece di reindirizzare dalla pagina process_facebook.php alla pagina di iscrizione.php e visualizzare i suoi dati, vorrei reindirizzare a un'altra pagina, non solo i nuovi dati dovrebbero essere caricati dalla nuova pagina ma l'url dovrebbe anche essere cambiato (es. www.example.com/app/signup.php dovrebbe cambiare a www.example.com/app/profile.php)

ho dimenticato di dirlo ma ho provato a usare l'header() per reindirizzare ma sta semplicemente recuperando i dati della pagina profile.php ma mostrando l'URL www.example.com/app/signup.php. Ora il problema è che se aggiorno la pagina per qualsiasi motivo, i dati di old signup.php la pagina viene caricata

+0

Uhm, potrebbe essere mi manca qualcosa, ma perché semplicemente non utilizzare la funzione header() nel tuo process_facebook.php? Controlla http://stackoverflow.com/questions/768431/how-to-make-a-redirect-in-php per ulteriori dettagli. – Vick

+0

header ('Location: you_url_here'); Utilizzalo ogni volta che devi reindirizzare tramite PHP –

+0

@Vick ho provato a utilizzare l'intestazione, ma invece di reindirizzare a un altro url sta recuperando i dati della nuova pagina del profilo e mostrando l'URL www.example.com/app/signup.php. e se ricarico la pagina, ricevo i dati della vecchia pagina di registrazione – Sam

risposta

0

Le intestazioni devono essere posizionate nella parte superiore della pagina, prima che l'HTML venga emesso sul client. È anche possibile emettere i dati mentre il server scende la pagina "scrivendo" l'HTML al client.

Prima di qualsiasi HTML, ma dopo aver aperto l'uso di PHP in questo modo:

header('Location: http://www.example.com/'); 

referr a: http://php.net/manual/en/function.header.php

+0

puoi mostrare come farlo – Sam

+0

L'ha risolto? –

0

Se seguo bene, si sta utilizzando Facebook per la sessione utente e tutto il codice di Facebook si 'sta utilizzando è Javascript in modo che si desidera utilizzare javascript per fare il redirect ...

document.location = '/profile.php'; 

che ha bisogno di mettere in atto ovunque la chiamata al back-end completa.

0

Basta applicare un die(); dopo la chiamata di intestazione.

+0

Mentre questo risponde alla domanda è sempre una buona idea inserire del testo nella risposta per spiegare cosa stai facendo. Leggi [come scrivere una buona risposta] (http://stackoverflow.com/help/how-to-answer). – jurgemaister

0

Come ha detto Harry, sicuramente vorrai farlo tramite JS.

document.location = '/profile.php'; 

function CallAfterLogin(){ 
    FB.login(function(response) {  
     if (response.status === "connected") 
     { 
      LodingAnimate(); //Animate login 
      FB.api('/me', function(FBdata) { 

       if(FBdata.email == null) 
       { 
        //Facbeook user email is empty, you can check something like this. 
        alert("You must allow us to access your email id!"); 
        ResetAnimate(); 

       }else{ 
        //you need to call some php script via ajax here to send these details to your server. 
        $.post('fbResponseParse.php',FBdata) 
        // your php should return some sort of an ok, or even a url for you to redirect to. 
        //if it fails you need to display an error not redirect. 
         .done(function(data){ 
         //data in this scope is the response from your php script. 
          if(data.success) document.location = '/profile.php'; 
          else displayError(data.errorMess) 
         }) 
       } 

      }); 
     } 
    }, 
    {scope:'<?php echo $fbPermissions; ?>'}); 
} 

Quindi quello che stai facendo è usare JS per parlare con Facebook. Poi su quella risposta lo mandi al tuo back-end tramite AJAX. Il tuo back-end dovrebbe analizzare i dati, creare i dettagli della sessione, soprattutto se ti invia un successo (bool) e errorMess (se applicabile), quindi usi .done per analizzare i messaggi di successo/fail e di rendering. Ciò manterrà il cliente qui, nella pagina di registrazione a meno che le cose di Facebook non siano un successo.

1

Effettuare una pasta cosa sotto funzione nel file funzioni: -

function redirect($url=NULL) 
{ 
    if(is_null($url)) $url=curPageURL(); 
    if(headers_sent()) 
    { 
     echo "<script>window.location='".$url."'</script>"; 
    } 
    else 
    { 
     header("Location:".$url); 
    } 
    exit; 
} 

e la chiamata di questa funzione come:

redirect($url); 

in modo che quando si ottengono i dati da Facebook così dopo applicare la controlla su $ user_profile puoi reindirizzare l'utente tramite la funzione precedente, questa funzione controllerà se l'intestazione è già stata inviata, quindi userà javascript altrimenti userà Header().

Problemi correlati