• User Newbie

    Pagina di registrazione

    Ciao a tutti!
    Dunque sono alle prime armi con il php e sql per cui vi chiedo cortesemente una mano :rollo:
    Ho creato una pagina di registrazione che va a inserire nella tabella Accounts tre campi: Id, Pw, e Email.

    Posto i 3 file che utilizzo al momento:

    registrazione.php:
    [html]<form name="elab.php" method="post" target="_top" action="elab.php" onsubmit="return WLSubmit(this)">

    <label>ID Account</label>
    <input type="text" name="id" id="id" size="250" />
    <label>Password</label>
    <input type="text" name="pw" id="pw" size="250"/>
    <label>Email</label>
    <input type="text" name="email" id="email" size="250"/>

    <input type="reset" value="Reset" />

    <input type="submit" value="INVIA" />

    </form>[/html]elab.php
    [php]<?php
    require_once("config.php");

    // Recupero i dati inseriti nel form proveniente dalla pagina registrazione.php

    $id = trim(htmlentities($_POST["id"]));
    $pw = trim(htmlentities($_POST["pw"]));
    $email = trim(htmlentities($_POST["email"]));

    // Creo la query sql per l'inserimento dati

    $sql = "INSERT INTO accounts (id, pw, email) VALUES ('$id', '$pw', '$email')";

    // eseguo la query e controllo che non mi restituisca errore

    if($result = mysql_query($sql))
    {
    $messaggio = "Si è verificato un errore nella fase di inserimento;<br /> I dati dell'utente non sono stati salvati.";
    }

    mysql_close($connessione);

    //reindirizzamento
    header("Location: paginaweb.php");
    ?> [/php]e config.php:
    [php]<?php
    $db_host = "";
    $db_user = "";
    $db_psw = "";
    $db_name = "";

    $connessione = mysql_connect ($db_host, $db_user, $db_psw) or die ("Connessione al server fallita");

    $db_select = mysql_select_db ($db_name, $connessione) or die ("Connessione con il DB fallita.");
    ?> [/php]:x Ecco i miei problemi:

    1)Dato che i campi "id" e "email" devono essere univoci, vorrei fare in modo che una query spulciasse il DB e successivamente visualizzasse un messaggio di errore nella pagina web*;* ad esempio "Account già esistente. Scegli un altro id".

    2)Si può fare in modo che i campi siano tutti e 3 obbligatori tramite una if?

    3)É possibile fare in modo che la registrazione sia completata tramite una conferma tramite email con il link x l'attivazione? (questa domanda è di secondaria importanza)

    Aspetto notizie 🙂 Grazie in anticipo x l'attenzione!! :ciauz:

    Mattia


  • User Attivo

    Ciao Matyu,
    dunque non ti offendere se faccio alcune osservazioni, ma penso che ne valga la pena:

    vorrei fare in modo che una query spulciasse il DB e successivamente visualizzasse un messaggio di errore nella pagina webRiguardo a questo punto ti consiglio di creare la tabella con una chiave primaria che consideri i campi id e email in modo che ogni coppia possa essere unica. Questo ti eviterebbe di eseguire il controllo con una query e dovresti eventualmente gestire l'eccezione nel caso ID O EMAIL esitano gia.

    Il secondo quesito:
    [php]
    if(!isset($_POST["id"]) || !isset($_POST["pw"]) || !isset($_POST["email"]))
    Restituisce l'errore;
    [/php]Il terzo:
    certo è possibile e PHP mette a disposizione una comoda funzione:** mail()

    link utile: php.html.it/articoli/leggi/917/email-in-formato-html-con-php/

    Ciao
    **


  • ModSenior

    Ciao matyu,

    Dai un occhiata qui.


  • User Newbie

    Grazie a tutti e 2!

    @mirkograti:"id" e "email" sono già campi segnalati come univoci nel DB, infatti se ne vado a creare uno uguale, nel DB non viene scritto nulla. a me interessa piu che altro il msg di errore che dice che l'id o l'email esistono già 🙂

    @Thedarkita: ora mi leggo bene quel post 🙂 (p.s. ti ho mandato un pm importante!!)


  • User Attivo

    Ciao Matyu,
    non basta che non scriva nel DB, dovrebbe restituirti un errore per chiave doppia o duplicata.

    Quindi se te intercetti l'eccezione puoi poi mostrare il messaggio che vuoi.
    tutto qui.

    Buona continuazione
    Ciao


  • User Newbie

    Grazie a voi ho risolto il tutto 🙂

    Avrei bisogno di altre 2 dritte hehe

    -Ci sarebbe modo di integrare una validazione di tipo captcha con il php? Ho provato già con vari script ma senza successo..

    Questa è la mia pagina di registrazione:

    [php]<?php
    // Includo la connessione al database
    require('config.php');

    // Se il modulo viene inviato...
    if(isset($_POST['registra']))
    {

    // Dati Inviati dal modulo
    $name = (isset($_POST['name'])) ? trim($_POST['name']) : '';    // Metto nella variabile 'name' il dato inviato dal modulo, se non viene inviato dò di default ''
    $password = (isset($_POST['password'])) ? trim($_POST['password']) : '';    // Metto nella variabile 'password' il dato inviato dal modulo, se non viene inviato dò di default ''
    $verificapw = (isset($_POST['verificapw'])) ? trim($_POST['verificapw']) : '';    // Metto nella variabile 'verificapw' il dato inviato dal modulo, se non viene inviato dò di default ''
    $mail = (isset($_POST['mail'])) ? trim($_POST['mail']) : '';    // Metto nella variabile 'mail' il dato inviato dal modulo, se non viene inviato dò di default ''
    
    // Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza
    if (!get_magic_quotes_gpc()) {
        $name = addslashes($name);
        $password = addslashes($password);
        $verificapw = addslashes($verificapw);
        $mail = addslashes($mail);
    }
    
    
    // Controllo il Nome Utente
    if(strlen($name) < 4 || strlen($name) > 12)
        die('Nome Utente troppo corto, o troppo lungo');
    // Controllo la password
    elseif(strlen($password) < 4 || strlen($password) > 12)
        die('Password troppo corta, o troppo lunga');
    // Controllo che la password sia corretta
    elseif(($verificapw) !=  ($password))
        die('Verifica della Password non riuscita');
    // Controllo l'email
    elseif(!eregi("^[a-z0-9][_\.a-z0-9-]+@([a-z0-9][0-9a-z-]+\.)+([a-z]{2,4})", $mail))
        die('Email non valida');
    // Controllo il nome utente non sia già occupato
    elseif(mysql_num_rows(mysql_query("SELECT name FROM account_data WHERE name = '$name' LIMIT 1")) == 1)
        die('Nome Utente non disponibile');
    // Controllo l'indirizzo email non sia già registrato
    elseif(mysql_num_rows(mysql_query("SELECT mail FROM account_data WHERE mail = '$mail' LIMIT 1")) == 1)
        die('Questo indirizzo email risulta gi&agrave; registrato ad un altro utente');
    // Registrazione dell'utente nel database
    else
    {
        
        // Crypt della password per garantire una miglior sicurezza
        $password = base64_encode($password);
        
        // Query per l'inserimento dell'utente nel database
        $strSQL = "INSERT INTO account_data (name,password,mail)";
        $strSQL .= "VALUES('$name', '$password', '$mail')";
        mysql_query($strSQL) OR die("Errore 003, contattare l'amministratore ".mysql_error());
        
    
        // Reindirizzo l'utente ad una pagina di conferma della registrazione
        header('Location: registrato.php');
        exit;
    }
    

    }
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "+++://+++.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="++++://+++.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Registrazione</title>
    </head>

    <body>

    <form action="" method="post">
    <input name="name" type="text" id="name" value="Nome Utente" onfocus="if(this.value=='Nome Utente') this.value='';" /><br />
    <input name="password" type="password" id="password" value="Password" onfocus="if(this.value=='Password') this.value='';" /><br />
    <input name="verificapw" type="password" id="verificapw" value="Password" onfocus="if(this.value=='Verifica Password') this.value='';" />
    <br />
    <input name="mail" type="text" id="mail" value="Email" onfocus="if(this.value=='Email') this.value='';" /><br />
    <input name="registra" type="submit" value="Registrati" /><br />
    </form>

    </body>
    </html>[/php]Grazie 😄


  • User Newbie

    **up 🙂
    **


  • User Attivo

    Ciao Matyu,
    dai un'occhiata qua: php.html.it/articoli/leggi/2276/captcha-con-php/

    dovrebbe essere proprio quello che cerchi.

    Buona Giornata