• User Attivo

    Warning: Cannot modify header information - headers already sent by

    Ragazzi sto sclerando chi può aiutarmi per favore?

    Ho una pagina sola admin.php
    <?php
    include("config.inc.php");
    $file = $_SERVER['PHP_SELF'];

    echo"
    <center><table border=1 bgcolor=$sfondo1 cellspacing=0 cellpadding=0 bordercolor=$bordo1 width=600>
    <td>
    <table border=1 cellspacing=0 cellpadding=2 bgcolor=$sfondo2 bordercolor=$bordo2 width=600>
    <td width=550><font face=verdana size=2>Pannello amministrazione</td></table></td></table>";

    function login() {

    include("config.inc.php");
    global $file;

    echo"
    <p><table border=1 bgcolor=$sfondo1 cellspacing=0 cellpadding=2 bordercolor=$bordo1 width=150>
    <td><form action=$file method=post>
    <table border=0 cellspacing=0 cellpadding=0 bgcolor=$sfondo2 bordercolor=$bordo2 width=150>
    <td><font size=1 face=verdana>User:</td>
    <td><input type=text name=user class=input size=15></td>
    <tr>
    <td><font size=1 face=verdana>Pasword:<br> </td>
    <td><input type=password name=pwd class=input size=15><br><input type=submit name=submit1 class=bottone value=Login></td>
    </table></td></table></form>";

    }

    if(isset($_POST['submit1'])) {
    
        $db = mysql_connect($db_host, $db_user, $db_password) or die('Errore connessione database');
    
        mysql_select_db($db_name, $db) or die('Errore selezione database');
    
    if(($_POST['user']) && ($_POST['pwd'])) {
    
        $query = "SELECT admin_ID FROM admin_newsletter WHERE user = '$_POST[user]' AND password = '$_POST[pwd]'";
        $risultato = mysql_query($query);
        $num = mysql_num_rows($risultato);
    
            if($num>0) {
                Header("Location: $file?funzione=amministrazione");
    
                } else {
                    echo"<script>alert('User o password sbagliati.');</script>";
    

    }
    }
    }

    Poi ho altre funzioni tra cui amministrazione... il problema che quando metto lo user e la pass mi esce

    Warning: Cannot modify header information - headers already sent by (output started at E:\inetpub\vhosts\torneicalcetto.it\httpdocs\admin.php:11) in E:\inetpub\vhosts\nomesito.it\httpdocs\admin.php on line 46

    Chi mi aiuta per favoreeeeee


  • Consiglio Direttivo

    Ciao Symon83,
    non puoi inviare un header quando già esistono degli output
    Questo deve stare prima di ogni cosa, <DOCTYPE.....> compreso:
    [php]header("Location: $file?funzione=amministrazione");[/php]quindi lo devi spostare con tutto lo script interessato, oppure lo sostituisci con un refresh
    [php]header("Refresh: 1; $file?funzione=amministrazione");[/php]
    😉


  • User Attivo

    L'errore si trova prima della linea 46.
    Alla linea 12 di admin.php forse c'è una funzione header() oppure funzioni simili, come session_start() che modificano l'header information.
    Altra cosa, quando usi un header("Location: ...") metti anche exit() è più sicuro.

    Ciao!


  • User Attivo

    Ciao! grazie per aver risposto. Ho provato a fare come mi hai scritto ma l'errore non cambia!


  • User Attivo

    Deve essere per forza quello l'errore, individuato dal nostro moderatore...
    Fai i controlli sull'header prima di ogni tipo di stampa a schermo, anche la minima e più insignificante.
    Controlla anche che il file "config.inc.php" non contenga alcun tipo di "echo".


  • User Attivo

    e ricordiamo anche che hai fatto un altro post identico a questo, e già hai ricevuto le stesse risposte...


  • Admin

    Buongiorno momino.

    Le è stato ricordato svariate volte di rispettare la regola che prevede di scrivere in italiano corretto, con maiuscole e punti e senza usare lo stile SMS.

    La prego di attenersi scrupolosamente a queste indicazioni.


  • User Attivo

    Oh mio Dio, le iniziali delle righe!!!
    Devo davvero essere un essere terribile per non rispettare questa regola fondamentale, mancando così di rispetto a tutti gli utenti del Forum!!
    Il mio italiano è corretto, e lo stile SMS è praticamente assente.
    Ho visto le correzioni per le maiuscole sull'iniziale delle righe e mi scuso, ma non mi scuso per l'italiano nè per lo stile sms, visto che non ne sono colpevole.
    Non voglio entrare in polemica, ma mi sento perseguitato!


  • User Attivo

    Ragazzi il mio codice è proprio quello che vi ho copiato comincia così come l'ho copiato a voi, ho provato a sostituire con
    header("Refresh: 1; $file?funzione=amministrazione");
    ma ottengo lo stesso errore.

    probabilmente sbaglio qualcosa ma non capisco dove sta l'errore.:(


  • User Attivo

    Scusa, ma perchè fare
    [PHP]include ("config.inc.php");[/PHP]
    anche nel corpo della funzione "login()"?
    Probabilmente è lì che ti manda un header fuori posto.

    Toglilo dalla funzione login, una volta fatto l'include, il codice di quella pagina php viene incorporato, quindi utilizzabile anche dalla funzione "login()".

    Prova un pò.


  • User Attivo

    Includo config.php perchè devo collegarmi al database in quanto la pass e il nome utente li recupera da lì, se lo tolgo poi non mi legge pass e user. Dici che mi conviene dichiarare due variabili $pass $user e cancellarle la tab del db?


  • User Attivo

    Il fatto è che quando usi "include()" o "include_once()" è come se PHP facesse un "copia&incolla" del codice del file incluso dentro la pagina che lo include, quindi comunque è come se avessi scritto lì tutto il codice della pagina inclusa.
    Ti faccio un esempio

    Se pagina1.php è
    [PHP]<?php
    echo "prima dell'inclusione";
    include("pagina2.php");
    echo "dopo l'inclusione";
    ?>[/PHP]

    E pagina2.php è
    [PHP]<?php
    $str = "sono la pagina2.php";
    echo $str;
    ?>[/PHP]

    Il risultato è equivalente a scrivere
    [PHP]<?php
    echo "prima dell'inclusione";
    $str = "sono la pagina2.php";
    echo $str;
    echo "dopo l'inclusione";
    ?>[/PHP]

    Quindi tutto il codice della pagina inclusa viene "incollato" nella pagina includente.


  • Admin

    Grazie per la comprensione momino.

    E non si senta perseguitato; non è nelle nostre intenzioni.

    Stiamo cercando di mantenere buono il livello di leggibilità del forum e certo non solo con lei.
    Ci perdoni se siamo sembrati eccessivi.


  • User Attivo

    Ok ho eliminato il problema del warning, adesso però quando carica la pagina mi da quest'altro errore:

    CGI Error

    The specified CGI application misbehaved by not returning a complete set of HTTP headers.

    Sapete dirmi cos'è per favore? Grazie.


  • User Attivo

    Prova così:
    [PHP] if($num>0) {
    echo" <script type="text/javascript">
    <!--
    function doRedirect() {
    location.href = "$file?funzione=amministrazione";
    }
    window.setTimeout("doRedirect()", 0);
    //-->
    </script>";

                } else {
                    echo"<script>alert('User o password sbagliati.');</script>";
    

    }
    [/PHP]


  • User Attivo

    Buona soluzione, aggira il problema del warning di php, ma non capiamo ancora perchè sia generato quell'avviso...