Visualizzazione risultati 1 fino 14 di 14

Discussione: Codice di conferma non funzionante in MySql

  1. #1
    Guest

    Predefinito Codice di conferma non funzionante in MySql

    Salve a tutti utenti! Lasciando in sospeso la pagina di registrazione, ho deciso di riprenderla come punto di riferimento. Solo che, c'è un problema: Io mi registro, il messaggio di email spedita viene visualizzato, clicco sul codice di conferma, ma non funziona D: Ecco qui il codice:
    Codice PHP:
    <?php

    if(!isset($_GET['passkey'])){

    if(!isset(
    $_POST['invia'])){
    echo
    '<form method="post" action="#" id="formregistrazione">

    <ul>

    <li><lable for="username">Username:</lable>
    <input type="text" name="nome" id="username">
    </li>

    <li><lable for="password1">Password:</lable>
    <input type="password" name="password1" id="password1">
    </li>

    <li><lable for="password2">Ripeti password:</lable>
    <input type="password" name="password2" id="password2">
    </li>

    <li><lable for="username">Username:</lable>
    <input type="text" name="username" id="username">
    </li>

    <li><lable for="email">Email:</lable>
    <input type="text" name="email" id="email">
    </li>

    </ul>

    <input type="submit" name="invia" id="registrati" value="Registrati">

    </form>'
    ;

    } else {


    include
    'config.php';


    $codice = md5(uniqid(rand()));


    $username = mysql_real_escape_string($_POST['username']);
    $password1 = mysql_real_escape_string($_POST['password1']);
    $password2 = mysql_real_escape_string($_POST['password2']);
    $email = mysql_real_escape_string($_POST['email']);


    if(
    $username == ""|| $email == ""){
    echo
    "Devi riempire tutti i campi";

    }elseif(
    $password1 == ""|| $password2 == ""){
    echo
    "Devi riempire tutti i campi";

    }elseif(
    $password1 != $password2){
    echo
    "Le password devono coincidere";

    } else{

    $recuperausermail = mysql_query("SELECT id FROM Utenti WHERE username = '$username' AND email = '$email'");
    $contausermail = mysql_num_rows($recuperausermail);


    if(
    $contausermail > 0){

    echo
    "Nome utente o email già disponibili.";

    } else {



    $inviautentitemp = mysql_query("INSERT INTO Utenti_tmp (Codiceconferma, Username, Password, Email) VALUES ('$codice','$username','$password1','$email')");

    if(
    $inviautentitemp){

    $to=$email;
    $subject="Conferma la registrazione.";
    $header="From: [email]die23@hotmail.it[/email]";
    $message="Ecco il tuo codice di attivazione \r\n";
    $message.="Clicca sul link per confermare la registrazione \r\n";
    $message.="http://www.italianwebhack.altervista.org/register.php?passkey=$codice";

    $sentmail=mail($to, $subject, $message, $header);



    }

    if(
    $sentmail){

    echo
    "Per completare la registrazione, clicca sul link che ti abbiamo inviato per email";
    } else{

    echo
    "Errore: Non ti è stato inviato nessun link di attivazione account";

    }
    }
    }
    }


    } else{


    $passkey = ($_GET['passkey']);

    $sqlrecuperauser = "SELECT * FROM Utenti_tmp WHERE (Codiceconferma = '$codice' Username = '$username' Password = '$password' AND Email = '$email')";
    $risultatouser = mysql_query($sqlrecuperauser);

    if(
    $risultatouser){

    $contauser = mysql_num_rows($risultatouser);

    if(
    $contauser == 1){


    $rows = mysql_fetch_array($risultatouser);
    $username = $rows['username'];
    $password = $rows['password'];
    $email = $rows['email'];



    $sqlconfermauser = "INSERT INTO Utenti (Username, Password, Email) VALUES ('$username','$password','$email')";

    if(
    $sqlconfermauser){

    echo
    "Il tuo account è attivato.";


    } else {

    echo
    "Il tuo account non è ancora attivo.";

    }
    }
    }
    }

    ?>
    Non capisco dove sbaglio! Ricevo l'email, clicco sul link di attivazione account e non funziona.. Dov'è che sbaglio? Grazie in anticipo a chi mi aggiusta il codice :)
    Ultima modifica di alemoppo : 04-01-2013 alle ore 00.41.21 Motivo: +tag [php]

  2. #2
    Guest

    Predefinito

    Credo che il problema sia
    Codice PHP:
    $sqlrecuperauser = "SELECT * FROM Utenti_tmp WHERE (Codiceconferma = '$codice' Username = '$username' Password = '$password' AND Email = '$email')";
    dovrebbe essere
    Codice PHP:
    $sqlrecuperauser = "SELECT * FROM Utenti_tmp WHERE (Codiceconferma = '$codice' AND Username = '$username' AND Password = '$password' AND Email = '$email')";
    P.S: usa il tag [PHP] per racchiudere il codice PHP, così si legge meglio.

  3. #3
    Guest

    Predefinito Problema registrazione in MySql

    No, guarda ho fatto come hai detto tu ma niente! I dati non li invia alla tabella Utenti e non mi da il messaggio dell'account attivo :(

  4. #4
    Guest

    Predefinito

    Codice PHP:
    $sqlrecuperauser = "SELECT * FROM Utenti_tmp WHERE (Codiceconferma = '$codice' AND Username = '$username' AND Password = '$password' AND Email = '$email')";
    $codice non esiste: l'hai chiamata $passkey
    Codice PHP:
    $sqlrecuperauser = "SELECT * FROM Utenti_tmp WHERE (Codiceconferma = '$passkey' AND Username = '$username' AND Password = '$password' AND Email = '$email')";

  5. #5
    Guest

    Predefinito

    Ancora niente :S Ho fatto 1000 tentativi ma non succede nulla! Sempre lo stesso errore.. L'email arriva ma il passkey non funziona non mi agttiva l' account

  6. #6
    Guest

    Predefinito

    Ok, allora, prima mi ero soffermato sul problema di cui parlavi, ma siccome non ti funziona ancora, ho voluto dare un'occhiata a tutto il codice (sono sempre orgxiiipu):
    Prima di tutto, nella form il tag corretto non si scrive "lable" ma "label". Poi, sempre nella form, il primo campo, cioè
    Codice HTML:
    <input type="text" name="nome" id="username">
    non lo utilizzi (il campo vero è quello dopo, con name="username").
    Codice PHP:
    if($inviautentitemp)
    $inviautentitemp è il risultato di una query, dovresti fare
    Codice PHP:
    if(mysql_affected_rows())
    per testare il successo di una INSERT.
    Il blocco if...else che inizia con
    Codice PHP:
    if($sentmail)
    dovrebbe essere prima della graffa, subito dopo
    Codice PHP:
    $sentmail=mail($to, $subject, $message, $header);
    La famosa SELECT che ti ho già corretto due volte in realtà è così:
    Codice PHP:
    $sqlrecuperauser = "SELECT * FROM Utenti_tmp WHERE Codiceconferma = '$passkey'";
    perché $username, $password e $email non esistono in quel punto.
    Codice PHP:
    if($risultatouser){

    $contauser = mysql_num_rows($risultatouser);

    if(
    $contauser == 1){
    Stessa cosa di prima, $risultatouser è un risultato, quindi basta solo
    Codice PHP:
    $contauser = mysql_num_rows($risultatouser);

    if(
    $contauser == 1){
    Inoltre ti ricordo che dovrai criptare la password, perché lasciarla in chiaro non va bene.

    EDIT:
    Anche
    Codice PHP:
    if($username == ""|| $email == ""){
    echo
    "Devi riempire tutti i campi";

    }elseif(
    $password1 == ""|| $password2 == ""){
    echo
    "Devi riempire tutti i campi";
    non è molto bello, puoi fare semplicemente
    Codice PHP:
    if($username == "" || $email == "" || $password1 == "" || $password2 == ""){
    echo
    "Devi riempire tutti i campi";

    }
    Ultima modifica di giochidicartenc : 03-01-2013 alle ore 17.15.21

  7. #7
    Guest

    Predefinito

    Guarda.. Sistemare gli errori e criptare la password è l' ultimo dei miei problemi visto che, una volta funzionante il codice, verrà riscritto nuovamente e senza errori xD cmq, ancora niente da fare.. ho fatto tutto quello che mi hai detto tu.. Ho riscritto ancora una volta il codice e fatto qualche mia modifica.. Eccolo qua:

    Codice PHP:
    <?php

    if(!isset($_GET['passkey'])){

    if(!isset(
    $_POST['invia'])){
    echo
    '<form method="post" action="#" id="formregistrazione">

    <ul>

    <li><label for="nome">Username:</lable>
    <input type="text" name="nome" id="nome">
    </li>

    <li><label for="password1">Password:</lable>
    <input type="password" name="password1" id="password1">
    </li>

    <li><label for="password2">Ripeti password:</lable>
    <input type="password" name="password2" id="password2">
    </li>

    <li><label for="username">Username:</lable>
    <input type="text" name="username" id="username">
    </li>

    <li><label for="email">Email:</lable>
    <input type="text" name="email" id="email">
    </li>

    </ul>

    <input type="submit" name="invia" id="registrati" value="Registrati">

    </form>'
    ;

    } else {


    include
    'config.php';


    $codice = md5(uniqid(rand()));


    $username = mysql_real_escape_string($_POST['username']);
    $password1 = mysql_real_escape_string($_POST['password1']);
    $password2 = mysql_real_escape_string($_POST['password2']);
    $email = mysql_real_escape_string($_POST['email']);


    if(
    $username == ""|| $email == ""){
    echo
    "Devi riempire tutti i campi";

    }elseif(
    $password1 == ""|| $password2 == ""){
    echo
    "Devi riempire tutti i campi";

    }elseif(
    $password1 != $password2){
    echo
    "Le password devono coincidere";

    } else{

    $recuperausermail = "SELECT id FROM Utenti WHERE username = '$username' AND email = '$email'";
    $contausermail = mysql_num_rows($recuperausermail);


    if(
    $contausermail > 0){

    echo
    "Nome utente o email già disponibili.";

    } else {



    $inviautentitemp = mysql_query("INSERT INTO Utenti_tmp (Codiceconferma, Username, Password, Email) VALUES ('$codice','$username','$password1','$email')");

    if(
    mysql_affected_rows()) {

    $to=$email;
    $subject="Conferma la registrazione.";
    $header="From: die23@hotmail.it";
    $message="Ecco il tuo codice di attivazione \r\n";
    $message.="Clicca sul link per confermare la registrazione \r\n";
    $message.="http://www.italianwebhack.altervista.org/register.php?passkey=$codice";

    $sentmail=mail($to, $subject, $message, $header);

    if(
    $sentmail){

    echo
    "Per completare la registrazione, clicca sul link che ti abbiamo inviato per email";
    } else{

    echo
    "Errore: Non ti è stato inviato nessun link di attivazione account";
    }
    }
    }
    }
    }


    } else{

    $passkey = ($_GET['passkey']);

    $sqlrecuperauser = "SELECT * FROM Utenti_tmp WHERE Codiceconferma = '$passkey'";

    $risultatouser = mysql_query($sqlrecuperauser);

    $contauser = mysql_num_rows($risultatouser);

    if(
    $contauser == 1){


    $rows = mysql_fetch_array($risultatouser);
    $username = $rows['username'];
    $password1 = $rows['password1'];
    $email = $rows['email'];



    $sqlconfermauser =mysql_query ("INSERT INTO Utenti (Username, Password, Email) VALUES ('$username','$password1','$email')");

    if(
    $sqlconfermauser){

    echo
    "Il tuo account è attivato.";

    } else {

    echo
    "Il tuo account non è ancora attivo.";

    }
    }
    }


    ?>
    Tutto fatto a modo tuo, e ancora niente! Questa è la prima volta che scrivo un codice con la conferma dell'email.. In passato ho fatto tutto senza email :S

  8. #8
    Guest

    Predefinito

    ho fatto tutto quello che mi hai detto tu
    Direi di no. Ti avevo detto di mettere mysql_affected_rows() al posto del risultato di una query, quindi se più avanti fai lo stesso errore, dovresti sostituirlo comunque, anche se non ti ho esattamente detto tutti i punti in cui è presente:
    Codice PHP:
    if($sqlconfermauser){

    echo
    "Il tuo account è attivato.";

    }
    è altrettanto sbagliato, diventa
    Codice PHP:
    if(mysql_affected_rows()){

    echo
    "Il tuo account è attivato.";

    }

  9. #9
    Guest

    Predefinito

    Il procedimento che hai detto tu l ho fatto questa notte, ma ancora non risulta funzionante. Il problema è in questa riga:

    Codice PHP:
    $sqlrecuperauser = "SELECT * FROM Utenti_tmp WHERE Codiceconferma = '$passkey'";
    Ho provato a mettere un if per provare se funzionava e risulta negativo. Ecco il mio procedimento:

    Codice PHP:
    $sqlrecuperauser = "SELECT * FROM Utenti_tmp WHERE Codiceconferma = '$passkey'";
    if(
    $sqlrecuperauser){
    echo
    "Errore";
    }else{
    Echo
    "Funziona";
    }
    Praticamente, il passkey non viene selezionato e, non essendo selezionato, non invia i dati alla tabella Utenti D:

  10. #10
    Guest

    Predefinito

    Codice PHP:
    $sqlrecuperauser = "SELECT * FROM Utenti_tmp WHERE Codiceconferma = '$passkey'";
    if(
    $sqlrecuperauser){
    echo
    "Errore";
    }else{
    Echo
    "Funziona";
    }
    Certo, se controlli nel modo sbagliato, è ovvio che ti stampi "Errore". Stai facendo un if che controlla se una stringa (la query) è diversa da 0 o dalla stringa nulla (il che è vero, quindi entra nell'if). Al massimo una query si controlla così
    Codice PHP:
    $sqlrecuperauser = "SELECT * FROM Utenti_tmp WHERE Codiceconferma = '$passkey'";
    $risultatouser = mysql_query($sqlrecuperauser);
    echo
    mysql_error();
    E nel caso la echo non stampasse nulla, puoi ancora controllare con
    Codice PHP:
    $sqlrecuperauser = "SELECT * FROM Utenti_tmp WHERE Codiceconferma = '$passkey'";
    echo
    $sqlrecuperauser;
    e vedere com'è la query che cerca di eseguire.
    Poi comunque, se sapevi dov'era il problema, potevi dirmelo, invece di postarmi un codice (che ho dovuto rileggere per cercare l'errore) e che tra l'altro hai postato senza tutte le modifiche apportate.
    Praticamente, il passkey non viene selezionato e, non essendo selezionato, non invia i dati alla tabella Utenti D:
    Anche questo non so da dove tu l'abbia tirato fuori. Per giungere a questa conclusione avresti dovuto controllare se $passkey era vuota, così
    Codice PHP:
    echo $passkey;
    e non con quell'if.

  11. #11
    Guest

    Predefinito

    Siccome io non sono molto pratico con il Php, ci ho messo mesi e mesi per scrivere questo codice xD Adesso, io vorrei solo capire il motivo per cui non mi viene confermato l' account.. Potresti spiegarmi BENE il problema? xD

  12. #12
    Guest

    Predefinito

    Partendo dal fatto che non ho problemi di vista, potevi evitare di fare l'eccentrico mettendo tutto il testo in grassetto, e il "BENE" scritto sottolineato e in corsivo potevi anche ingrandirlo e scriverlo in rosso, e me ne sarei fregato comunque.
    Ti ho già dato il codice che ti indica esattamente errore, tipo di errore e posizione del carattere che dà errore, che cosa vuoi che faccia ancora, che ti faccia il sito e il DB? Siccome la query è corretta (è una banale SELECT), l'errore dipende dalla struttura della tua tabella e, non avendola, sei solo tu che puoi "spiegarti bene il problema".

  13. #13
    Guest

    Predefinito emmh

    Citazione Originalmente inviato da ;979788
    Partendo dal fatto che non ho problemi di vista, potevi evitare di fare l'eccentrico mettendo tutto il testo in grassetto, e il "BENE" scritto sottolineato e in corsivo potevi anche ingrandirlo e scriverlo in rosso, e me ne sarei fregato comunque.
    Ti ho già dato il codice che ti indica esattamente errore, tipo di errore e posizione del carattere che dà errore, che cosa vuoi che faccia ancora, che ti faccia il sito e il DB? Siccome la query è corretta (è una banale SELECT), l'errore dipende dalla struttura della tua tabella e, non avendola, sei solo tu che puoi "spiegarti bene il problema".
    ma scusate..... mi dareste direttamente il codice perfetto invece di litigare???

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

    Predefinito

    Hai riesumato una discussione di 3 anni fa!

    Comunque "il codice perfetto" non esiste, altrimenti lo troveresti online già fatto e non esisterebbero i programmatori.
    Tutto dipende da quel che vuoi fare, dal codice che hai già e dalle tabelle che hai.

    Apri una nuova discussione spiegando bene il tuo problema, fornendo il codice che hai fatto ma che non funziona correttamente.

    Ciao!

Regole di scrittura

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