Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2012
    Messaggi
    5

    Problema con form registrazione

    Ciao a tutti,
    un grazie in anticipo a tutti quelli che interverranno, premetto anche che ho cercato in lungo e in largo e più volte mi sono imbattuto in questo forum, ma qui mi ci serve una mano

    Praticamente sto imparando pian pianino a scrivere qualche semplice pagina PHP per conto mio, più che sfizio che per altro.

    Il problema è il seguente, ho una pagina che è il mio index con 3 form da riempire ed un tasto invia che manda i dati tramite "post" alla pagina "create_user.php".
    Quando però cerco di dire a PHP di controllare se all' interno del DB (mysql) esista un utente con lo stesso nome e quindi blocchi la registrazione lui lo fa ed anche bene, però se provo ad inserire un nome utente che non esiste all' interno della tabella lui lo blocca lo stesso, ecco il codice della pagina create_user.php:

    Codice PHP:
    <?php

    session_start
    ();

    $uname = isset($_POST['username']) ? $_POST['username'] : '';
    $pw1 = isset($_POST['password1']) ? $_POST['password1'] : '';
    $pw2 = isset($_POST['password2']) ? $_POST['password2'] : '';
    $email = isset($_POST['emailaddr']) ? $_POST['emailaddr'] : '';


    if (
    $uname == '' or $email == '' or $pw1 == '' or $pw2 == '')
    {
      echo 
    "I dati sono obbligatori";
      exit;
    }
    elseif

      (!
    ereg("^([a-zA-Z]{3})([a-zA-Z0-9_]*)$"$uname))
    {
      echo 
    "Non sono ammessi caratteri speciali";
      exit;
    }

    elseif 
      (
    $pw1 != $pw2)
    {
      echo 
    "Le password non sono le stesse";
      exit;
    }

    elseif (
    strlen($pw1) < 5)
      {
      echo 
    "La password deve contenere da 5 a 12 caratteri!";
      exit;
      } 

    $conn mysqli_connect("127.0.0.1""root""root""obiettivo");
    if (!
    $conn
    {
      echo (
    'Non posso connettermi al server in questo momento.');
    }

    $uname mysqli_real_escape_string ($conn$uname);
    $email mysqli_real_escape_string ($conn$email);
    $pw1 md5($pw1);

    $sqlquery = <<<EOQUERY
    SELECT user_name FROM users WHERE user_name = '$uname'
    EOQUERY;
    $result = @$conn->query($sqlquery);
    if (
    $result != FALSE)
    {
        echo 
    "L'utente esiste gi&agrave";
        exit;
    }

    $qstr = <<<EOQUERY
    INSERT INTO users
        (user_name, password, user_email) VALUES ('
    $uname', '$pw1', '$email')
    EOQUERY;

    $results = @$conn->query($qstr);
    if (
    $results === FALSE or $results === NULL)

        echo 
    "Ci sono stati dei problemi";
    }
    else 
    {
        echo 
    "Utente creato con successo";
    }

    ?>
    È da oggi pomeriggio alle 15 che ci sbatto la testa e non riesco a venirne a capo, inoltre se trovate qualche "stupro per gli occhi" di come è scritto il codice non preoccupatevi a farmelo sapere.
    Ad esempio tutti quegli "exit" li ho inserito perché se non ci sono comunque i dati anche se incorretti o vuoti entrano nella tabella, così facendo ho visto che il ciclo si blocca.
    Avevo provato anche la funzione break ma dava sempre un Fatal Error.

    Saluti!

  2. #2
    codice:
    $sqlquery = <<<EOQUERY
    SELECT user_name FROM users WHERE user_name = '$uname'
    EOQUERY;
    $result = @$conn->query($sqlquery);
    if ($result != FALSE)
    Il punto fondamentale e' che una query restituisce FALSE se fallisce, cioe' se si verifica un errore. Se non trova nessun record la query non fallisce, semplicemente ritorna un resultset vuoto. Quindi non devi verificare se il risultato e' FALSE ma quanti record sono stati restituiti.

  3. #3
    cosi' no???

    Codice PHP:
    $sqlquery "SELECT * FROM users WHERE user_name = '".$uname."'"
        
    $result mysql_query($sqlquery); 
        
    $num_righe mysql_num_rows($result); 

        if (
    $num_righe<1){ 
        echo 
    "il nome utente nn esiste"
        }else{ 
        echo 
    "il nome utente esiste"
        } 

  4. #4
    Utente di HTML.it L'avatar di Ironmax
    Registrato dal
    Dec 2008
    Messaggi
    1,026
    Qual'è l'errore che ti da?

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2012
    Messaggi
    5
    Mamma mia che celerità ragazzi!
    Grazie millea tutti, anche a k.b che mi ha dato una spiegazione logica del perchè.
    Praticamente non c'è un errore, nel senso di warning o fatal error, semplicemente stampa l' ECHO: "l' utente esiste già".

  6. #6
    Utente di HTML.it L'avatar di Ironmax
    Registrato dal
    Dec 2008
    Messaggi
    1,026
    Ma io non ho mai usato fin'ora exit.
    Prova a toglierlo e vedi che ti succede se ti fa il tuo inserimento continuando con lo script.
    Anche se ti stampa che esiste.

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2012
    Messaggi
    5
    Ho modificato il codice su consiglio di "serena80" in questo modo:

    Codice PHP:
    $sqlquery = <<<EOQUERY
    SELECT user_name FROM users WHERE user_name = '$uname'
    EOQUERY;
    $result mysql_query($sqlquery);
    $num_righe mysql_num_rows($result);
    if (
    $num_righe<1)
    {
        echo 
    "Il nome utente &egrave disponibile";
        }else{
        echo 
    "Il nome è gi&agrave stato scelto";

    A parte il warning che viene fuori:

    codice:
    Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\create_user.php on line 51
    ma questo avevo già visto nel pomeriggio che è risolvibile, lui continua a popolare il database anche con stringhe che già esistono.

  8. #8
    Utente di HTML.it L'avatar di Ironmax
    Registrato dal
    Dec 2008
    Messaggi
    1,026
    Se adesso riesci a contare se sono più o meno di uno gli user_name con lo stesso nome ora nel if puoi mettere la tua query di inserimento.

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2012
    Messaggi
    5
    Ciao a tutti ragazzi,

    ho risolto in questa maniera:

    Codice PHP:
    $result $conn->query($sqlquery);
    if(
    $result->num_rows)
    {
            echo 
    "L'utente esiste gi&agrave;";
            exit;

    Saluti!

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