Ciao e grazie della risposta.. Il codice fornito e spiegato nella guida crea un database per la gestione di un blog, con inserimento di post solo da parte degli utenti aventi l'autorizzazione (presenti nella tabella login, con un certo username e una certa password) e possibilità di approvazione o "rifiuto" dei commenti inseriti dai visitatori. La parte che mi interessava principalmente era proprio l'accesso autorizzato solo ad alcuni, perché mi interesserebbe riproporlo in un mio progetto (sempre che riesca a realizzare le altre cose che mi piacerebbe inserire..). Se non ho capito male, l'inserimento dei post dovrebbe, appunto, essere consentito solo agli utenti amministratori che sono registrati nella tabella login.
Il problema è che non capisco l'utente già presente quale password abbia (perché criptata) né se inserendo un nuovo record debba funzionare. Credevo di sì, ma all'inserimento dello username e della password da me scelti, non compare il "modulo" per l'inserimento dell'articolo.
Il codice della pagina dedicata al login è il seguente:
Codice PHP:
<?php
// inizializzazione della sessione
session_start();
// se la sessione di autenticazione
// è già impostata non sarà necessario effettuare il login
// e il browser verrà reindirizzato alla pagina di scrittura dei post
if (isset($_SESSION['login']))
{
// redirect alla home page in caso di login mancato
header("Location: gestisci.php");
}
// controllo sul parametro d'invio
if(isset($_POST['submit']) && (trim($_POST['submit']) == "Login"))
{
// controllo sui parametri inviati
if( !isset($_POST['username']) || $_POST['username']=="" )
{
echo "Attenzione, inserire la username.";
}
elseif( !isset($_POST['password']) || $_POST['password'] =="")
{
echo "Attenzione, inserire la password.";
}else{
// validazione dei parametri tramite diltro per le stringhe
$username = trim(filter_var($_POST['username'], FILTER_SANITIZE_STRING));
$password = trim(filter_var($_POST['password'], FILTER_SANITIZE_STRING));
$password = sha1($password);
// inclusione del file della classe
include "funzioni_mysql.php";
// istanza della classe
$data = new MysqlClass();
// chiamata alla funzione di connessione
$data->connetti();
// interrogazione della tabella
$auth = $data->query("SELECT id_login FROM login WHERE username_login='$username' AND password_login='$password'");
// controllo sul risultato dell'interrogazione
if(mysql_num_rows($auth)==0)
{
// redirect alla home page in caso di insuccesso
header("Location: index.php");
}else{
// chiamata alla funzione per l'estrazione dei dati
$res = $data->estrai($auth);
// creazione del valore di sessione
$_SESSION['login'] = $res->id_login;
// chiusura della connessione a MySQL
$data->disconnetti();
// redirect alla pagina di amministrazione in caso di insuccesso
header("Location: gestisci.php");
}
}
}else{
// form per l'autenticazione
?>
<h1>Accesso all'amministrazione:</h1>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
Username:<br />
<input name="username" type="text"><br />
Password:<br />
<input name="password" type="password" size="20"><br />
<input name="submit" type="submit" value="Login">
</form>
<?
}
?>
Quello della pagina per l'inserimento del post è questo:
Codice PHP:
<?php
// inizializzazione della sessione
session_start();
// controllo sul valore di sessione
if (!isset($_SESSION['login']))
{
// reindirizzamento alla home page in caso di login mancato
header("Location: index.php");
}
// valorizzazione delle variabili con i parametri dal form
if(isset($_POST['submit'])&&($_POST['submit']=="Scrivi")){
if(isset($_POST['autore'])){
$autore = addslashes(filter_var($_POST['autore'], FILTER_SANITIZE_STRING));
}
if(isset($_POST['titolo'])){
$titolo = addslashes(filter_var($_POST['titolo'], FILTER_SANITIZE_STRING));
}
if(isset($_POST['testo'])){
$testo = addslashes(filter_var($_POST['testo'], FILTER_SANITIZE_STRING));
}
// inclusione del file della classe
include "funzioni_mysql.php";
// istanza della classe
$data = new MysqlClass();
// chiamata alla funzione di connessione
$data->connetti();
$t = "post"; # nome della tabella
$v = array ($titolo,$testo,$autore,date("Y-m-d")); # valori da inserire
$r = "titolo_post,testo_post,autore_post,data_post"; # campi da popolare
// chiamata alla funzione per l’inserimento dei dati
$data->inserisci($t,$v,$r);
echo "Articolo inserito con successo.";
// disconnessione
$data->disconnetti();
}else{
// form per l'inserimento
?>
<h1>Inserimento post:</h1>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
Titolo:<br>
<input name="titolo" type="text"><br />
Testo:<br>
<textarea name="testo" cols="30" rows="10"></textarea><br />
Autore:<br>
<input name="autore" type="text"><br />
<input name="submit" type="submit" value="Scrivi">
</form>
<?
}
?>
Ho come l'impressione di aver dimenticato/non aver notato un errore minuscolo che però non fa funzionare nulla, ma è il codice fornito nello .zip dall'autore..