Visualizzazione risultati 1 fino 15 di 15
Like Tree4Likes
  • 1 Post By darbula
  • 1 Post By mzanella
  • 1 Post By mzanella
  • 1 Post By darbula

Discussione: Modulo registrazione utenti

  1. #1
    Guest

    Predefinito Modulo registrazione utenti

    Salve a tutti devo inserire nel mio sito un modulo di registrazione utenti piuttosto semplice:

    Nome Utente:
    Email:
    Password:
    Ripeti Password:

    questo è il campo del form:

    Codice HTML:
       <form name="form" action="registrazione.php" method="POST">
       <p>Nome Utente: <input type="text" name="nome"></p>
       <p>Email: <input type="email" name="mail"></p>
       <p>Password: <input type="password" name="pwd"></p>
       <p>Ripeti Password: <input type="password" name="conf_pwd"></p>
       <p><input type="submit" value="Registrati"></p>
      </form>
    questo invece è la pagina php che riceve i dati dal form:
    Codice PHP:
    <?php
    //recupero i dati dai campi del mio form
    $nome_utente = $_POST['nome'];
    $password = $_POST['pwd'];
    $email = $_POST['mail'];
    $conf_pwd= $_POST['conf_pwd'];
    //verifico che le due password siano entrambe corrette
    if ($pwd == $conf_pwd) {
    //eseguo la connessione
    $host = "localhost";
    $user = "sitodiprova1927";
    $pwd = "la password del mio profilo";
    $nome_db = "my_sitodiprova1927";
    $conn = mysql_connect($host, $user, $pwd);
    //Controllo se la connessione è riuscita
    if ($db == FALSE) die ("Errore nella connessione al DB");
    //seleziono il DB
    mysql_select_db($nome_db, $conn);
    //inserisco i dati
    $query = "INSERT INTO 'nometabella' ('ID', 'username', 'email', 'password') VALUES (NULL, '$nome_utente', '$email', '$password');
    $result = mysql_query($query, $conn);
    //controllo se l'inserimento è riuscito
    if (
    $result == FALSE) {
    print "
    Inserimento non riuscito";
    } else {
    print "
    Inserimento riusciuto!";
    }} else {
    print "
    Le 2 password non coincidono";
    }
    ?>
    Ora il problema 1 è che non riesco a connettermi al database, ogni volta che arrivo al punto
    della verifica di connessione nel file php mi da come risultato "Errore nella connessione al DB".
    Vi sarei molto grato se poteste aiutarmi grazie.

  2. #2
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,896

    Predefinito

    Semplicemente $db non esiste e php inizialmente le da valore null che poi lo trasforma in False per essere verificato dall'if.
    Teoricamente siccome non hai controllo su quando queste variabili siano definite dovresti verificare la loro esistenza (cioè puoi trovarti variabili dinamiche che esulano dalla tua programmazione).. isset($_POST['nome'],$_POST['mail']); // tutte e quattro eh.
    Poi cambi $db in $nome_db e nel finale di $query aggiungi un apice doppio..
    Mi togli una piccola curiosità? Di solito quando si ci riferisce ad un ID vuole dire che è un indice (un dato per informazioni su di esso) talvolta univoco ma non sempre.. Tu come mai lo imposti a null?
    Ultima modifica di darbula : 08-09-2017 alle ore 22.09.16

  3. #3
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    A quando detto da darbula aggiungo solo che le funzioni mysql_* sono deprecate, andrebbero usati mysqli o PDO, e che non dovresti memorizzare le password in chiaro (usa funzioni come password_hash).

    Mi togli una piccola curiosità? Di solito quando si ci riferisce ad un ID vuole dire che è un indice (un dato per informazioni su di esso) talvolta univoco ma non sempre.. Tu come mai lo imposti a null?
    A questo credo di poter rispondere anche io: spesso alla colonna ID in una tabella viene assegnato l'attributo AUTO_INCREMENT, che fa sì che un valore (univoco) venga generato automaticamente all'inserimento quando non specificato nella query (per intenderci: INSERT INTO my_table ('username', 'password') VALUES('...', '...')).
    Un modo alternativo (molto meno comune) per ottenere lo stesso effetto è passare NULL come valore ad un campo AUTO_INCREMENT. Non sono sicuro che funzioni su tutte le versioni di MySQL, anche per questo si preferisce non usare questo approccio, in favore del più semplice non passare alcun valore.

  4. #4
    Guest

    Predefinito

    grazie delle risposte siete stati molto utili e gentili,
    voi sareste in grado di farmi un esempio con uno script in php, ovviamente
    se è troppo complicato o dispendioso in termini di tempo non vi preoccupate.

    graze a darbula e mzanella .

    ps: Lo script php che ho linkato sopra l'ho preso da un post online
    Ultima modifica di sitodiprova1927 : 09-09-2017 alle ore 19.28.02

  5. #5
    Guest

    Predefinito

    ho aggiornato il file php ora il risultato è "inserimento non riuscito"

    Codice PHP:
    <?php
    //recupero i dati dai campi del form
    $nome_utente = $_POST['nome'];
    $password = $_POST['pwd'];
    $email = $_POST['mail'];
    $conf_pwd= $_POST['conf_pwd'];
    //verifico che le due password siano corrette
    if ($password == $conf_pwd) {
    //eseguo la connessione
    $host = "localhost";
    $user = "sitodiprova1927";
    $pwd = "la mia password";
    $nome_db = "my_sitodiprova1927";
    $conn = mysql_connect($host, $user, $pwd);
    //Controllo se la connessione è riuscita
    if ($nome_db == FALSE) die ("Errore nella connessione al DB");
    //seleziono il DB
    mysql_select_db($nome_db, $conn);
    //inserisco i dati
    $query = "INSERT INTO 'users' ('ID', 'username', 'email', 'password') VALUES (NULL, '$nome_utente', '$email', '$password') ";
    $result = mysql_query($query, $conn);

    //controllo se l'inserimento è riuscito

    if ($result == FALSE) {
    print
    "inserimento non riuscito";
    } else {
    print
    "Inserimento riusciuto!";
    }} else {
    print
    "Le 2 password non coincidono";
    }
    ?>
    Ultima modifica di sitodiprova1927 : 09-09-2017 alle ore 19.50.31

  6. #6
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,896

    Predefinito

    Ops. Scusa ho fatto una svista :D.. devi controllare la connessione non il nome del database... Cambia $nome_db in $conn..
    Preferisco indicarti la logica più che il codice bello è pronto.. (Così impari a seguire una tua logica anche quando fai il solo copia).
    Nel database hai creato una tabella di nome users?
    if ($result == FALSE) {
    print "inserimento non riuscito ". mysql_error();
    }
    Ultima modifica di darbula : 09-09-2017 alle ore 21.37.32

  7. #7
    Guest

    Predefinito

    Grazie pensandoci è sicuramente meglio la logica al copia e incolla,
    comunque nel database ho creato una tabella chiamata users con 4 campi id, username, email e password
    impostati nella maniera seguente:
    Campo “id” [ INT, auto_incement, primary ]
    Campo “username” [VARCHAR, 255]
    Campo “password” [VARCHAR, 255]
    Campo “email” [VARCHAR, 255]

    ora il risultato quando provo a registrare un utente è questo:
    inserimento non riuscito You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''users' ('ID', 'username', 'email', 'password') VALUES (NULL, 'francesco', 'emai' at line 1

    il codice della pagina php aggiornato è questo
    Codice PHP:
    <?php
    //recupero i dati dai campi del form
    $nome_utente = $_POST['nome'];
    $password = $_POST['pwd'];
    $email = $_POST['mail'];
    $conf_pwd= $_POST['conf_pwd'];
    //verifico che le due password siano corrette
    if ($password == $conf_pwd) {
    //eseguo la connessione
    $host = "localhost";
    $user = "sitodiprova1927";
    $pwd = "la password del mio profilo";
    $nome_db = "my_sitodiprova1927";
    $conn = mysql_connect($host, $user, $pwd);
    //Controllo se la connessione è riuscita
    if ($conn == FALSE) die ("Errore nella connessione al DB");
    //seleziono il DB
    mysql_select_db($nome_db, $conn);
    //inserisco i dati
    $query = "INSERT INTO 'users' ('ID', 'username', 'email', 'password') VALUES (NULL, '$nome_utente', '$email', '$password') ";
    $result = mysql_query($query, $conn);

    //controllo se l'inserimento è riuscito

    if ($result == FALSE) {
    print
    "inserimento non riuscito ". mysql_error();
    } else {
    print
    "Inserimento riusciuto!";
    }} else {
    print
    "Le 2 password non coincidono";
    }
    ?>
    GRAZIE
    Ultima modifica di sitodiprova1927 : 10-09-2017 alle ore 13.58.12

  8. #8
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,896

    Predefinito

    Prego mi fa piacere che la pensi come me.. Devi modificare l'if come ti ho indicato prima , perché in base l'errore posso creare una mia logica.
    PS.. Si i tuoi campi sono creati nel modo giusto
    Ultima modifica di darbula : 10-09-2017 alle ore 14.01.33

  9. #9
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,896

    Predefinito

    Significa errore di stringa non consentita in MySQL (c'è qualche apice singolo in più)
    I campi numerici (interi o double) sono senza apici in MySQL (anche in php) .. Tieni presente che una query non è altro che un mezzo di comunicazione con MySQL (SQL linguaggio query).
    Ps. Prova inserendo la doppia sequenza di apici singoli al posto di NULL
    Ultima modifica di darbula : 10-09-2017 alle ore 14.29.37
    sitodiprova1927 likes this.

  10. #10
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''users' [...]
    Come suggerito dal messaggio d'errore, il problema è nel nome della tabella. Non va racchiuso tra apici singoli, puoi scegliere se lasciarlo "libero":
    Codice:
    INSERT INTO users (username, email, password) VALUES ('$nome_utente', '$email', '$password')
    oppure racchiuderlo tra backquotes, apici "al contrario", che nella tastiera italiana non sono presenti:
    Codice:
    INSERT INTO `users` (username, email, password) VALUES ('$nome_utente', '$email', '$password')
    Poiché la colonna ID è una AUTO_INCREMENT, non è necessario specificare un valore NULL per l'inserimento, omettendone il valore MySQL farà quello che deve fare automaticamente.

    Non dimenticare di non memorizzare le password in chiaro, usa piuttosto password_hash.

    Edit: corretto un errore di sintassi.
    Ultima modifica di mzanella : 10-09-2017 alle ore 19.19.57
    sitodiprova1927 likes this.

  11. #11
    Guest

    Wink

    Buon pomeriggio a tutti e grazie a entrambi per l'aiuto,
    ho provato con entrambi i suggerimenti che mi avete dato, ora ho inserito
    il codice corretto da mzanella quindi ho tolto gli apici dal nome della tabella e ho tolto 'id' e il valore NULL ora il risultato è il seguente errore di sintassi:

    inserimento non riuscito You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''username', 'email', 'password') VALUES ('francesco', 'emaildiprova@gmail.com', ' at line 1

    è possibile che devo togliere i doppi apici all'inizio e alla fine di $query?

    Codice PHP:
    <?php
    //recupero i dati dai campi del form
    $nome_utente = $_POST['nome'];
    $password = $_POST['pwd'];
    $email = $_POST['mail'];
    $conf_pwd= $_POST['conf_pwd'];
    //verifico che le due password siano corrette
    if ($password == $conf_pwd) {
    //eseguo la connessione
    $host = "localhost";
    $user = "sitodiprova1927";
    $pwd = "la mia password";
    $nome_db = "my_sitodiprova1927";
    $conn = mysql_connect($host, $user, $pwd);
    //Controllo se la connessione è riuscita
    if ($conn == FALSE) die ("Errore nella connessione al DB");
    //seleziono il DB
    mysql_select_db($nome_db, $conn);
    //inserisco i dati
    $query = "INSERT INTO users ('username', 'email', 'password') VALUES ('$nome_utente', '$email', '$password') ";
    $result = mysql_query($query, $conn);

    //controllo se l'inserimento è riuscito

    if ($result == FALSE) {
    print
    "inserimento non riuscito ". mysql_error();
    } else {
    print
    "Inserimento riusciuto!";
    }} else {
    print
    "Le 2 password non coincidono";
    }
    ?>
    GRAZIE ANCORA DEL VOSTRO TEMPO

    PS: mzanella appena riesco a farlo funzionare vado con password_hash

    PSS: darbula e mzanella ho già fatto questa domanda, ma gli apici doppi all'inizio e alla fine di $query li devo togliere?
    Ultima modifica di sitodiprova1927 : 11-09-2017 alle ore 13.46.09

  12. #12
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''username', 'email', [...]
    Questo mi era sfuggito, non vanno posti gli apici attorno ai nomi dell colonne (vanno invece lasciati attorno ai valori di tipo stringa):
    Codice:
    INSERT INTO users (username, email, password) VALUES ('$nome_utente', '$email', '$password')
    PSS: darbula e mzanella ho già fatto questa domanda, ma gli apici doppi all'inizio e alla fine di $query li devo togliere?
    No, vanno lasciati. Il motivo è che servono a definire la stringa che sarà usata come query.
    sitodiprova1927 likes this.

  13. #13
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,896

    Predefinito

    Ciao maznella e sitodiprova1927
    Storia .. Gli apici servono a delimitare delle stringhe ebbene la stringa non è altro che un testo (per php qualsiasi sequenza di ottetti di bit è testo) Per php la differenza tra numerico e stringa nasce dopo .. Questa sintassi utilizza dal più piccolo al più grande e solo in teoria (ma in pratica è inverso) tiene conto che un intero positivo sia più grande di un intero negativo (cioè da intero +min a -max (da 0 a +min o da -max a -1)) +min -max in teoria è uguale infinito mentre in pratica ha dei limitimi rappresentati dal sistema operativo es. Sistema operativo a 32 bit (int positivo da 0 a 2 elavato alla 31 - 1 o int negativo 2 elevato alla 31 a -1).. Dunque se originariamente una stringa possiede un valore numerico è giusto convertire da stringa a (int o double)
    Perché definisco int +min e int -max cioè invertiti rispetto al manuale? http://php.net/manual/en/reserved.constants.php non esiste solo l'intero con segno ma esiste anche l'intero senza segno (dunque se effettuassimo una conversione di un intero negativo in un intero senza segno il risultato è un valore maggiore cioè -max) per i calcoli anche php usa int negativo se eccede int positivo (sempre -max :D )
    echo '1';//output stringa 1
    echo 1;//output intero positivo 1
    php automaticamente converte da stringa in un intero (se non c'è un cast esplicito).
    Siccome con php stai costruendo una stringa query (SQL), cioè dunque una stringa php il cui output risulta una stringa SQL per MySQL.
    Apici per php
    $non_sql1 = 'ciao'; //output ciao
    $non_sql2 = "$non_sql1"; //output ciao
    Anche MySQL usa gli apici per delimitare le stringhe mentre per il nome del database, tabelle,campi usa l'apice inverso (backtick) e cioè questo `...
    mzanella grazie per la spiegazione di prima.
    Ultima modifica di darbula : 11-09-2017 alle ore 01.17.44
    sitodiprova1927 likes this.

  14. #14
    Guest

    Predefinito

    Grande ragazzi ho corretto il codice togliendo gli apici dai nomi dei campi come suggerito
    e ora funziona grazie ancora a entrambi, volevo domandarvi se conoscete una buona guida per
    l'utilizzo di MySQLi e PDO (ora sto seguendo questa guida) dato che ora dovrò creare la pagina di login e non ho la più pallida idea
    di come possa fare grazie.

    Grazie a entrambi del vostro aiuto e del vostro tempo.

  15. #15
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Se sai già utilizzare le funzioni mysql_* puoi passare a mysqli nella sua versione procedurale (non ad oggetti) in maniera quasi automatica, semplicemente consultando la documentazione delle funzioni che intendi usare.

    Altrimenti va bene più o meno qualunque guida, all'inizio sarà più che sufficiente imparare a connettersi, effettuare query ed elaborare i risultati.
    Aspetti più articolati (come i prepared statement, caldamente consigliati) possono venire in un secondo momento.

    Per quanto riguarda l'aspetto di algebra relazionale vero e proprio (il "testo" e la struttura delle singole interrogazioni), all'inizio ti basterà sapere come utilizzare SELECT ed INSERT INTO. Più avanti anche UPDATE e DELETE. Qualora dovessero servirti, anche le JOIN e relative varianti.
    A mio parere puoi evitare la parte di creazione e modifica delle tabelle in PHP: è molto più probabile che ti ritroverai a svolgere queste operazioni tramite PhpMyAdmin che non "a mano" tramite PHP. Al massimo puoi darci un'occhiata per capire meglio cosa significano i termini citati da PhpMyAdmin stesso (PRIMARY, KEY, UNIQUE, AUTO_INCREMENT ecc) e farti un'idea della sintassi usata.

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •