Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Reindirizzamento non va

    Ciao, sto facendo un progetto in php mvc ma senza framework. Ho organizzato i file in questo modo:
    - directory public: ci sono i file accessibili dall'esterno
    - directory View: ci sono i file .php ma essenzialmente e' solo html
    - direcory Model: contiene i file relativi alla connessione al database, e le classi che definiscono gli oggetti, per esempio la classe User.php
    - directory Controller: contiene una classe 'generica' Controller e varie classi Controller piu' specifiche.


    Ho creat una pagina di login (View/Login.php) con un form il cui action manda a public/index.php. In index.php c'e' questo codice:
    codice:
    $controller = new LoginController(); 
    $view = $controller->invoke();
    $view->render();
    invoke() e' una funzione in Controller/LoginController.php che legge i dati inseriti dall'utente e li controlla, se sono corretti (esiste un utente nel database con tale username e password) allora crea due variabili
    globali e fa un redirect:
    codice:
    $_SESSION['logged_in'] = 1;
    $_SESSION['username'] = $username;
    header("refresh: 0; url = ../public/home.php");
    exit();
    public/home.php fa questo:
    codice:
        
    $controller = new HomeController();
    $view = $controller->invoke();
    $view->render();
    HomeController e' una classe che estende Controller. Il costruttore di Controller guarda se esistono le variabili
    Codice PHP:
    $_SESSION['logged_in'
    e
    Codice PHP:
    $_SESSION['username'
    .
    Se esistono ok, se non esistono reindirizza a index.php.

    Il mio problema e' che la riga
    Codice PHP:
    header("refresh: 0; url = ../public/home.php"); 
    non reindirizza.
    Spiego meglio: quando inserisco dei dati corretti (utente registrato) reindirizza per brevissimo tempo a home.php ma poi ritorna a index.php.
    Invece dovrebbe reindirizzare a home.php e rimanerci, non tornare a index.php.
    ho provato anche aggiungendo
    Codice PHP:
    <?php ob_start();
    all'inizio del file e
    Codice PHP:
    ob_end_flush(); 
    prima di
    Codice PHP:
    header("Location: $url"true302); 
    ma niente. Ho provato anche con
    Codice PHP:
    header("refresh: 0; url=../public/home.php"); 
    ..


    Come posso risolvere questo problema?

  2. #2
    Utente di HTML.it L'avatar di garakkio
    Registrato dal
    Dec 2011
    residenza
    Roma
    Messaggi
    480
    Io non ho mai visto usre header() in questo modo, di solito per il redirect si passa come parametro 'Location: ...'.
    Comunque non sarebbe male, prima di usare header(), verificare se ci sono eventuali header già inviati, con headers_sent()
    Magari in un metodo del tuo controller base.

  3. #3
    Grazie per la risposta. Ho provato in questo modo:
    codice HTML:
    ob_end_flush(); 
    if(!headers_sent()) {
        header('Location: ../public/home.php');
        exit;               
    }
    Fa sempre la stessa cosa, non va

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    42
    Ma il problema secondo me è questo: non è che magari hai messo la directory invece che l'URL della pagina da caricare?

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    42
    No scusa non può essere

  6. #6
    Non capisco, a me sembra tutto corretto..

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    42
    No è che dopo Location: ci va l'URL e non la directory ma penso che quello che hai fatto giusto, anche perché non penso darebbe un errore come quelloche hai descritto tu.

  8. #8
    Altre idee?

  9. #9
    Risolto, mi mancava una session_start() Grazie comunque

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.