Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di torrone
    Registrato dal
    Apr 2006
    residenza
    Padova
    Messaggi
    1,128

    come migliorare il codice

    salve, ora vi presento una piccola bozza sul codice per la registrazione di un utente, come lo migliorereste??.. Vorrei non far distinguere (nel nickname) le maiuscole dalle minuscole, come? (mi pare con la funzione ergi, am come la integro?) e per validare un indirizzo email invece?

    Codice PHP:
    <?php
    //qui sono presenti i parametri per la connessione
    include 'configurazione.php';

    if (
    $_POST[cmd] == FALSE) {

    echo 
    "<form action=\"$REQUEST_URI\" method=post>
    <table>
    <tr>
    <td>
    Nickname:
    </td>
    <td>
    <input type=text name=nickname>
    </td>
    </tr>
    <tr>
    <td>
    Password: 
    </td>
    <td>
    <input type='password' name='password'>
    </td>
    </tr>
    <tr>
    <td>
    Email:
    </td>
    <td>
    <input type=text name=email>
    </td>
    </tr>
    </table>
    </form>"
    ;

    } else {

    if (
    $_POST[email] == FALSE OR $_POST[nickname] == FALSE)

    {

    echo 
    "<table>
    <tr>
    <td>
    <font color=red>Tutti i campi sono obbligatori</font>
    </td>
    </tr>
    </table>"
    ;

    } else {

    mysql_query("INSERT INTO utenti
             VALUES (' ',
                     '" 
    $_POST[nickname] . "',
                     '" 
    $_POST[email] . "',
                     '" 
    $_POST[password] . "'");

    echo 
    "<table>
    <tr>
    <td>
    Ti sei iscritto correttamente!
    </td>
    </tr>
    </table>"
    ;

    }
    }

    ?>
    comè scritto ora, salva i dati nickname, password ed email così come vengono inseriti nel form, senza fare nessun controllo apparte se si sono compilati tutti i campi..

    già così come, come lo migliorereste?, poi come si potrebbero fare i controlli sulla password per esempio (per esempio la li scrive due volte e si controlla se è stata scritta nello stesso modo?)

    grazie!

  2. #2
    Utente di HTML.it L'avatar di M4rko
    Registrato dal
    Dec 2000
    Messaggi
    619
    Per gli array associativi, la chiave è una stringa è quindi va messa tra apici:

    $_POST[cmd] diventa $_POST['cmd'] e cosi via

    Per i controlli sulle variabili puoi utilizzare empty(), es:
    codice:
    if (empty($_POST['email'])) {
        echo 'Errore: il campo "E-mail" &egrave; obbligatorio';
    }
    Oltre che un controllo sulla lunghezza dei campi (con strlen() )

    Inoltre tutti i dati che arrivano dall'esterno ($_POST, $_GET e $_COOKIE) vanno filtrati prima di essere passati ad una query, onde evitare SQL Injection (utilizza mysql_escape_string() oppure mysql_real_escape_string() )

    Per evitare doppioni di nick nel database, verifica che non ci sia già lo stesso nick prima di fare la query di INSERT, con una query del tipo:
    codice:
    $sql = "
        SELECT id
        FROM utenti
        WHERE nickname LIKE '{$nickname}'
    ";
    $result = mysql_query($sql);
    if (mysql_num_rows($result) != 0) {
        echo 'Errore: nickname gi&agrave; inserito nel database';
    }
    else {
      // Avanti con la INSERT
    }
    (LIKE serve proprio a non discriminare tra maiuscole e minuscole)

    Per validare un'email puoi utilizzare una espressione regolare (vedi l'articolo su php.html.it, c'è proprio quell'esempio)

    Per il controllo della password, semplicemente verifica che le stringhe siano uguali:
    codice:
    if ($_POST['password'] != $_POST['conferma_password']) {
        echo 'Errore: ricontrolla la password';
    }
    Ovviamente la stringhe devono essere non vuote (verifica con empty() )

    Tutti hanno bisogno di credere in qualcosa.
    Io credo che mi farò un'altra birra.


  3. #3
    Utente di HTML.it L'avatar di torrone
    Registrato dal
    Apr 2006
    residenza
    Padova
    Messaggi
    1,128
    Originariamente inviato da M4rko
    Per gli array associativi, la chiave è una stringa è quindi va messa tra apici:

    $_POST[cmd] diventa $_POST['cmd'] e cosi via

    Per i controlli sulle variabili puoi utilizzare empty(), es:
    codice:
    if (empty($_POST['email'])) {
        echo 'Errore: il campo "E-mail" &egrave; obbligatorio';
    }
    Oltre che un controllo sulla lunghezza dei campi (con strlen() )

    Inoltre tutti i dati che arrivano dall'esterno ($_POST, $_GET e $_COOKIE) vanno filtrati prima di essere passati ad una query, onde evitare SQL Injection (utilizza mysql_escape_string() oppure mysql_real_escape_string() )

    Per evitare doppioni di nick nel database, verifica che non ci sia già lo stesso nick prima di fare la query di INSERT, con una query del tipo:
    codice:
    $sql = "
        SELECT id
        FROM utenti
        WHERE nickname LIKE '{$nickname}'
    ";
    $result = mysql_query($sql);
    if (mysql_num_rows($result) != 0) {
        echo 'Errore: nickname gi&agrave; inserito nel database';
    }
    else {
      // Avanti con la INSERT
    }
    (LIKE serve proprio a non discriminare tra maiuscole e minuscole)

    Per validare un'email puoi utilizzare una espressione regolare (vedi l'articolo su php.html.it, c'è proprio quell'esempio)

    Per il controllo della password, semplicemente verifica che le stringhe siano uguali:
    codice:
    if ($_POST['password'] != $_POST['conferma_password']) {
        echo 'Errore: ricontrolla la password';
    }
    Ovviamente la stringhe devono essere non vuote (verifica con empty() )

    grassie delle info!!!


  4. #4
    Utente di HTML.it L'avatar di torrone
    Registrato dal
    Apr 2006
    residenza
    Padova
    Messaggi
    1,128
    ecco qui un'altra bozzetta buttata ora!!

    mm.. mi sono appena accorto che non mi controlla bene l'indirizzo email

    cmq miglioramenti da fare??

    Codice PHP:
    <?php

    include 'configurazione.php';

    if (
    $_POST[iscrizione] == TRUE) {

    if (empty(
    $_POST['email']) OR empty($_POST['nickname']) OR empty($_POST['password']) OR empty($_POST['conferma_password']) OR empty($_POST['email'])) {

    if (empty(
    $_POST['nickname'])) {
    echo 
    'Non hai compilato il campo Nickname';
    }

    if (empty(
    $_POST['password'])) {
    echo 
    'Non hai compilato il campo Password';
    }

    if (empty(
    $_POST['conferma_password'])) {
    echo 
    'Non hai compilato il campo Conferma Password';
    }

    if (empty(
    $_POST['email'])) {

    echo 
    'Non hai compilato il campo Email';

    } else {

    ##cONTROLLO EMAIL##
    function controllo_email($email) {
    if(
    eregi("^([a-z0-9_\.-])+@(([a-z0-9_-])+\\.)+[a-z]{2,6}$"trim($email)))
    return 
    1;
    else
    return 
    0;
    }
    ####

    if(controllo_email($_POST['Email'])) {

    echo 
    "";

    } else {

    echo 
    "l'email Inserita non è corretta";

    }

    }

    } else {

    if (
    $_POST['password'] != $_POST['conferma_password']) {

    echo 
    'Le due password non corrispondono';

    } else {

    $nickname mysql_escape_string($_POST['nickname']);
    $password mysql_escape_string($_POST['password']);

    $sql "SELECT id FROM MI_utenti WHERE nickname LIKE '{$nickname}'";
    $result mysql_query($sql);

    if (
    mysql_num_rows($result) != 0) {

    echo 
    'Il Nickname scelto esiste già';

    } else {

    echo 
    "Ok";

    echo 
    "$nickname
    $password";

    }

    }

    }

    } else {

    echo 
    "<form action=\"$REQUEST_URI\" method=post>
    <table>
    <tr>
    <td>Nickname:</td>
    <td><input type=text name=nickname value='
    $_POST[nickname]'></td>
    </tr>
    <tr>
    <td>Password:</td>
    <td><input type='password' name='password'></td>
    </tr>
    <tr>
    <td>Conferma Password:</td>
    <td><input type='password' name='conferma_password'></td>
    </tr>
    <tr>
    <td>Email:</td>
    <td><input type=text name=email value='
    $_POST[email]'></td>
    </tr>
    <tr>
    <td colspan=2>
    <input type=hidden name=iscrizione value=attivo>
    <input type=submit value=Iscriviti>
    </td>
    </tr>
    </table>
    </form>"
    ;

    }

    ?>

  5. #5
    Utente di HTML.it L'avatar di torrone
    Registrato dal
    Apr 2006
    residenza
    Padova
    Messaggi
    1,128
    Originariamente inviato da M4rko

    Oltre che un controllo sulla lunghezza dei campi (con strlen() )
    come la uso questa funzione?? cioè come faccio a limitare a tot caratteri?? cio per esempio il nickname e la password devono essere lunghi massimo 10 caratteri, quindi minore/uguale a 10 ?

  6. #6
    allora...
    la funzione strlen() restituisce la lunghezza di una stringa... quindi se hai
    $abc=""ciao;
    strlen($abc); ti darà 4..

    per limitare la lunghezza di un campo potresti farlo direttamente dalla parte html... quindi dove hai necessità potresti inserire nei vari input l'attributo maxlength...
    esempio:

    <input type="text" name="nick" maxlength="20" />
    non potrò inserire più di 20 caratteri in questo input.. e di conseguenza non saranno passati più di 20 caratteri...

    all'inizio hai mancato gli apici..

  7. #7
    Utente di HTML.it L'avatar di M4rko
    Registrato dal
    Dec 2000
    Messaggi
    619
    codice:
    if (strlen($_POST['nickname']) > 10) {
        echo 'Errore - massimo 10 caratteri per il nickname';
    }
    else {
        // Tutto ok
    }
    I controlli vanno fatti SEMPRE lato server per garantirne la correttezza.

    I controlli lato client (utilizzando attributi html e/o un po di codice javascript) possono essere d'aiuto per migliorare l'aspetto finale e l'usabilità del form, ma è sbagliatissimo farci affidamento per quel che riguarda la sicurezza. Tutto ciò che arriva dal client è potenzialmente pericoloso e va controllato/filtrato lato server.

    Comunque questi controlli sugli input tendono a diventare una sfilza infinita di if/else, per cui può essere una buona idea appoggiarsi a qualche libreria (o farsene una propria) che ti semplifica la gestione del tutto. Per avere qualche (ottimo) spunto:
    http://php.html.it/articoli/leggi/90...one-a-oggetti/

    Tutti hanno bisogno di credere in qualcosa.
    Io credo che mi farò un'altra birra.


  8. #8
    se vuoi migliorare il codice abbandona la struttura tabellare per fare le pagine html

  9. #9
    oddio... neanke sotto tortura riusciranno a farmi fare un sito con le div

  10. #10
    Originariamente inviato da simone_20
    oddio... neanke sotto tortura riusciranno a farmi fare un sito con le div
    E' molto più semplice, più veloce e soprattutto molto più accessibile e usabile.


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.