Visualizzazione risultati 1 fino 9 di 9

Discussione: Registrazione utente

  1. #1
    socialcosplay non è connesso Neofita
    Data registrazione
    15-02-2013
    Messaggi
    7

    Unhappy Registrazione utente

    Salve a tutti, ho provato a fare una semplice registrazione per gli utenti.
    L' utente registrato viene aggiunto nella tabella "temp_members" per poi essere sposato nella tabella "members" tramite email e codice di attivazione.
    La password subisce un doppio processo di MD5, e prelevo la data di nascita con i select.
    Non compare nessun errore (o almeno così penso), ma intanto la registrazione non avviene. Potreste gentilmente aiutarmi? :s
    (Scusate se lo script non è eccezionale, ma non sono molto esperto)

    Codice PHP:
    <?php
    error_reporting
    (E_ALL);
    include(
    'inc/config.php');

    $key_reg=md5(uniqid(rand()));
    $username=$_POST['username'];
    $email=$_POST['email'];
    $md5password=$_POST['password'];
    $password=md5(md5($md5password));
    $name=$_POST['name'];
    $lastname=$_POST['lastname'];
    $nation=$_POST['nation'];
    $birth = $_POST['anno'] ."/". $_POST['mese'] ."/". $_POST['giorno'];


    // Insert data into database
    $sql="INSERT INTO temp_members(key_reg, username, email, password, name, lastname, nation, birth)VALUES('$key_reg', '$username', '$email', '$password', '$name', '$lastname' '$nation', '$birth')";
    $result=mysql_query($sql);

    if(
    $result){

    $to=$email;

    // Your subject
    $subject="Your confirmation link here";

    // From
    $header="from: SocialCosplay <socialcosplay@altervista.org>";

    // Your message
    $message="Your Comfirmation link \r\n";
    $message.="Click on this link to activate your account \r\n";
    $message.="http://socialcosplay.altervista.org/activation.php?passkey=$confirm_code";

    // send email
    $sentmail = mail($to,$subject,$message,$header);
    }

    // if not found
    else {
    echo
    "Not found your email in our database";
    }

    // if your email succesfully sent
    if($sentmail){
    echo
    "Your Confirmation link Has Been Sent To Your Email Address.";
    }
    else {
    echo
    "Cannot send Confirmation link to your e-mail address";
    }
    ?>

  2. #2
    L'avatar di alemoppo
    alemoppo è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,220

    Predefinito

    Prova a stampare $sql per vedere se i dati son corretti (se recupera i dati da $_POST).
    Se ancora è tutto ok, usa la mysql_error() per vedere dove è l'errore.

    Ah, quando recuperi i dati da $_POST, devi usare la mysql_real_escape_string() per evitare injection. {non è questa la causa del non funzionamento, però dovresti comunque farlo}.

    Ciao!
    Ultima modifica di alemoppo : 19-02-2013 alle ore 21.24.16

  3. #3
    socialcosplay non è connesso Neofita
    Data registrazione
    15-02-2013
    Messaggi
    7

    Predefinito

    alemoppo grazie mille per la rapida risposta, dopo aver usato la mysql_error(), ho capito cosa è che non andava.
    Codice PHP:
    $sql="INSERT INTO temp_members(key_reg, username, email, password, name, lastname, nation, birth)VALUES('$key_reg', '$username', '$email', '$password', '$name', '$lastname' '$nation', '$birth')";
    Tra '$lastname' e '$nation' non avevo inserito la virgola.

    Ah, quando recuperi i dati da $_POST, devi usare la mysql_real_escape_string() per evitare injection. {non è questa la causa del non funzionamento, però dovresti comunque farlo}.
    Si grazie mille, l' avevo letto in giro e volevo inserirlo successivamente, ma andando gradualmente e sopratutto non facendo errori. xD

    Grazie ancora.

  4. #4
    socialcosplay non è connesso Neofita
    Data registrazione
    15-02-2013
    Messaggi
    7

    Predefinito

    Non so se posso postare sempre in questo stesso Topic visto che avrei un problemino con il Login, quindi se dovessero esserci problemi, provvedo a cancellare il post.

    Allora espongo direttamente il problema sperando che qualcuno possa aiutarmi.

    Dopo ore di sudore e fatiche xD sono riuscito a scrivere queste righe di codice per il login
    Codice PHP:
    <?php
    error_reporting
    (E_ALL);
    include(
    'inc/config.php');

    $username=$_POST['username'];
    $password=$_POST['password'];

    $username = stripslashes($username);
    $username = mysql_real_escape_string($username);
    $md5password=mysql_real_escape_string($_POST['password']);
    $password=md5(md5($md5password));

    $sql="SELECT * FROM members WHERE username='$username' and password='$password'";
    $login=mysql_query($sql);

    $count=mysql_num_rows($login);

    if(
    $count==1){
    session_register("username");
    session_register("password");
    header("location:profile.php");
    }
    else {
    echo
    "Username e Password Errati";
    }

    ?>
    E nella pagina profile.php ho inserito:
    Codice PHP:
    <?php
    session_start
    ();
    session_register("username");
    ?>
    Ma non viene stampato nessun username, quindi a questo punto credo di non aver capito per nulla le sessioni. Come posso fare? Q_Q

  5. #5
    L'avatar di alemoppo
    alemoppo è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,220

    Predefinito

    dove è il comando per stampare l'username?

    In ogni caso, ti consiglio di usare gli array globali $_SESSION[].
    Codice PHP:
    <?php
    error_reporting
    (E_ALL);
    include(
    'inc/config.php');

    $username=$_POST['username'];
    $password=$_POST['password'];

    $username = stripslashes($username);
    $username = mysql_real_escape_string($username);
    $md5password=mysql_real_escape_string($_POST['password']);
    $password=md5(md5($md5password));

    $sql="SELECT * FROM members WHERE username='$username' and password='$password'";
    $login=mysql_query($sql);

    $count=mysql_num_rows($login);

    if(
    $count==1){
    $_SESSION['username'] = $username;
    $_SESSION['password'] = $password; //perché salvare la password???
    header("location:profile.php");
    }
    else {
    echo
    "Username e Password Errati";
    }

    ?>
    Inoltre occhio, che sei a rischio di sql injection.

    Ciao!
    Ultima modifica di alemoppo : 23-02-2013 alle ore 21.29.09

  6. #6
    socialcosplay non è connesso Neofita
    Data registrazione
    15-02-2013
    Messaggi
    7

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Codice PHP:
    $_SESSION['password'] = $password; //perché salvare la password???
    Visto che il login viene eseguito tramite username e password, non bisogna sfruttare entrambi per ricavare i dati di quello specifico utente una volta eseguito il login?

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Inoltre occhio, che sei a rischio di sql injection.
    Come mi consigli di fare? mysql_real_escape_string, stripslashes non bastano? Ho letto che sarebbero utili dei "controlli" per verificare se dentro un input c'è contenuto... Però se possibile vorrei avere conferma.

    Comunque il codice del file login.php sembra funzionare, quindi sono passato al profilo.php cercando di ricavare le informazioni tramite la sessione ma a quanto pare non ci riesco..
    (Ho provato in vari modi, però quelle che ho riportato sotto mi sembrano le più "sono vicino alla risposta")
    Codice PHP:
    <?php
    error_reporting
    (E_ALL);
    session_start();

    if(isset(
    $_SESSION['username'])) {
    $username = $_SESSION['username']; //prova1
    $_SESSION['username'] = $username; //prova2
    echo $username;
    } else {

    echo
    "Codice assolutamente errato T_T";
    }
    ?>
    Scusate se vi rubo del tempo prezioso, e grazie mille per il supporto che mi state offrendo (in questo caso un grazie mille ad alemoppo)
    Sto cercando di "apprendere" il più in fretta possibile così da non dover scomodare nessuno ogni volta xD
    Grazie ancora

  7. #7
    L'avatar di alemoppo
    alemoppo è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,220

    Predefinito

    Citazione Originalmente inviato da socialcosplay Visualizza messaggio
    Visto che il login viene eseguito tramite username e password, non bisogna sfruttare entrambi per ricavare i dati di quello specifico utente una volta eseguito il login?
    No: in linea di principio, potresti salvare anche soltanto una sessione del tipo:
    Codice PHP:
    $_SESSION['loggato']=1;
    Però conviene salvare qualcosa di più significativo, per individuare l'utente. Quindi o salvi l'id della riga del database dell'utente, o il suo nick.


    Citazione Originalmente inviato da socialcosplay Visualizza messaggio
    Come mi consigli di fare? mysql_real_escape_string, stripslashes non bastano? Ho letto che sarebbero utili dei "controlli" per verificare se dentro un input c'è contenuto... Però se possibile vorrei avere conferma.
    Sìsì, scusami: può essere che mi è andato all'occhio appena ho aperto il thread il codice della prima pagina, o comunque
    Codice PHP:
    $username=$_POST['username'];
    $password=$_POST['password'];
    Mi ha tratto in inganno .
    Per i controlli, se vuoi che l'utente scriva effettivamente qualcosa (e quindi non lasciare il campo bianco), devi fare dei controlli sulla lunghezza della stringa passata.

    Citazione Originalmente inviato da socialcosplay Visualizza messaggio
    Comunque il codice del file login.php sembra funzionare, quindi sono passato al profilo.php cercando di ricavare le informazioni tramite la sessione ma a quanto pare non ci riesco..
    )
    Codice PHP:
    <?php
    error_reporting
    (E_ALL);
    session_start();

    if(isset(
    $_SESSION['username'])) {
    $username = $_SESSION['username']; //prova1
    $_SESSION['username'] = $username; //prova2
    echo $username;
    } else {

    echo
    "Codice assolutamente errato T_T";
    }
    ?>
    la riga di //prova2 non ha senso (non è dannosa, ma è inutile). La $prova1 invece sì... e dovrebbe funzionare. Invece di
    Codice assolutamente errato T_T
    puoi mettere direttamente
    Prima devi loggarti!


    In ogni modo, non è necessario mettere in variabili locali il contenuto di $_SESSION: puoi leggere e scriverlo direttamente, quindi puoi benissimo fare:
    Codice PHP:
    session_start();
    if(isset(
    $_SESSION['username']))
    echo
    'Benvenuto, '.$_SESSION['username'];
    else
    echo
    'Prima devi loggarti...';
    Citazione Originalmente inviato da socialcosplay Visualizza messaggio
    così da non dover scomodare nessuno ogni volta xD
    Beh, il forum è fatto per questo; e non c'é niente di meglio di aiutare chi vuole veramente imparare (invece di quelli che presentano codici scopiazzati da più parti e chiedono di sistemarlo, non conoscendo nemmeno l'if).

    In definitiva, per il tuo problema non saprei: sei sicuro che il login.php funziona correttamente? Come lo hai verificato?

    Ciao!
    Ultima modifica di alemoppo : 24-02-2013 alle ore 13.19.26

  8. #8
    socialcosplay non è connesso Neofita
    Data registrazione
    15-02-2013
    Messaggi
    7

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Però conviene salvare qualcosa di più significativo, per individuare l'utente. Quindi o salvi l'id della riga del database dell'utente, o il suo nick.
    ...........
    In definitiva, per il tuo problema non saprei: sei sicuro che il login.php funziona correttamente? Come lo hai verificato?

    Allora dopo aver "combattuto" e aver visto varie guide sono arrivato a far funzionare il login, salvando tramite sessioni anche un codice significativo per ogni utente (ho utilizzato il codice di attivazione, che è diverso per ogni utente))

    Ciò che non ho capito bene è "session_register(valore)", però senza di questa non funziona, quindi credo che come dice il nome stesso "registri la sessione".

    Codice PHP:
    $sql="SELECT * FROM members WHERE username='$username' and password='$password'";
    $login=mysql_query($sql);
    $rows=mysql_fetch_array($login);

    $cod=$rows['3']; //Codice per identificare un utente

    if ($cod == NULL) $trovato = 0 ; //Se il codice è vuoto $trovato avrà valore 0
    else $trovato = 1; //altrimenti 1

    if($trovato === 1) {
    session_register('passkey');
    $_SESSION['passkey'] = $rows[1];
    $_SESSION['username'] = $username;
    header("location:profile.php");
    }
    else {
    echo
    "Username e/o Password Errati";
    }
    In profile.php se la sessione "passkey" non esiste si torna all' index altrimenti esegue una query che dovrebbe estrarre dalla riga se "passkey=$_SESSION[passkey]", purtroppo ciò ricevo è un "Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /membri/socialcosplay/profile.php on line 8"
    Conviene usare mysql_fetch_array o altre funzioni??


    Codice PHP:
    session_start();
    if(!
    session_is_registered('passkey')) {
    header("location:index.php");
    }
    else {
    $sql = "SELECT * FROM members WHERE passkey=$_SESSION[passkey]";
    $result=mysql_query($sql);
    while(
    $rows=mysql_fetch_array($result)){
    echo
    $rows['email'];
    }
    }
    --------
    PS. scusami se non ho risposto prima, ma non sto tanto bene
    Ultima modifica di socialcosplay : 26-02-2013 alle ore 20.58.43

  9. #9
    L'avatar di alemoppo
    alemoppo è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,220

    Predefinito

    Citazione Originalmente inviato da socialcosplay Visualizza messaggio
    Ciò che non ho capito bene è "session_register(valore)", però senza di questa non funziona, quindi credo che come dice il nome stesso "registri la sessione".
    Se fosse necessario utilizzare quella funzione, perché non lo hai fatto anche per $_SESSION['username']?

    Citazione Originalmente inviato da socialcosplay Visualizza messaggio
    Codice PHP:
    $sql = "SELECT * FROM members WHERE passkey=$_SESSION[passkey]";
    Per sostituire un valore di un array in una stringa con doppi apici, andrebbe usata la graffa, quindi dovrebbe essere:
    Codice PHP:
    $sql = "SELECT * FROM members WHERE passkey={$_SESSION[passkey]}";
    Anche se io di solito faccio una cosa come:
    Codice PHP:
    $sql = 'SELECT * FROM members WHERE passkey='.$_SESSION['passkey'];
    ah, se $_SESSION['passkey'] contiene una stringa, vanno messi gli apici nella query.

    Citazione Originalmente inviato da socialcosplay Visualizza messaggio
    Conviene usare mysql_fetch_array o altre funzioni??
    mysql_fetch_array() ritorna un array con valori sia associativi, sia numerici. Puoi usare mysql_fetch_assoc() che ritorna solo i valori associativi. (che te ne fai dei valori numerici? ).

    In ogni caso, se stai iniziando adesso ad interagire con mysql via PHP, ti consiglio di utilizzare mysqli, e non mysql, perché quest'ultima è diventata deprecata.
    In linea di massima, la differenza tra le due è circa aggiungere la i dopo "mysql".
    Quindi mysql_connect() diventa mysqli_connect(), mysql_query() diventa mysqli_query(), mysql_fetch_assoc() diventa mysqli_fetch_assoc() ecc ecc...

    Citazione Originalmente inviato da socialcosplay Visualizza messaggio
    PS. scusami se non ho risposto prima, ma non sto tanto bene
    Figurati... a parte che è interesse tuo portar avanti la discussione (e non mio :P), in ogni caso io non ricordo (quasi) mai le discussioni: entro e vedo se c'é qualcosa di nuovo a cui avevo risposto

    Ciao!
    Ultima modifica di alemoppo : 26-02-2013 alle ore 22.25.31

Regole di scrittura

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