Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555

    Problema costruzione area privata

    Salve ragazzi.
    Mi sono messo d'impegno per costruire un'area privata autonomamente, stuadiando un pò l'argomento. Ebbene, fino ad ora ho costruito due files: uno è il form per l'inserimento dei dati dell'utente al momento della registrazione, l'altro invece accetta questi dati e li passa al database. Bene, in questo secondo file, prima che accetti i dati e li passi alla tabella del database (di nome "utenti") avrei voluto che confrontasse i valori di "username" e password" al momento dell'inserimento, con quelli presenti già nella tabella e, qualora vi fosse corrispondenza, rimandasse indietro al form per cambiare "username" o password". Bene, questo punto non mi riesce!

    Vi posto il codice. Inizio dal Form, così da far capire che dati vengono inseriti:



    <html>
    <head>
    <title>Modulo di registrazione</title>
    </head>
    <body>
    <form action="register.php" method="post">
    <div align="center">
    <table border="0" width="300">
    <tr>
    <td>Nome:</td>
    <td><input type="text" name="nome"></td>
    </tr>
    <tr>
    <td>Cognome:</td>
    <td><input type="text" name="cognome"></td>
    </tr>
    <tr>
    <td>Username:</td>
    <td><input type="text" name="username"></td>
    </tr>
    <tr>
    <td>Password:</td>
    <td><input type="password" name="password"></td>
    </tr>
    <tr>
    <td>Mail:</td>
    <td><input type="text" name="mail"></td>
    </tr>
    <tr>
    <td colspan="2" align="center"><input type="submit" name="action" value="Invia"></td>
    </tr>
    </table>
    </div>
    </form>
    </body>
    </html>






    Il secondo, quello che accetta i dati, si chiama "register.php":



    <?php
    $nome = htmlentities(strip_tags($_POST["nome"]));
    $cognome = htmlentities(strip_tags($_POST ["cognome"]));
    $username = htmlentities(strip_tags($_POST ["username"]));
    $password = htmlentities(strip_tags($_POST["password"]));
    $mail = htmlentities(strip_tags($_POST["mail"]));
    if($nome=="")
    {
    print ("Il nome è obbligatorio
    <a href=\"formregistraz.php\">indietro</a>
    ");
    }
    elseif($cognome=="")
    {
    print "Il cognome è obbligatorio
    <a href=\"formregistraz.php\">indietro</a>
    ";
    }
    elseif($username=="")
    {
    print "L'username è obbligatorio
    <a href=\"formregistraz.php\">indietro</a>
    ";
    }
    elseif($password=="")
    {
    print "La password è obbligatoria
    <a href=\"formregistraz.php\">indietro</a>
    ";
    }
    elseif($mail=="")
    {
    print "La mail è obbligatoria
    <a href=\"formregistraz.php\">indietro</a>
    ";
    }
    else
    {
    include("config.php");
    mysql_connect($db_host,$db_user,$db_password,$db_n ame) or die ("non riesco a connettermi");
    mysql_select_db("$db_name") or die ("Non riesco a selezionare il database");

    $sql = "select * from utenti where username='$username'";
    $query =mysql_query ($sql) or die (errore_server());

    if ($_POST['username'] == $query ) {
    echo "nome utente già occupato
    ";
    echo "<a href=\"javascript:history.back()\">ritenta</a> con un altro username";
    }
    else
    {

    function reg_register($data){
    //registro l'utente
    global $_CONFIG;

    $id = reg_get_unique_id();
    mysql_query("
    INSERT INTO ".$_CONFIG['table_utenti']."
    (nome, cognome, username, password, mail)
    VALUES
    ('".$data['nome']."','".$data['cognome']."','".$data['username']."',',MD5('".$data['password']."'),'".$data['mail']."', '".time()."','".$id."')");
    }
    }
    }
    echo "$nome";
    mysql_close();
    ?>





    Bene in questo secondo file mi interesserebbe capire dove stà l'errore nella parte di codice:




    else
    {
    include("config.php");
    mysql_connect($db_host,$db_user,$db_password,$db_n ame) or die ("non riesco a connettermi");
    mysql_select_db("$db_name") or die ("Non riesco a selezionare il database");

    $sql = "select * from utenti where username='$username'";
    $query =mysql_query ($sql) or die (errore_server());

    if ($_POST['username'] == $query ) {
    echo "nome utente già occupato
    ";
    echo "<a href=\"javascript:history.back()\">ritenta</a> con un altro username";
    }
    else
    {





    oppure se c'è qualche errore nella costruzione dei cicli. Quel che posso dire è che, avendo inserito un "echo" alla fine, i dati vengono inseriti nel database perchè mi stampa la variabile richiesta (in questo caso il nome).
    Solo che ho provato ad inserire dal form per più volte lo stesso "username" e me lo accetta, mentre io vorrei, come detto, che, esistendo già all'interno del database, mi rimandasse indietro al form per cambiare username.

    Dove ho sbagliato?
    Grazie ragazzi

    p.s. spero di essere stato chiaro

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555
    Stò provando tutto il giorno ma non riesco a trovare la soluzione...

  3. #3
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Ciao. Scusa ma adesso non ho il tempo per controllare tutto il codice.
    Comunque dai uno sguardo a questa funzione

    http://se.php.net/manual/it/function.mysql-num-rows.php

    in pratica esegui la query, dopo con questa funzione verifichi il numero di righe restituite dalla query. Se è maggiore di 0 significa che il nome esiste già e quindi segnali il fatto, in caso contrario procedi all'inserimento.

  4. #4
    Utente di HTML.it L'avatar di Il_Drugo
    Registrato dal
    May 2006
    Messaggi
    1,220
    Codice PHP:
        $sql "SELECT * FROM utenti WHERE username = '$username'";
        
    $result mysql_query ($sql) or die (errore_server());
        
    $n mysql_num_rows($result);

        if (
    $n != 0
        {
           
    // il nome utente è già presente nel DB
        
    }
        else
        {
              
    // inserisci i dati nel DB
            

    e ricorda che devi estrapolare i dati dopo aver eseguito la query con funzioni come ad esempio mysql_fetch_array() (ce ne sono molte). Dopo mysql_query() non hai i dati gia' subito disponibili.


  5. #5
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555
    Ciao Drugo,
    avevo già provato una soluzione del genere, ma non funzionava.
    Ora ho provato col codice che mi hai suggerito tu, ma non c'è nulla da fare. Se provo ad inserire un username che avevo già inserito precedentemente, lo inserisce lo stesso!!!!!!!!

    Ti posto il codice del file così come l'ho appena modificato:

    <?php
    $nome = htmlentities(strip_tags($_POST["nome"]));
    $cognome = htmlentities(strip_tags($_POST ["cognome"]));
    $username = htmlentities(strip_tags($_POST ["username"]));
    $password = htmlentities(strip_tags($_POST["password"]));
    $mail = htmlentities(strip_tags($_POST["mail"]));
    if($nome=="")
    {
    print ("Il nome è obbligatorio
    <a href=\"formregistraz.php\">indietro</a>
    ");
    }
    elseif($cognome=="")
    {
    print "Il cognome è obbligatorio
    <a href=\"formregistraz.php\">indietro</a>
    ";
    }
    elseif($username=="")
    {
    print "L'username è obbligatorio
    <a href=\"formregistraz.php\">indietro</a>
    ";
    }
    elseif($password=="")
    {
    print "La password è obbligatoria
    <a href=\"formregistraz.php\">indietro</a>
    ";
    }
    elseif($mail=="")
    {
    print "La mail è obbligatoria
    <a href=\"formregistraz.php\">indietro</a>
    ";
    }
    else
    {
    include("config.php");
    mysql_connect($db_host,$db_user,$db_password,$db_n ame) or die ("non riesco a connettermi");
    mysql_select_db("$db_name") or die ("Non riesco a selezionare il database");

    $sql = "SELECT * FROM utenti WHERE username = '$username'";
    $result = mysql_query ($sql) or die (errore_server());
    $n = mysql_num_rows($result);

    if ($n != 0)
    {
    echo "nome utente già occupato
    ";
    echo "<a href=\"javascript:history.back()\">ritenta</a> con un altro username";
    }
    else
    {

    function reg_register($data){
    //registro l'utente
    global $_CONFIG;

    $id = reg_get_unique_id();
    mysql_query("
    INSERT INTO ".$_CONFIG['table_utenti']."
    (nome, cognome, username, password, mail)
    VALUES
    ('".$data['nome']."','".$data['cognome']."','".$data['username']."',',MD5('".$data['password']."'),'".$data['mail']."', '".time()."','".$id."')");
    }
    }
    }
    echo "$nome";
    mysql_close();
    ?>


    Mi viene da pensare che vi sia qualche controllo errato (if-else). Non sò perchè non funziona. Il codice mi sembra corretto. Tu che dici?

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555
    Niente da fare.............

  7. #7
    Utente di HTML.it L'avatar di Il_Drugo
    Registrato dal
    May 2006
    Messaggi
    1,220
    Codice PHP:
    <?php
    $nome 
    htmlentities(strip_tags($_POST["nome"]));
    $cognome htmlentities(strip_tags($_POST ["cognome"]));
    $username htmlentities(strip_tags($_POST ["username"]));
    $password htmlentities(strip_tags($_POST["password"]));
    $mail htmlentities(strip_tags($_POST["mail"]));

    if(
    $nome == "")
    {
        print (
    "Il nome è obbligatorio
    <a href=\"formregistraz.php\">indietro</a>
    "
    );
    }
    elseif(
    $cognome == "")
    {
        print 
    "Il cognome è obbligatorio
    <a href=\"formregistraz.php\">indietro</a>
    "
    ;
    }
    elseif(
    $username == "")
    {
        print 
    "L'username è obbligatorio
    <a href=\"formregistraz.php\">indietro</a>
    "
    ;
    }
    elseif(
    $password == "")
    {
        print 
    "La password è obbligatoria
    <a href=\"formregistraz.php\">indietro</a>
    "
    ;
    }
    elseif(
    $mail == "")
    {
        print 
    "La mail è obbligatoria
    <a href=\"formregistraz.php\">indietro</a>
    "
    ;
    }
    else
    {
        include(
    "config.php");
        
    mysql_connect($db_host,$db_user,$db_password,$db_name) or die ("non riesco a connettermi");
        
    mysql_select_db("$db_name") or die ("Non riesco a selezionare il database");
        
        
    $sql "SELECT * FROM utenti WHERE username = '$username'";
        
    $result mysql_query ($sql) or die (errore_server());
        
    $n mysql_num_rows($result);

        if (
    $n 0)
        {
            function 
    reg_register($data)
            {
                
    //registro l'utente
                
    global $_CONFIG;
                
                
    $id reg_get_unique_id();
                
    mysql_query("
                INSERT INTO "
    .$_CONFIG['table_utenti']."
                (nome, cognome, username, password, mail)
                VALUES
                ('"
    .$data['nome']."','".$data['cognome']."','".$data['username']."',',MD5('".$data['password']."'),'".$data['mail']."', '".time()."','".$id."')");
            }
        }
        else
        {
            echo 
    "nome utente già occupato
    "
    ;
            echo 
    "<a href=\"java-script:history.back()\">ritenta</a> con un altro username";
        }
    }

    echo 
    "$nome";

    mysql_close();
    ?>
    Prova cosi e prova ad aggiungere degli ECHO di debug per vedere il valore della variabile $username e soprattutto prova a mettere un bel $n=0; prima dell'if cosi vedi se il problema è quel controllo del mysql_num_rows.


  8. #8
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555
    Allora Drugo,
    ho provato il codice che mi hai postato. Ora sorge il problema opposto, cioè che qualsiasi username utilizzo mi scirve "nome utente già occupato ritenta con un altro username"......
    insomma, ora succede l'esatto opposto!!!!!

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555
    Ciao Ragazzi,
    allora ho provato a risolvere il problema ricostruendo l'area privata da capo.
    Sino ad ora sono arrivato a costruire il form per la registrazione dell'utente e la pagina che accetta i dati provenienti dal form.

    Ecco, dopo vari problemi ora fa quello che voglio. Tuttavia volevo chiederti una cosa. Posto il codice del file per capirci:


    <?php
    $nome = htmlentities(strip_tags($_POST["nome"]));
    $cognome = htmlentities(strip_tags($_POST ["cognome"]));
    $username = htmlentities(strip_tags($_POST ["username"]));
    $password = htmlentities(strip_tags($_POST["password"]));
    $mail = htmlentities(strip_tags($_POST["mail"]));
    if($nome=="")
    {
    print ("Il nome è obbligatorio
    <a href=\"formregistraz.php\">indietro</a>
    ");
    }
    elseif($cognome=="")
    {
    print "Il cognome è obbligatorio
    <a href=\"formregistraz.php\">indietro</a>
    ";
    }
    elseif($username=="")
    {
    print "L'username è obbligatorio
    <a href=\"formregistraz.php\">indietro</a>
    ";
    }
    elseif($password=="")
    {
    print "La password è obbligatoria
    <a href=\"formregistraz.php\">indietro</a>
    ";
    }
    elseif($mail=="")
    {
    print "La mail è obbligatoria
    <a href=\"formregistraz.php\">indietro</a>
    ";
    }
    else
    {
    include("config.php");
    mysql_connect($db_host,$db_user,$db_password,$db_n ame) or die ("non riesco a connettermi");
    mysql_select_db("$db_name") or die ("Non riesco a selezionare il database");

    $sql = "SELECT * FROM utenti WHERE username = '$username'";
    $result = mysql_query ($sql) or die (errore_server());
    $n = mysql_num_rows($result);

    if ($n != 0)
    {
    echo "nome utente già occupato
    ";
    echo "<a href=\"javascript:history.back()\">ritenta</a> con un altro username";
    }

    else
    {
    $ip = $REMOTE_ADDR;
    $sql = "INSERT INTO utenti (id, nome, cognome, username, password, mail, data, ip) VALUES ('', '$nome', '$cognome', '$username', MD5('$password'), '$mail', '$data', '$ip')";
    $query = mysql_query ($sql) or die (errore_server());

    echo "dati inseriti
    ";
    }
    }
    mysql_close();
    ?>





    Ecco, fino qui funziona alla grande. Ora però vorrei aggiungere una cosa. Vedete dove c'è la parte di codice che mi restituisce la scritta "nome utente già occupato......ect.?

    Come noterete ho inserito un controllo if sulle righe della tabella. Ora vorrei aggiungere la stessa cosa per quanto riguarda la password, ossia: se un nuovo utente usa una password già presente nel database, vorrei che non venisse registrato ma si rimandasse indietro al form (come avviene per l'username).

    Ho provato ma non sono riuscito. Ho provato ad eseguire una seconda query per estrarre la password, inserendo poi il relativo controllo con $n != 0. Ma nulla!.

    Evidentemente stò sbagliando. Come posso fare?
    Grazie

  10. #10
    Utente di HTML.it L'avatar di Il_Drugo
    Registrato dal
    May 2006
    Messaggi
    1,220
    Codice PHP:
    $sql "SELECT * FROM utenti WHERE password = '".md5($password)."'";
    $result mysql_query ($sql) or die (errore_server());
    $n mysql_num_rows($result);

    if (
    $n != 0)
    {
        echo 
    "password gia' utilizzata
    "
    ;
        echo 
    "<a href=\"java-script:history.back()\">ritenta</a> con un'altra password";

    Puoi fare cosi pero' non ha molto senso...poco importa se due utenti hanno la stessa password. Cmq vedi tu


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 © 2024 vBulletin Solutions, Inc. All rights reserved.