• User

    Premesso che dovresti leggerlo subito il libro, altrimenti non capisci una mazza!

    Si premette che tu abbia un database, con una tabella con i seguenti campi:
    -id_pagina
    -nome_pagina(univoco)
    -testo_pagina

    
    
    //dati per autenticarsi
    $db_Server = 'localhost';
    $db_Username = 'username';
    $db_Password = 'password';
    $db_DbDefault = 'db_1';
    
    //funzione per connettersi al database
    function db_connect(){
        global $db_Server, $db_Username, $db_Password, $db_DbDefault;
        global $MYSQL_ERRNO, $MYSQL_ERROR;
    
        $connection = mysql_connect($db_Server, $db_Username, $db_Password);
        if(!$connection){
            $MYSQL_ERRNO = 0;
            $MYSQL_ERROR = "Connessione fallita con il server $db_Server";
            return 0;
            }
        else if(empty($dbname) && !mysql_select_db($db_DbDefault)){
            $MYSQL_ERRNO = mysql_errno();
            $MYSQL_ERROR = mysql_error();
            return 0;
        }        
            
        else return $connection;
    }
    
    function sql_error(){
        global $MYSQL_ERRNO, $MYSQL_ERROR;
        if(empty($MYSQL_ERROR)){
            $MYSQL_ERRNO = mysql_errno();
            $MYSQL_ERROR = mysql_error();
        }
        return "$MYSQL_ERRNO: $MYSQL_ERROR";
          /* magari lanciare una pagina d'errore personalizzata e mandare una mail */
    
    }
    
    $connection = db_connect();
        if(!$connection) die(sql_error());
    
    if(!(isset($_GET['nome']))){
    //abbiamo sbagliato indirizzo vedi tu cosa vuoi fare
    }
    else if(isset($_GET['nome'])){
    $nome = $_GET['nome'];
    $result = mysql_query( "SELECT * FROM t_guide WHERE nome_pagina = '$nome'", $connection );
    [INDENT] 
    if(mysql_num_rows($result) < 1){
    //la pagina nn esiste a database quindi visualizza il form che lascio a te
    }
    else{
    $risultato_query = mysql_fetch_row($result);
    echo $risultato_query[2];
    }
    
    [/INDENT]
    }
    
    
    
    
    
    
    

    Poi devi creare un file .htacess con queste righe

    
    RewriteEngine On
    RewriteRule ^guide/([^/]+).html$ /link_alla_pagina_di_cui_sopra.php?nome=$1
     
    

    Non l'ho provato ma è una buona base da cui partire!!


  • User

    Quindi con sto codice creo una pagina guida.php e poi a Roma Napoli associo il link guida.php?id=id della guida
    giusto??? Se l' id non e presente lui lo crea con quel contenuto giusto???


  • User

    Puoi fare anche come hai detto tu con l'id e li il file htaccess non ti serve più e devi modificare il mio codice.


  • User

    Nooo, io voglio fare come dici tu ma voglio capire cosa ne devo fare di quel codice, cioe creo una pagina edit.php o guida.php giusto??? Adesso come faccio ad associare tutte le guide a questa pagina io pensavo di collegare a roma tipo guida.php?id=2 se era vuota mi conpariva il form per scrivere la guida altrimenti la visualizzavan


  • ModSenior

    Ciao ReferPoint,
    la cosa migliore è studiare un pò php, usare qualcosa di già fatto, o affidarsi a qualcuno che sà farlo, in quanto ad esempio il codice postato da Bonzetto è si funzionante per quel compito specifico, ma non si occupa minimamente della sicurezza sia per quanto riguarda l'autenticazione che per eventuali SQL Inejction, oltre problemi relativi alla configurazione di php (Con magic_quotes su OFF avresti problemi di SQL Inejction in questo caso, e nell'inserimento di apostrofi nelle frasi che mandarebbero in errore la query di inserimento).
    Anche realizzare qualcosa di semplice richiede determinate conoscenze per evitare problemi di vario tipo.
    E sopratutto nei libri non si tratta praticamente mai la sicurezza come si dovrebbe, sopratutto nei libri non recenti.


  • User

    Lo sò però cerca di capire che il lavoro prende abbastanza mente e tempo e un nuovo linguaggio non fa al caso mio dato che tenermi informato e migliorare 15 linguaggi mi rompe abbastanza (pascal tutti i c il mio python assembly, e' veramente ardua)


  • ModSenior

    Capisco che non tutti hanno il tempo, motivo per cui secondo me è molto migliore la scelta di utilizzare uno script completo realizzato da chi ha preso tutte le precauzioni del caso.
    Anche se studiando pochissime cose saresti già in grado di farlo quello che serve a te.
    Perchè rischieresti che chiunque ha un minimo di conoscenza di php riesce a modificarti le pagine, e non è proprio il massimo.


  • User

    Riusciresti??? Non so se è una cosa difficile o che richieda troppo tempo quindi se non puoi non fa alcuna differenza, al massimo mi indichi un altro metodo con qui affrontare il problema....boh...


  • ModSenior

    Intanto bisognerebbe vedere come hai fatto il login e l'iscrizione al sito, per vedere se va bene o meno.


  • User

    In che senso???


  • ModSenior

    Non hai detto di aver fatto la pagina di login ed iscrizione per gli utenti che devono scrivere le pagine?


  • User

    Io ho fatto login e iscrizione ma non solo per chi scrive ma per tutti....lo posto???


  • ModSenior

    Si, perchè dobbiamo vedere come aggiungere i permessi ad esempio di amministratore ad esempio per scrivere pagine.


  • User

    Login

    [PHP]<?php

    inizializzazione della sessione

    @session_start();

    inclusione del file di funzione

    @include_once 'functions.php';

    istanza della classe

    $obj = new Iscrizioni();

    chiamata al metodo per la verifica della sessione

    if ($obj->verifica_sessione())
    {

    redirect in caso di esito positivo

    @header("location:index.php");
    }

    chiamata al metodo per l'autenticazione

    if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $login = $obj->verifica_login(htmlentities($_POST['email_o_nome_utente'], ENT_QUOTES), htmlentities($_POST['password'], ENT_QUOTES));

    controllo sull'esito del metodo

    if ($login) {
    # redirect in caso di esito positivo
    @header("location:index.php");
    }else{
    # notifica in caso di esito negativo
    echo 'I dati indicati non sono corretti.';
    }
    }

    form per l'autenticazione

    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Pagina per l'autenticazione</title>
    <center><img src="Images/Logo.png" height="20%"/></center>
    </head>
    <body bgcolor="#FFFFCC">
    <center><img src="Images/italy.png"/><img src="Images/usa.png"/><image src="Images/france.png"/><image src="Images/brasil.png"/></center>

    <TABLE borderColor=0000CC bgcolor="CCFFFF" cellSpacing=0 cellPadding=10 width="35%" height="10%"
    align= center border=5 vspace="20">
    <tr><td>

    <div class="head"><center><h1>Login</h1></center></div>

    <center><div id="container">
    <div id="main-body">
    <form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>" id="form_autenticazione" name="autenticazione">
    <div class="head"><h1></h1></div>
    <label>Inserisci l'email o il nome utente</label><br/>
    <input type="text" name="email_o_nome_utente" /><br/>
    <label>Inserisci la password</label><br/>
    <input type="password" name="password" id="password" /><br/>
    <input type="submit" name="invio_dati" value="Invia"/><br/><br/>
    <label><a href="iscrizione.php" title="Registrazione">Se non sei registrato puoi farlo adesso</a></label>
    </form>
    </div>
    </div>
    </center>

    </td></tr></table>
    </body>
    </html>[/PHP]

    Iscrizione

    [PHP]<?php

    inclusione del file di funzione

    @include_once 'functions.php';

    istanza della classe

    $obj = new Iscrizioni();

    chiamata al metodo per la verifica della sessione

    if ($obj->verifica_sessione())
    {
    #redirect in caso di esito negativo
    @header("location:index.php");
    }

    chiamata al metodo per la registrazione

    if ($_SERVER["REQUEST_METHOD"] == "POST")
    {
    $registrato = $obj->registra(htmlentities($_POST['nome_reale'], ENT_QUOTES), htmlentities($_POST['nome_utente'], ENT_QUOTES), htmlentities($_POST['password'], ENT_QUOTES), htmlentities($_POST['email'], ENT_QUOTES));

    controllo sull'esito del metodo

    if ($registrato) {
    # notifica in caso di esito positivo
    echo 'Registrazione conclusa <a href="login.php">ora puoi loggarti</a>.';
    }else{
    # notifica in caso di esito negativo
    echo 'Stai cercando di registrarti con dei dati giá presenti nel database.';
    }
    }

    form per l'iscrizione

    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Pagina per la registrazione</title>
    <center><img src="Images/Logo.png" height="20%"/></center>
    </head>
    </head>
    <body bgcolor="#FFFFCC">
    <center><img src="Images/italy.png"/><img src="Images/usa.png"/><image src="Images/france.png"/><image src="Images/brasil.png"/></center>

    <TABLE borderColor=0000CC bgcolor="CCFFFF" cellSpacing=0 cellPadding=10 width="35%" height="25%"
    align= center border=5 vspace="20">
    <tr><td>
    <center><div id="container">
    <div id="main-body">
    <form id="register" method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>" id="form_registrazione" name="registrazione">
    <div class="head"><h1>Registrazione iscritti</h1></div>
    <label color="yellow">Nome</label><br/>
    <input type="text" name="nome_reale" /><br/>
    <label>Nome utente</label><br/>
    <input type="text" name="nome_utente" /><br/>
    <label>Password</label><br/>
    <input type="password" name="password" /><br/>
    <label>Il tuo indirizzo di posta elettronica</label><br/>
    <input type="text" name="email" id="email" /><br/><br/>
    <input type="submit" name="registra" value="Registrami"/><br/><br/>
    <label><a href="login.php" title="Login">Se sei gi&agrave registrato puoi loggarti da qui</a></label>
    </form>
    </div>
    </div>
    </center>

    <link rel="stylesheet" type="text/css" href="/style.css" />
    <style type="text/css">

    </body>
    </html>[/PHP]

    Funzioni

    [PHP]<?php

    inclusione del file di configurazione

    @include_once 'config.php';

    definizione della classe che conterrà i metodi per la gestione degli iscritti

    class Iscrizioni {

    definizione del costruttore

    public function __construct()
    {
    # istanza della classe per la connessione al database
    $data = new DATA_Class();
    }

    metodo per la registrazione

    public function registra($nome_reale, $nome_utente, $password, $email)
    {
    # cifratura della password
    $password = @sha1($password);
    # confronto degli input con i dati contenuti in tabella
    $query = @mysql_query("SELECT id_utente FROM iscritti WHERE nome_utente = '$nome_utente' OR email = '$email'") or die('Errore: ' . mysql_error());
    # controllo sulla presenza di corrispondenze prodotte dal confronto
    $conta = @mysql_num_rows($query);
    # se il confronto non genera corrispondenze..
    if ($conta == 0)
    {
    # ..si procede con la registrazione..
    $risultato = @mysql_query("INSERT INTO iscritti(nome_utente, password, nome_reale, email) VALUES ('$nome_utente', '$password','$nome_reale','$email')") or die('Errore: ' .mysql_error());
    return $risultato;
    }else{
    # ..altrimenti l'esito della registrazione sarà negativo
    return FALSE;
    }
    }

    metodo per l'autenticazione

    public function verifica_login($email_o_nome_utente, $password)
    {
    # cifratura della password
    $password = @sha1($password);
    # confronto degli input con i dati contenuti in tabella
    $query = @mysql_query("SELECT id_utente FROM iscritti WHERE email = '$email_o_nome_utente' OR nome_utente='$email_o_nome_utente' and password = '$password'") or die('Errore: ' . mysql_error());
    # controllo sulla presenza di una corrispondenza prodotta dal confronto
    $conta = @mysql_num_rows($query);
    # se il confronto genera una corrispondenza..
    if ($conta == 1)
    {
    # ..viene generata la sessione di login..
    $risultato = @mysql_fetch_object($query);
    $_SESSION['login'] = true;
    $_SESSION['id_utente'] = $risultato->id_utente;
    return TRUE;
    }else{
    # ..altrimenti l'esito dell'autenticazione sarà negativo
    return FALSE;
    }
    }

    metodo per la visualizzazione del nome dell'utente loggato

    public function mostra_utente($id_utente)
    {
    # estrazione del nome reale sulla base dell'identificatore memorizzato in sessione
    $query = @mysql_query("SELECT nome_reale FROM iscritti WHERE id_utente = $id_utente") or die('Errore: ' . mysql_error());
    $risultato = @mysql_fetch_object($query);
    # stampa a video del nome reale dell'utente
    echo $risultato->nome_reale;
    }

    metodo per il controllo sulla sessione

    public function verifica_sessione()
    {
    # il metodo restituisce l'informazione relativa alla sessione a patto che questa sia stata inizializzata
    if(isset($_SESSION['login']))
    {
    return $_SESSION['login'];
    }else{
    return FALSE;
    }
    }

    metodo per il logout

    la sessione viene distrutta a seguito di uno specifico input dell'utente

    public function esci() {
    $_SESSION['login'] = FALSE;
    @session_destroy();
    }
    }
    ?>[/PHP]

    Ed il file delle configurazioni

    [PHP]<?php

    definizione delle costanti per l'autenticazione al DBMS

    define('DATA_HOST', '');
    define('DATA_UTENTE', '');
    define('DATA_PASS', '');
    define('DATA_DB', '');

    classe per l'interazione con il database

    class DATA_Class {

    definizione del costruttore

    function __construct() {
    # connessione al DBMS
    $connessione = @mysql_connect(DATA_HOST, DATA_UTENTE, DATA_PASS) or die('Errore nella connessione: ' . mysql_error());
    # selezione del database
    @mysql_select_db(DATA_DB, $connessione) or die('Errore dal database: ' . mysql_error());
    }
    }
    ?>[/PHP]


  • User

    Per capirlo c ho messo 3 ore....mah al massimo qualche guida completa magari in pdf???


  • ModSenior

    Basta modificare una impostazione del browser ed entri anche nelle pagine in cui dice che c'è il controllo e ti reindirizza, per com'è realizzato lo script attualmente.

    È realizzato con la programmazione ad oggetti, se devi realizzare una cosa semplice in tempi brevi forse ti conviene utilizzare qualcosa di più semplice.
    Qui avevo realizzato io un tutorial tempo fà:
    http://www.giorgiotave.it/forum/scripting-e-risorse-utili/83033-tutorial-area-privata.html

    Penso dovrebbe essere più facile da comprendere, grazie ai commenti, e non ci sono questo genere di errori.


  • User

    Riguardo ad un bel libro??? Perche' mi sembra che se voglio continuare prima o poi mi devo addentrare alla lettura quindi meglio subito.


  • ModSenior

    Non ho mai usato libri di php per cui non sò dirti più di tanto, in italiano non ce ne sono moltissimi, se capisci l'inglese non avrai problemi a trovarne uno buono.
    Cerca di evitare libri vecchi, in quanto non sono più molto validi.

    Qui trovi delle risorse utili per imparare.


  • User

    Il mio era una base da cui partire,l'ho anche scritto ..


  • ModSenior

    Si bonzetto non era per dire che il tuo suggerimento è sbagliato, ma per far notare che non basta mischiare 2 codici presi un pò sui libri e un pò sul forum per avere un applicazione perfetta senza problemi.
    Infatti come ho detto il tuo suggerimento fà il suo dovere, ma deve essere in grado di implementarlo e rendere il tutto sicuro non solo fare copia incolla.