Questo è il codice della pagina in cui si verifica il problema
codice:
<?php
include 'header.inc.php';
$db = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD) or die('Unable to connect. Check your connection parameters.');
mysql_select_db(MYSQL_DB, $db);
if (isset($_SESSION['access_level']) && $_SESSION['access_level'] > 1) {
if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'search') {
$keyword = $_REQUEST['keyword'];
} else {
$keyword = '';
}
?>
<div id="navigation">
...
</div>
<div id="content">
<div id="tabs">
<ul>
<?php echo ($_SESSION['access_level'] == 3) ? '[*]Utenti' : ''; ?>[*]News
<?php echo ($_SESSION['access_level'] == 3) ? '[*]FAQ' : ''; ?>[/list]
<?php
if ($_SESSION['access_level'] == 3) {
?>
<div id="tabs-1">
Di seguito è riportata una tabella contenente la lista
degli utenti registrati sul sistema; ...
</p>
<table id="users_table">
<caption>
<div style="margin-bottom: 10px; text-align: right;">
<form id="search_form" action="cpanel.php#tabs-1" method="post">
<input class="text_field" type="text" name="keyword" size="30" autofocus/>
<input type="hidden" name="action" value="search" />
</form>
</div>
<?php
if (isset($_REQUEST['keyword']) && !empty($_REQUEST['keyword'])) {
$keyword = $_REQUEST['keyword'];
$query = 'SELECT
*
FROM
all_users
WHERE
first_name LIKE "%' . mysql_real_escape_string($keyword, $db) . '%" OR ' .
'last_name LIKE "%' . mysql_real_escape_string($keyword, $db) . '%" OR ' .
'email LIKE "%' . mysql_real_escape_string($keyword, $db) . '%"';
$result = mysql_query($query, $db) or die(mysql_error($db));
echo '<div>';
if (mysql_affected_rows($db) > 0) {
echo '
La ricerca per ' . $keyword . ' ha fornito i seguenti risultati...</p>';
} else {
echo 'La ricerca non ha fornito alcun risultato.';
echo '<tr><td colspan="6" style="text-align: center;">Nessun risultato</td></tr>';
}
echo '</div>';
} else {
$query = 'SELECT * FROM all_users';
$result = mysql_query($query, $db) or die(mysql_error($db));
}
?>
</caption>
<thead>
<tr>
<th class="id_column">ID</th>
<th>Cognome</th>
<th>Nome</th>
<th class="email_column">Email</th>
<th class="action_column">Azioni</th>
<th class="active_column">Attivo</th>
</tr>
</thead>
<tbody>
<?php
while ($row = mysql_fetch_array($result)) {
extract($row);
//costruisco la tabella
}
mysql_free_result($result);
?>
</tbody>
</table>
<?php
$query = 'SELECT COUNT(user_id) AS num_users FROM all_users';
$result = mysql_query($query, $db) or die(mysql_error($db));
$row = mysql_fetch_array($result);
?>
<div>
Sul sistema sono registrati un totale di <?php echo $row['num_users']; ?> utenti.</p>
</div>
</div>
<?php
}
?>
<div id="tabs-2">
Di seguito è riportata una tabella contenente la lista
delle news...
</p>
<table id="news_table">
<caption>
<div style="margin-bottom: 10px; text-align: right;">
<form id="search_form" action="cpanel.php#tabs-2" method="post">
<input class="text_field" type="text" name="keyword" size="30" autofocus/>
<input type="hidden" name="action" value="search" />
</form>
</div>
<?php
$query = 'SELECT
news_id, user_id, is_published, submit_date, publish_date, title, news_text
FROM
all_news ';
if ($_SESSION['access_level'] == 2) {
$query .= 'WHERE user_id = ' . $_SESSION['user_id'] . ' ';
}
$query .= 'ORDER BY news_id';
$result = mysql_query($query, $db) or die(mysql_error($db));
?>
</caption>
<thead>
<tr>
<th class="id_column">ID</th>
<th>Editore</th>
<th class="pub_column">Pubblicata</th>
<th class="saved_column">Salvataggio</th>
<th class="publi_column">Pubblicazione</th>
<th class="action_column">Azioni</th>
</tr>
</thead>
<tbody>
<?php
if (mysql_affected_rows() == 0) {
echo '<tr><td colspan="6" style="text-align: center;">Non ci sono news pubblicate</td></tr>';
} else {
while ($row = mysql_fetch_array($result)) {
extract($row);
// costruisco la tabella
}
}
mysql_free_result($result);
?>
</tbody>
</table>
<?php
if ($_SESSION['access_level'] == 3) {
$query = 'SELECT COUNT(user_id) AS num_news FROM all_news';
$result = mysql_query($query, $db) or die(mysql_error($db));
$row = mysql_fetch_array($result);
?>
<div>
Sul sistema sono salvate un totale di <?php echo $row['num_news']; ?> news.</p>
</div>
<?php
}
?>
</div>
<?php
if ($_SESSION['access_level'] == 3) {
?>
<div id="tabs-3">
Di seguito è riportata una tabella contenente la lista
delle faq...
</p>
<table id="faqs_table">
<caption></caption>
<thead>
<tr>
<th class="id_column">ID</th>
<th class="email_column">Email</th>
<th class="name_column">Nome</th>
<th class="action_column">Azioni</th>
</tr>
</thead>
<tbody>
<?php
$query = 'SELECT * FROM all_faqs';
$result = mysql_query($query, $db) or die(mysql_error($db));
if (mysql_affected_rows($db) == 0) {
echo '<tr><td colspan="6" style="text-align: center;">Non ci sono faq pubblicate</td></tr>';
} else {
while ($row = mysql_fetch_array($result)) {
extract($row);
// costruisco la tabella
}
?>
</tbody>
</table>
</div>
<?php
}
?>
</div>
</div>
<?php
} else {
redirect('index.php');
}
include 'footer.inc.php';
?>
il footer.inc.php non contiene nulla a parte del puro codice html mentre in header.inc.php c'è questo
codice:
<?php
session_start();
require 'utils/http_functions.php';
require 'utils/config.inc.php';
require 'utils/db.inc.php';
$db = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD) or die('Unable to connect. Check your connection parameters.');
mysql_select_db(MYSQL_DB, $db);
// controllo se la sessione è valida
if (isset($_SESSION['lifetime'])) {
if (time() - $_SESSION['lifetime'] > SESSION_TTL) {
// no
session_unset();
session_destroy();
// controllo se esiste il cookie
if (isset($_COOKIE['sito'])) {
// si, rigenero la sessione dal cookie
// estraggo le informazioni dal cookie
$email = $_COOKIE['sito'][0];
$password = $_COOKIE['sito'][1];
// recupero i dati da db
$query = 'SELECT
user_id, password, access_level, last_name
FROM
all_users
WHERE
MD5(email) = "' . mysql_real_escape_string($email, $db) . '" AND
MD5(password) = "' . mysql_real_escape_string($password, $db) . '" AND
is_active = TRUE';
echo $query;
$result = mysql_query($query, $db) or die(mysql_error($db));
if (mysql_num_rows($result) > 0) {
$row = mysql_fetch_array($result);
extract($row);
session_start();
$session_data = array(
'user_id' => $user_id,
'access_level' => $access_level,
'lifetime' => time()
);
$_SESSION = $session_data;
redirect($_SERVER['PHP_SELF']);
} else {
// le informazioni non sono corrette si deduce che è un accesso non autorizzato
$exp_date = time() - COOKIE_TTL;
setcookie('sito[0]', null, $exp_date);
setcookie('sito[1]', null, $exp_date);
redirect('error.php?from=home&errno=2');
}
} else {
// la sessione è scaduta e non è recuperabile
// redirezione alla pagina di errore [sessione scaduta]
redirect('error.php?from=home&errno=1');
}
}
// la sessione è ancora valida e quindi non faccio nulla
} else {
// la sessione non è valida
// controllo se esiste il cookie
if (isset($_COOKIE['sito'])) {
// si, rigenero la sessione dal cookie
// estraggo le informazioni dal cookie
$email = $_COOKIE['sito'][0];
$password = $_COOKIE['sito'][1];
// recupero i dati da db
$query = 'SELECT
user_id, password, access_level, last_name
FROM
all_users
WHERE
MD5(email) = "' . mysql_real_escape_string($email, $db) . '" AND
MD5(password) = "' . mysql_real_escape_string($password, $db) . '" AND
is_active = TRUE';
echo $query;
$result = mysql_query($query, $db) or die(mysql_error($db));
if (mysql_num_rows($result) > 0) {
$row = mysql_fetch_array($result);
extract($row);
session_start();
$session_data = array(
'user_id' => $user_id,
'access_level' => $access_level,
'lifetime' => time()
);
$_SESSION = $session_data;
redirect($_SERVER['PHP_SELF']);
} else {
// le informazioni non sono corrette si deduce che è un accesso non autorizzato
$exp_date = time() - COOKIE_TTL;
setcookie('sito[0]', null, $exp_date);
setcookie('sito[1]', null, $exp_date);
redirect('error.php?from=home&errno=2');
}
}
}
// faccio il refresh della sessione se ne esiste una valida
if (isset($_SESSION['lifetime'])) {
$_SESSION['lifetime'] = time();
}
?>
...
http_functions contiene una funzione che mi fa il redirect mentre config e db contengono solo delle define.
Ho cercato di essere il più conciso possibile nel postare il codice, scusate per la lunghezza, ma non volevo omettere dettagli che potevano rivelarsi fondamentali.