Errore nell'invio query

Per natura di funzionamento del protocollo http, gli header vanno inviati sempre prima di un qualsiasi altro output.
Inoltre è buona pratica inizializzare la sessione come prima istruzione dello script.

Di conseguenza ti suggerirei di operare queste modifiche:
PHP:
<?php
session_start();

#> controllo sessione valida
if (empty($_SESSION['user_id'])) {
    header('Location:index.php');
   // echo "qualcosa non quadra!";
    exit();
}


#> se arrivo fin qui l'utente è autenticato, procedo con lo script..
echo 'ciao';

require_once 'connessione.php'; 
echo 'la pagina protetta';

?><html>
<head>
<title> Pagina protetta </title>
</head>
<body>
<h1> Questa è una pagina protetta </h1>
</body>
</html>

Grazie per il consiglio !
Qualcuno ha una soluzione al mio problema?
 
e questa è la pagina protetta.php:
PHP:
<html>
 <?php
session_start();

#> se $_SESSION['user_id'] non esiste o è vuoto, rimando l'utente ad index.php
if (empty($_SESSION['user_id'])) {
	header('Location:index.php');
   // echo "qualcosa non quadra!";
    exit();
}
echo 'ciao';
#> se arrivo fin qui l'utente è autenticato, procedo con lo script..
require_once 'connessione.php'; 
echo 'la pagina protetta';
?>
<head>
<title> Pagina protetta </title>
</head>
<body>
<h1> Questa è una pagina protetta </h1>
</body>
</html>

Se decommentavo // echo "qualcosa non quadra!"; e toglievo la riga dell header che portava all'index esce costantemente qualcosa non quadra, come se la sessione fosse sempre vuota..
Ringrazio tutti per l'aiuto che mi state dando, siete davvero gentilissimi.. spero di non chiedere troppo.

Si se non hai fatto l'accesso è logico.
Poi si, mi riferivo a questo controllo:
PHP:
if (empty($_SESSION['user_id'])) {
    header('Location:index.php');
    exit();
}

Cosa è che non funziona di questo codice??
 
Allora ricapitolando tutto vorrei che la mia pagina accedi.php rimandasse ad una pagina del sito e non ad un semplice echo su pagina bianca.
Se il login non avviene con successo rimanda alla index con la stampa nome e pwd errati, mentre se è andato a buon fine alla mia pagina protetta.php.

accedi.php

PHP:
if ($result->num_rows == 0) {
    header('Location:index.php');
    printf("Nome utente o password errati: <br/> %s", $mysqli->error);
    exit();
} else {
    session_start();
    $_SESSION['user_id'] = $record['id'];
    header('Location:protetta.php');
    echo "Utente loggato coretatmente!"; 
}

e questa è la pagina protetta.php:
PHP:
 <?php
session_start();

#> se $_SESSION['user_id'] non esiste o è vuoto, rimando l'utente ad index.php
if (empty($_SESSION['user_id'])) {
	header('Location:index.php');
   // echo "qualcosa non quadra!";
    exit();
}
echo 'ciao';
#> se arrivo fin qui l'utente è autenticato, procedo con lo script..
require_once 'connessione.php'; 
echo 'la pagina protetta';
?>
<html>
<head>
<title> Pagina protetta </title>
</head>
<body>
<h1> Questa è una pagina protetta </h1>
</body>
</html>

Vorrei appunto che una volta loggato mi apre quindi una sessione e mi và su una pagina e non semplicemente un echo su pagina bianca.
Ad esempio vorrei che reindirizza a protetta.php che appunto è accessibile solo agli utenti che si loggano..

Cosa è che non funziona di questo codice??
Non ne ho idea di cosa non funziona ma comunque vengo sempre reindirizzato alla index.
In un modo o nell'altro la pagina protetta non riesco a visualizzarla mai..
Buona serata e grazie.
 
Prova a stampare la variabile di sessione e vedi se è realmente settata (evidentemente no).
 
No non funziona, a questo punto penso mi serva sapere qualcosa in più sulla gestione delle sessioni e dei cookie perchè penso sia questo il problema.. se qualcuno ha per caso una valida guida dettagliata sugli argomenti sarei felice di vederla.
Grazie buona giornata.
 

Discussioni simili