Visualizzazione risultati 1 fino 7 di 7

Discussione: [MySQL] Inserire E-mail

  1. #1
    Guest

    Predefinito [MySQL] Inserire E-mail

    Ho un problema: cercavo di fare un modulo di registrazione nel mio sito ma il Database non accetta i dati.
    Ecco il form:

    Codice HTML:
    <form name="form1" id="form1" method="POST" action="mail.php" onsubmit="return validazione(this)">
    Username: <input type="text" id="user" name="user"><br />
    Password: <input type="password" id="pass" name="pass"><br />
    E-Mail: <input type="text" name="mail" id="mail"><br />
    <input type="Submit" value="Registrati!"><br />
    </form>
    Non posto lo script che valida i campi perché quello funziona bene.

    Codice PHP:
    <?php
    $user
    =$_POST['user']; //Recupero le variabili
    $pass=$_POST['pass'];
    $mail=$_POST['mail'];

    $code=base64_encode(base64_encode($mail)."|".base64_encode($pass)."|".base64_encode($user)); //Costruisco il link per la registrazione
    $to=$_POST['mail'];
    $sub="Registrazione effettuata con successo";
    $site="http://kingdomheartsite.altervista.org";
    $mess="Ciao, grazie per esserti registrato al mio sito: $site. Qui sotto troverai il link di conferma per completare la registrazione, se è su più righe copialo e inseriscilo nel browser:

    $site/confirm.php?c=$code";
    $headers='From: noreply@kingdomheartsite.altervista.org' . "\r\n" .
    'Reply-To: noreply@kingdomheartsite.altervista.org' . "\r\n" .
    'X-Mailer: PHP/' .phpversion(); //Headers
    mail($to,$sub,$mess,$headers);
    echo
    "Registrazione Completata, clicca sul link che hai ricevuto nell'email. Alcuni provider potrebbero interpretarla come mail di spam";
    ?>
    In pratica prendo i valori dei campi poi codifico la password per sicurezza e anche la mail e insieme li metto nel codice che comporrà il link di conferma e sono codificati in modo che non ri riesca a risalire ai dati. Poi manda la mail. Il problema viene quando si va nella pagina "confirm.php".

    Codice PHP:
    <?php require("connect.php"); ?>
    <?php
    $code
    =$_GET['c'];
    $code=base64_decode($code);
    list(
    $mail,$pass,$user) = explode("|",$code);
    $mail=base64_decode($mail);
    $user=base64_decode($user);
    $pass=base64_decode($pass);
    $mail=mysql_real_escape_string($email);
    $user=mysql_real_escape_string($user);
    $pass=mysql_real_escape_string($pass);
    $sql='INSERT INTO Users (Id,Username,Password,Email) VALUES (NULL,'.$user.','.$pass.','.$mail.');';
    mysql_query($sql,$con) or die(mysql_error());

    ?>
    Recupero le variabili e le decodo poi nel database inserisco i due dati (nel file connect.php ci sono i dati della connessione) solo che quando clicco mi si apre una pagina bianca e se vado nel database non è stato inserito nulla.

    EDIT: Semi-risolto, ora con i valori non ha problemi solo che continua a darmi questo:
    Codice:
    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 ')' at line 1
    Sempre in confirm.php
    Ultima modifica di kingdomheartsite : 17-08-2010 alle ore 01.03.26

  2. #2
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,769

    Predefinito

    Perché l'id ha valore null?

    Se l'id incrementa da solo, cosa che spero hai messo, basta che modifichi la query in questo modo:
    Codice PHP:
    $sql='INSERT INTO Users (Username,Password,Email) VALUES ('.$user.','.$pass.','.$mail.');';
    Non so se lo sai, ma nelle query di inserimento non devi per forza inserire tutti i campi della tabella, ma solo i campi che vuoi valorizzare, infatti in questo caso non si inserisce il campo id visto che auto-incrementa, se come già detto prima hai messo.

    L'errore che viene stampato indica un'errore di sintassi, controlla anche se il nome della tabella e dei campi siano corretti.

    P.S.: ti ricordo, se non lo sai, che con null stai ad indicare che quel campo non ha nessun valore.

    P.P.S.: Che per caso usi la funzione base64_decode() per criptare i dati? se e cosi ti consiglio di utilizzare altri metodi, visto che con questo non cripti i dati ma li codifichi solamente, rendendo cosi i dati facili da trovare, infatti basta decodificarli per trovarli.
    Ultima modifica di sevenjeak : 17-08-2010 alle ore 09.35.16

    Sevenjeak
    Software developer and much more

  3. #3
    Guest

    Predefinito

    Citazione Originalmente inviato da sevenjeak Visualizza messaggio
    Perché l'id ha valore null?

    Se l'id incrementa da solo, cosa che spero hai messo, basta che modifichi la query in questo modo:
    Codice PHP:
    $sql='INSERT INTO Users (Username,Password,Email) VALUES ('.$user.','.$pass.','.$mail.');';
    Non so se lo sai, ma nelle query di inserimento non devi per forza inserire tutti i campi della tabella, ma solo i campi che vuoi valorizzare, infatti in questo caso non si inserisce il campo id visto che auto-incrementa, se come già detto prima hai messo.

    L'errore che viene stampato indica un'errore di sintassi, controlla anche se il nome della tabella e dei campi siano corretti.

    P.S.: ti ricordo, se non lo sai, che con null stai ad indicare che quel campo non ha nessun valore.

    P.P.S.: Che per caso usi la funzione base64_decode() per criptare i dati? se e cosi ti consiglio di utilizzare altri metodi, visto che con questo non cripti i dati ma li codifichi solamente, rendendo cosi i dati facili da trovare, infatti basta decodificarli per trovarli.
    Come posso criptarli? Comunque l'errore rimane solo che se scrivo la stessa query nel pannello di PhpMyAdmin funziona perché?

  4. #4
    Guest

    Predefinito

    Piuttosto eviterei di passare nome utente, mail e password via link per la conferma dell'account. Secondo me ti conviene creare un campo apposito nella tabella degli utenti dove viene inserito un codice generato casualmente alla registrazione, e questo codice viene mandato viene email all'utente al posto di username, password e email codificati in base64.

    Ah! il metodo più sicuro per salvare le passowrd degli utenti è usare md5:
    http://php.net/manual/en/function.md5.php
    Ultima modifica di payneitalia : 18-08-2010 alle ore 19.09.24

  5. #5
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,769

    Predefinito

    Non saprei, la sintassi delle query sembra corretta.

    Cmq, come scritto qui sopra puoi criptare i dati con la funzione md5 utilizzandola in queste due funzioni:

    http://forum.html.it/forum/showthrea...hreadid=786252

    Dovresti impostare una chiave per poi decriptare i dati, come puoi vedere anche nel link.

    P.S.: Prova sostituendo l'ultima riga con questo: mysql_query($sql) or die(mysql_error());, ma credo sia la stessa cosa.

    P.P.S.: scusa la domanda, ma hai verificato che valore ha la variabile $code dopo la sua decodifica, sei sicuro che il caratteri che te usi come separatore nell'explode esista nella stringa? hai verificato anche se le variabili che inserisci nella query siano state valorizzate prima d eseguire la query?
    Ultima modifica di sevenjeak : 18-08-2010 alle ore 17.37.28

    Sevenjeak
    Software developer and much more

  6. #6
    Guest

    Predefinito

    Grazie per il consiglio su come criptare, per l'errore ho risolto da solo:

    Questo è il codice attuale:
    Codice PHP:
    <?php
    require("connect.php");
    $code=$_GET['c'];
    $code=base64_decode($code);
    list(
    $mail,$pass,$user) = explode("|",$code);
    $mail=base64_decode($mail);
    $user=base64_decode($user);
    if(
    get_magic_quotes_gpc()) {
    $mail = stripslashes($mail);
    $pass = stripslashes($pass);
    $user = stripslashes($user);
    }
    $mail=mysql_real_escape_string($mail);
    $user=mysql_real_escape_string($user);
    $pass=mysql_real_escape_string($pass);
    //Verifico la presenza dell'username nel database
    $query = "SELECT * FROM Users WHERE Username='$user'";
    $result = mysql_query($query,$con);
    $verify = mysql_fetch_row($result);

    //Verifico la presenza della mail
    $query2 = "SELECT * FROM Users WHERE Mail='$mail'";
    $result2 = mysql_query($query2,$con);
    $verify2 = mysql_fetch_row($result2);
    if(
    $verify[0] >= 1) { //Verifico se l'username esiste nel database almeno una volta
    echo "Impossibile completare la registrazione: l'username ".$user." esiste già; scegline un altro!";
    echo
    '<a href="#" onclick="history.go(-1);return false;"><h3>Torna indietro</h3></a>';
    } else if(
    $verify2[0] >= 1) { //Verifico se l'e-mail esiste nel database almeno una volta
    echo "Impossibile completare la registrazione: qualcuno ha già efettuato la registrazione con l'e-mail ".$mail."; utilizzane un'altra!";
    echo
    '<a href="#" onclick="history.go(-1);return false;"><h3>Torna indietro</h3></a>';
    } else {
    $sql='INSERT INTO Users ( Username, Password , Mail ) VALUES ("'.$user.'", "'.$pass.'", "'.$mail.'");';
    mysql_query($sql) or die(mysql_error());
    }
    ?>
    Credo che mancavo degli apici, comunque ho aggiunto anche che controlla se già esistono i dati e la password viene mandata in md5.
    ?>

    --------------------

    Ora ho problemi con il login, scrivo qui per non aprire un nuovo topic. Ho cercato di inserire un login:

    Codice HTML:
    <form name="form2" id="form2" action="config.inc.php" method="post" onsubmit="return validalogi(this)">
    Username: <input type="text" name="usr" id="usr"><br />
    Password: <input type="password" name="pwd" id="pwd"><br />
    <input type="submit" value="Login"><br />
    </form>
    Questo è il form.

    Codice PHP:
    <?php
    session_start
    ();
    require(
    "connect.php");
    $usr = $_POST['usr'];
    $pwd = $_POST['pwd'];
    if (isset(
    $usr) && isset($pwd)) {
    $sql = "SELECT * FROM Users WHERE Username = '$usr' AND Password='md5($pwd)'";
    $result = mysql_query($sql,$con);
    if (
    mysql_num_rows($result)==0) {
    header('Location: login_fail.php');
    echo
    "Login fallito, Username o Password sono incorretti";
    echo
    "<br /> Clicca sul Link qui sotto per tornare indietro<br />";
    echo
    '<a href="#" onclick="history.go(-1);return false;"><h3>Torna Indietro</h3></a>';
    } else {
    $_SESSION['usr']=$usr;
    $_SESSION['pwd']=$pwd;
    header('Location: index.php');
    }
    } else {
    header('Location: login_fail.php');
    echo
    "Login Fallito, Non hai inserito i dati.";
    echo
    '<br /><a href="#" onclick="history.go(-1);return false;"><h3>Torna Indietro</h3></a>';
    }
    ?>
    Vorrei capire l'errore, sono abbastanza alle prime armi col php e anche se mi sono scervellato ore, non ho capito l'errore.
    Ultima modifica di andreafallico : 19-08-2010 alle ore 19.30.09

  7. #7
    L'avatar di andreafallico
    andreafallico non è connesso Super Moderatore
    Data registrazione
    02-06-2009
    Messaggi
    1,981

    Predefinito

    Visualizzi qualche errore?

    Inoltre nel db non salvi l'hash della password:
    Codice PHP:
    $sql='INSERT INTO Users ( Username, Password , Mail ) VALUES ("'.$user.'", "'.$pass.'", "'.$mail.'");';
    invece quando fai il controllo(con query sbagliata), utilizzi l'hash:
    Codice PHP:
    $sql = "SELECT * FROM Users WHERE Username = '$usr' AND Password='md5($pwd)'";
    query corretta
    Codice PHP:
    $sql = "SELECT * FROM Users WHERE Username = '$usr' AND Password = MD5('$pwd')";
    Ultima modifica di andreafallico : 20-08-2010 alle ore 12.17.19

Regole di scrittura

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