Roran
20-10-2011, 19:26
Sto provando la prima parte della guida php+mysql di html.it,ho copiato le varie parti di codice in file php correggendo alcuni piccoli errori che ho trovato man mano,il problema è che adesso sono arrivato ad un punto dove sembra tutto corretto ma se vado a provare il form di login mi esce questo errore: "Parse error: syntax error, unexpected ';', expecting T_FUNCTION in D:\xampp\htdocs\database\funzioni_mysql.php on line 94"
Per la prova ho prima creato il database lanciando il file run.php (la parte della creazione del database l'ho commentata perchè ho riutilizzato il file per creare le tabelle successivamente),ho creato le tabelle sempre con run.php ed infine ho caricato gestisci.php,ho inserito nome e password a caso ma dopo aver cliccato su "Login" mi esce l'errore che vi ho scritto sopra.
Vi posto il codice dei tre file che utilizzo:
funzioni_mysql.php
<?php
class MysqlClass
{
// parametri per la connessione al database
private $nomehost = "localhost";
private $nomeuser = "root";
private $password = "";
// nome del database da selezionare
private $nomedb = "mioblog";
// controllo sulle connessioni attive
private $attiva = false;
// funzione per la connessione a MySQL
public function connetti()
{
if(!$this->attiva)
{
if($connessione = mysql_connect($this->nomehost,$this->nomeuser,$this->password) or die (mysql_error()))
{
// selezione del database
$selezione = mysql_select_db($this->nomedb,$connessione) or die (mysql_error());
}
}else{
return true;
}
}
// funzione per la chiusura della connessione
public function disconnetti()
{
if($this->attiva)
{
if(mysql_close())
{
$this->attiva = false;
return true;
}else{
return false;
}
}
}
//funzione per l'esecuzione delle query
public function query($sql)
{
if(isset($this->attiva))
{
$sql = mysql_query($sql) or die (mysql_error());
return $sql;
}else{
return false;
}
}
//funzione per l'inserimento dei dati in tabella
public function inserisci($t,$v,$r = null)
{
if(isset($this->attiva))
{
$istruzione = 'INSERT INTO '.$t;
if($r != null)
{
$istruzione .= ' ('.$r.')';
}
for($i = 0; $i < count($v); $i++)
{
if(is_string($v[$i]))
$v[$i] = '"'.$v[$i].'"';
}
$v = implode(',',$v);
$istruzione .= ' VALUES ('.$v.')';
$query = mysql_query($istruzione) or die (mysql_error());
}else{
return false;
}
}
// funzione per l'estrazione dei record
public function estrai($risultato)
{
if(isset($this->attiva))
{
$r = mysql_fetch_object($risultato);
return $r;
}else{
return false;
}
}
?>
run.php:
<?php
// inclusione del file contenente la classe
include "funzioni_mysql.php";
// istanza della classe
$data = new MysqlClass();
// connessione a MySQL
$data->connetti();
// chiamata alla funzione per la creazione del database
//$data->query("CREATE DATABASE mioblog");
// creazione della tabella per il login
$data->query("CREATE TABLE `login` (
`id_login` INT( 1 ) NOT NULL AUTO_INCREMENT ,
`username_login` VARCHAR( 10 ) NOT NULL ,
`password_login` VARCHAR( 40 ) NOT NULL ,
PRIMARY KEY ( `id_login` ))");
// creazione della tabella per i post
$data->query("CREATE TABLE `post` (
`id_post` INT( 5 ) NOT NULL AUTO_INCREMENT ,
`titolo_post` VARCHAR( 255 ) NOT NULL ,
`testo_post` TEXT NOT NULL ,
`autore_post` VARCHAR( 30 ) NOT NULL ,
`data_post` DATE NOT NULL ,
PRIMARY KEY ( `id_post` ) )");
// creazione della tabella per i commenti
$data->query("CREATE TABLE `commenti` (
`id_commento` INT( 6 ) NOT NULL AUTO_INCREMENT ,
`id_post` INT( 5 ) NOT NULL ,
`autore_commento` VARCHAR( 30 ) NOT NULL ,
`testo_commento` TEXT NOT NULL ,
`data_commento` DATE NOT NULL ,
`approvato` ENUM( '0', '1' ) NOT NULL ,
PRIMARY KEY ( `id_commento` ) )");
// definizione delle variabili da passare alla funzione per l'inserimento dei dati
$t = "login"; // nome della tabella
$v = array ("admin",sha1("password")); // valori da inserire
$r = "username_login,password_login"; // campi da popolare
// chiamata alla funzione per l'inserimento dei dati
$data->inserisci($t,$v,$r);
// disconnessione
// disconnessione
$data->disconnetti();
?>
gestisci.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']))
{
// reindirizzamento alla homepage 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 di autenticazione 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 filtro 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)
{
// reindirizzamento alla homepage 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;
// disconnessione da MySQL
$data->disconnetti();
// reindirizzamento alla pagina di amministrazione in caso di successo
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>
<?php
}
?>
Per la prova ho prima creato il database lanciando il file run.php (la parte della creazione del database l'ho commentata perchè ho riutilizzato il file per creare le tabelle successivamente),ho creato le tabelle sempre con run.php ed infine ho caricato gestisci.php,ho inserito nome e password a caso ma dopo aver cliccato su "Login" mi esce l'errore che vi ho scritto sopra.
Vi posto il codice dei tre file che utilizzo:
funzioni_mysql.php
<?php
class MysqlClass
{
// parametri per la connessione al database
private $nomehost = "localhost";
private $nomeuser = "root";
private $password = "";
// nome del database da selezionare
private $nomedb = "mioblog";
// controllo sulle connessioni attive
private $attiva = false;
// funzione per la connessione a MySQL
public function connetti()
{
if(!$this->attiva)
{
if($connessione = mysql_connect($this->nomehost,$this->nomeuser,$this->password) or die (mysql_error()))
{
// selezione del database
$selezione = mysql_select_db($this->nomedb,$connessione) or die (mysql_error());
}
}else{
return true;
}
}
// funzione per la chiusura della connessione
public function disconnetti()
{
if($this->attiva)
{
if(mysql_close())
{
$this->attiva = false;
return true;
}else{
return false;
}
}
}
//funzione per l'esecuzione delle query
public function query($sql)
{
if(isset($this->attiva))
{
$sql = mysql_query($sql) or die (mysql_error());
return $sql;
}else{
return false;
}
}
//funzione per l'inserimento dei dati in tabella
public function inserisci($t,$v,$r = null)
{
if(isset($this->attiva))
{
$istruzione = 'INSERT INTO '.$t;
if($r != null)
{
$istruzione .= ' ('.$r.')';
}
for($i = 0; $i < count($v); $i++)
{
if(is_string($v[$i]))
$v[$i] = '"'.$v[$i].'"';
}
$v = implode(',',$v);
$istruzione .= ' VALUES ('.$v.')';
$query = mysql_query($istruzione) or die (mysql_error());
}else{
return false;
}
}
// funzione per l'estrazione dei record
public function estrai($risultato)
{
if(isset($this->attiva))
{
$r = mysql_fetch_object($risultato);
return $r;
}else{
return false;
}
}
?>
run.php:
<?php
// inclusione del file contenente la classe
include "funzioni_mysql.php";
// istanza della classe
$data = new MysqlClass();
// connessione a MySQL
$data->connetti();
// chiamata alla funzione per la creazione del database
//$data->query("CREATE DATABASE mioblog");
// creazione della tabella per il login
$data->query("CREATE TABLE `login` (
`id_login` INT( 1 ) NOT NULL AUTO_INCREMENT ,
`username_login` VARCHAR( 10 ) NOT NULL ,
`password_login` VARCHAR( 40 ) NOT NULL ,
PRIMARY KEY ( `id_login` ))");
// creazione della tabella per i post
$data->query("CREATE TABLE `post` (
`id_post` INT( 5 ) NOT NULL AUTO_INCREMENT ,
`titolo_post` VARCHAR( 255 ) NOT NULL ,
`testo_post` TEXT NOT NULL ,
`autore_post` VARCHAR( 30 ) NOT NULL ,
`data_post` DATE NOT NULL ,
PRIMARY KEY ( `id_post` ) )");
// creazione della tabella per i commenti
$data->query("CREATE TABLE `commenti` (
`id_commento` INT( 6 ) NOT NULL AUTO_INCREMENT ,
`id_post` INT( 5 ) NOT NULL ,
`autore_commento` VARCHAR( 30 ) NOT NULL ,
`testo_commento` TEXT NOT NULL ,
`data_commento` DATE NOT NULL ,
`approvato` ENUM( '0', '1' ) NOT NULL ,
PRIMARY KEY ( `id_commento` ) )");
// definizione delle variabili da passare alla funzione per l'inserimento dei dati
$t = "login"; // nome della tabella
$v = array ("admin",sha1("password")); // valori da inserire
$r = "username_login,password_login"; // campi da popolare
// chiamata alla funzione per l'inserimento dei dati
$data->inserisci($t,$v,$r);
// disconnessione
// disconnessione
$data->disconnetti();
?>
gestisci.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']))
{
// reindirizzamento alla homepage 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 di autenticazione 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 filtro 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)
{
// reindirizzamento alla homepage 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;
// disconnessione da MySQL
$data->disconnetti();
// reindirizzamento alla pagina di amministrazione in caso di successo
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>
<?php
}
?>