• ModSenior

    A livello di sicurezza lo script è perfetto, per quanto riguarda la programmazione ad oggetti di norma si utilizza un framework per realizzare delle applicazioni che devono essere di una certa dimensione quindi sei legato all'organizzazione del framework.
    Fare un semplice login con la programmazione ad oggetti non ha poi molta utilità.


  • User Attivo

    @Thedarkita said:

    A livello di sicurezza lo script è perfetto, per quanto riguarda la programmazione ad oggetti di norma si utilizza un framework per realizzare delle applicazioni che devono essere di una certa dimensione quindi sei legato all'organizzazione del framework.
    Fare un semplice login con la programmazione ad oggetti non ha poi molta utilità.

    Il mio intento sarebbe quello di ricreare un semplice cms per adattarlo e migliorarlo da me, sia per utilizzarlo per piccole comunità, sia per continuare ad allenarmi con PHP..
    Da quanto letto in giro pare che programmando ad oggetti alla fine si ottiene un qualcosa di gestibile anche nel tempo.

    Certo per il solo login si potrebbe evitare, ma per fare quanto sopra, puoi quindi suggerirmi un framework semplice (per quanto possibile, o comunque documentato) che mi permette di fare quanto scritto (e magari in futuro ottenere aiuti anche qui in forum)?

    Grazie!


  • ModSenior

    Io preferisco CodeIgniter che è molto minimal, ma ce ne sono tanti che includono di base molte funzionalità.
    Per CodeIgniter trovi una guida in questa sezione, che non ho ancora completato ma per avere una panoramica iniziale direi che va bene.


  • User Attivo

    Proverò con sto framework..

    Soloun dubbio invece sulla risposta prima. Ieri ho trovato qui da qualche parte che i magicquotes in php5 avevano un altro codice.. Ma non ricordo dove l'ho trovata la discussione. Ricordi per caso di averne parlato qui in forum?

    E sai confermarmi se sia quel codice che quello vecchio funzionano ancora in php5?

    Grazie.


  • ModSenior

    Da php 5.4 la funzione get_magic_quotes_gpc restituisce sempre false, attualmente la funzione non è deprecata e non mi risulta sia deprecata neanche in php 5.5 che è attualmente alla versione alpha.
    Prima che venga rimossa dovrà passare allo stato di deprecated, per cui ancora per un bel pò quel semplice controllo è sufficiente.

    Se ci si vuole portare avanti col lavoro, nel caso in cui la funzione venga rimossa come sicuramente avverà prima o poi, si può controllare che la funzione esista prima di utilizzarla.
    Ripeto comunque che attualmente non è un'operazione necessaria.


  • User Attivo

    Ok allora vado tranquillo con questa.. Tanto in caso cambia qualcosa devo solo variare quel pezzetto..

    Grazie.


  • User Attivo

    Torno con una domanda.

    Mi hanno passato questa funzione per l'escape delle stringhe passate nei form:

    EscapeStr($str) { return addslashes(stripslashes(htmlentities(nl2br(urldecode($str))))); }

    Sai dirmi se è altrettanto valida come quella usata in questo post, meglio o peggio?

    Grazie!


  • ModSenior

    Fa un sacco di operazioni inutili per quanto riguarda le SQL INJECTION, poi bisogna vedere cosa si vuole ottenere.


  • User Newbie

    @Thedarkita said:

    Ho scritto un piccolo tutorial, una basilare area privata, con ovviamente registrazione e login.Manca la grafica visto che l'obiettivo era solo quello di dare le basi a chi si avvicina da poco al php.database[php]CREATE TABLE utenti (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,user TEXT NOT NULL ,pass TEXT NOT NULL ,mail TEXT NOT NULL) ENGINE = MYISAM ;[/php]config.phpindex.php[php]var NREUMQ=NREUMQ||[];NREUMQ.push(["mark","firstbyte",new Date().getTime()]);Tutorial by TheDarkITAMenu:

    if(!NREUMQ.f){NREUMQ.f=function(){NREUMQ.push(["load",new Date().getTime()]);var e=document.createElement("script");e.type="text/javascript";e.src=(("http:"===document.location.protocol)?"http:":"https:")+"//"+"rpm-images.newrelic.com/42/eum/rum.js";document.body.appendChild(e);if(NREUMQ.a)NREUMQ.a();};NREUMQ.a=window.onload;window.onload=NREUMQ.f;};NREUMQ.push(["nrfj","beacon-1.newrelic.com","1b473294f5","550561","M1QBYUMCDUAEWkRfWgoeNkdYTAVcF0xdGUMGQgZaHxMLQw==",0,77,new Date().getTime(),"","","","",""]);[/php]login.php[php]Login

    [/php]logout.php[php]LogoutLogout eseguito
    Vai all'index
    [/php]privata.php[php]registrati.php[php]registrato.php[php]Registrazione CompletaRegistrazione completa!

    Vai all'index
    [/php]Per i più pigri è possibile scaricare lo script completo a questo indirizzo scarica i file 😄

    Ciao, scusa l'ignoranza, ma se ho già fatto la Grafica, come faccio ad inserire il Login e il Register??
    se vuoi vai a vedere a questo sito: provaindexselux .altervista. org anche nel bottone Registrati.
    con la Grafica già fatta non so come fare..
    e sopratutto come farli separati il Login dal Register??
    perché il Login sta in una Pagina e il Register in un altra.
    Ripeto, se vuoi vedi con i tuoi Occhi: provaindexselux .altervista. org
    Così mi puoi aiutare meglio..
    Grazie in Anticipo.


  • User Newbie

    Salve a tutti,
    innanzittutto complimenti per il tutorial, mi è servito molto, era molto preciso e ben commentato, facile da capire anche per un novellino del php come me, piano piano sto riuscendo a personalizzarlo. Ho un problema però.
    In poche parole devo creare un'area riservata che abbia un amministratore e diversi clienti ( si spera ), i clienti però non possono registrarsi, è l'amministratore che registra i vari utenti una volta essere stato contattato.
    Entrando nello specifico, il cliente contatta l'amministratore e decide di affidarsi alle sue mani, l'amministratore registra tutti i dati nel suo database, una volta compilato il form viene mandata una mail di richiesta attivazione al cliente, e alla fine il cliente è registrato a tutti gli effetti. Ora il db ho pensato di strutturarlo con id, user, pass, active, permission (in caso do spiegazioni sull'utilità), gli altri dati quali referente, mail, indirizzo e roba varia sono in un'altra tabella del db dedicata ai soli dati e al quale accedo utilizzando il join.
    Tutto questo per dire che prima di inserire i campi active e permission la password veniva letta tranquillamente, ora quando inserisco user e password mi dice che è sono errati. Sono sicuro che sia la password perchè eliminando quel campo per accedere all'area riservata mi collego tranquillamente. Non sto sbagliando la password perchè per comodità e semplicità ne ho messo una stupidissima. Posto il codice. Credo che comunque venga fatto male il confronto tra la password inserita nel form di login e quella presente nel database.

    P.S. mi sono appena accorto che essendo nuovo non posso pubblicare codice


  • User Newbie

    Risolto, grazie comunque. Alla fine non ho capito quale fosse il problema, ho ricostruito il db allo stesso modo, ho inserito l'amministratore nello stesso modo, il codice era uguale però rifando tutto dall'inizio funziona.


  • User Newbie

    @Thedarkita said:

    .....Per i più pigri è possibile scaricare lo script completo a questo indirizzo 😄

    salve a ttutti, so che risale al 2009, ma qualcuno per caso ha lo script completo :)? grazie anticipatamente


  • User Newbie

    So che la discussione è vecchiotta però dopo varie modifiche vorrei qualche aiuto.

    Per prima cosa ho eliminato la pagina login.php, messo lo script e il form per il login nella mia index.
    Ora però vorrei che se si è loggati oltre mostrare "**Area Privata | Logout" **rimuovere il form per il login.

    Quindi se si è loggati il form sparisce e mostra solo il link per l'area privata e per il logout qualche aiuto?


  • User

    Ciao a tutti,
    so che è una discussione vecchia, ma l'ho appena riesumata. Ho un problema con la pagina login (e tutte le pagine che usano il comando header).
    Premetto che sono un neofita autodidatta... In pratica un disgraziato.
    Il problema è che non funziona il redirect. So che non dovrebbe esserci nessun output prima del comando header, infatti ho fatto una prova con il semplice header tra i tag php è funziona.

    Possibile che non ci sia una soluzione? Mi sembra impossibile? C'è qualche errore nelle pagine scritte da Thedarkita? Non posto i codici della pagina tanto sono assolutamente identici a quelli originali scritti. Ho solo modificato i nomi dei campi secondo le mie esigenze (dovevo adattarlo ad una tabella DB già esistente).

    Ulteriori info:
    Il login funziona, anche se non parte il redirect, se inserisco infatti a mano l'indirizzo della pagina index mi restituisce i link alla pagina "privata.php" e "logout.php". Anche la pagina logout funziona. La tabella è corretta (uso la stessa tabella per un'altra pagina, ma sto facendo delle prove su altri file per implementare in futuro il codice".

    Ciao e grazie


  • User Attivo

    Strano, io ricordo che funzionava bene, anche con i redirect (anche perché quello è il codice per avviarli).
    Stai usando un browser su desktop per i test, o uno smartphone (potrebbe non supportare i redirect...)?

    Sicuro che non ci sia alcun output? Anche, ad esempio, il tag "<html>" è già un output. Il file deve iniziare con <?php e non ci deve essere alcun echo, print e simili.


  • User

    Ciao Gigi991, grazie per la prontezza... Diciamo che sono sicuro non ci sia nessun output, ma potrei sbagliarmi, è un giorno è mezzo che mi ci arrovello sopra, per altri motivi, e quando si passa tanto tempo così sullo stesso codice è facile che scappino delle virgole... Magari provo a postare i codici delle pagine:

    pagina config.php

    
    <?php
    // avvio la sessione
    session_start();
    // Dati connessione al database
    $db_host = '********';
    $db_utente = '********';
    $db_password = '********';
    $db_nomedb = 'amminis3_cond';
    // Effettua la connessione al database
    $dbh=mysql_connect ($db_host, $db_utente, $db_password) or die (mysql_error());
    mysql_select_db($db_nomedb);
    ?>
    
    

    pagina login.php

    
    <?php
    // Includo la connessione al database
    require 'config.php';
    // Se il modulo viene inviato...
    if(isset($_POST['login']))
    {
    // Dati Inviati dal modulo. Metto nella variabile 'cf' il dato inviato dal modulo, di default uso ''
    $cf = (isset($_POST['cf'])) ? trim($_POST['cf']) : '';
    // Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza
    if (!get_magic_quotes_gpc()) {
    $cf = addslashes($cf);
    }
    // Controllo l'utente esiste
    $query = mysql_query("SELECT id FROM condominii WHERE cf = '$cf' LIMIT 1");
    // Se ha trovato un record
    if(mysql_num_rows($query) == 1) {
    // prelevo l'id dal database
    $login = mysql_fetch_array($query);
    // Creo una variabile di sessione
    $_SESSION['login'] = $login['id'];
    // reindirizzo l'utente
    header('Location: privata.php');
    //echo 'Hai inserito il codice fiscale '.$cf.', relativo all\'id '.$login['id'].'';
    exit;
    }
    // se non esiste da l'errore
    else
    die('Codice fiscale errato');
    }
    ?>
    <!DOCTYPE html PUBLIC etc...">
    <html xmlns="etc...">
    <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
    <title>Delli Carri | amministrazione immobili</title>
    <link href="../css/style.css" rel="stylesheet" type="text/css" />
    <link href="../css/menu.css" rel="stylesheet" type="text/css" />
    <script type="text/javascript" src="../js/jquery-1.11.0.min.js"></script>
    </head>
    <body id="home">
    <div id="container">
        <?php include '../menu.php' ?>
        <div id="condominii">
        <p>
            <br />
            Benvenuto! Tramite questa pagina sarà possibile raggiungere e visualizzare alcune informazioni relative al suo condominio. In particolare sarà possibile visualizzare il modulo relativo al trattamento dei dati sensibili.
            <br /><br />
            Per visualizzare le informzioni relative al suo condominio &egrave; necessario conoscere il codice fiscale del proprio condominio.
            <br /><br />
            Se conosce il codice fiscale lo inserisca qui sotto, altrimenti contatti il suo amministratore, anche tramite l'apposito modulo nella pagina "<a id="link" href="Vecchio/Mail/mail.php">contatti</a>"<br />
            <br /><br />
        </p>
    <form action="" method="post">
        <input name="cf" type="text" id="cf" value="Codice Fiscale" onfocus="if(this.value=='Codice Fiscale') this.value='';" /><br /><br />
        <input name="login" type="submit" id="login" value="Continua" /><br />
    </form>
        </div>
    </div>
    </body>
    </html>
    
    

  • User Attivo

    Certo, inserisci pure il codice. Ricordo i miei primi giorni su questo codice, anche per me non era semplice. 😄

    Prova ad aggiungere

    ob_start();

    subito dopo <?php


  • User

    Ciao Gigi, ho provato la tua soluzione (premesso che non conoscevo la funzione ob_start). Effettivamente, documentandomi poteva essere una soluzione. Purtroppo però il risultato è deludente. In caso di input errata (pwd o quel che sia sbagliato) tutto funziona e ricevo l'allert, in caso di input corretto si apre la pagina giusta, ma non recupera i dati dal database (cosa che invece prima faceva).

    Che barba!!


  • User

    Temo che il problema posso essere la pagina privata... Ora la ricontrollo bene, e a scanso di equivoci la posto qui sotto (ovviamente tagliata nelle parti inutili). Chissà che magari qualcuno trova l'errore prima di me e ci metto 1/4 del tempo a risolvere!

    Cmq con ob_start() tutti i redirect hanno ripreso a funzionare... GRAZIE!!!

    PS: L'HTML originale è sicuramente corretto, può darsi che nel fare i vari tagli per semplificare il codice possa aver fatto qualche casino. Il succo è che non mi

    [PHP]
    <?php
    ob_start();
    // Includo la connessione al database
    require('config.php');
    // Se non è stata definita la variabile manda l'utente alla homepage
    if(!isset($_SESSION['login'])) {
    header ('Location: index.php');
    exit;
    }
    ?>
    <!DOCTYPE html PUBLIC etc...">
    <html xmlns="etc...">
    <head>
    etc...
    </head>
    <body id="home">
    <div id="container">
    <?php include '../menu.php' ?>
    <div id="condominii">
    <?php
    $cf = $_POST['cf'];
    // Query per ottenere la lista utenti
    $query = "SELECT * FROM condominii WHERE cf = '$cf'";
    $result = mysql_query($query);
    $row = mysql_fetch_array($result);
    ?>
    <table style="width: 100%">
    <tr>
    <td>
    <br />
    </td>
    </tr>
    <tr>
    <td style="width: 328px">condominio <?php echo $row['nome']; echo "<br />"; ?><?php echo $row['indirizzo']; ?><br/>
    <?php echo $row['cap']; ?> <?php echo $row['citta']; ?> (<?php echo $row['provincia']; ?>)<br />Cod. Fisc. <?php echo $row['cf']; ?>
    </td>
    <td class="style3">
    <p>Codice per la Protezione dei Dati Personali</p>
    <span class="style4">Informativa sui trattamenti</span>
    </td>
    </tr>
    </table>
    <table style="width: 100%">
    etc... (il principio è uguale a sopra)
    </table>
    </div>
    </div>
    </body>
    </html>
    [/PHP]


  • User

    Posto qui la soluzione nel caso qualcuno riscontrasse i miei stessi problemi da novellino!

    1. Soluzione al redirect, come ci insegna il buon gigi991 è usare il comando [PHP]ob_start()[/PHP] subito dopo la chiamata [PHP]<?php[/PHP]

    2. Soluzione all'invio dell'input è modificare la pagina "login.php", ovvero nella porzione del form è meglio puntare direttamente alla pagina "privata.php" segue codice:

    [HTML]
    <form action="privata.php" method="post"> <input name="cf" type="text" id="cf" value="Codice Fiscale" onfocus="if(this.value=='Codice Fiscale') this.value='';" /><br /><br /> <input name="login" type="submit" id="login" value="Continua" /><br /></form>[/HTML]

    1. Rimandare tutti i controlli di sessione e login direttamente alla pagina "privata.php".

    Ciao a tutti e ancora grazie!