• User Newbie

    Semplice form di registrazione

    Ciao a tutti,
    un grazie in anticipo a tutti quelli che interverranno.

    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:

    [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";
    }

    ?>[/php]

    È 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 linguaggio non preoccupatevi a farmelo sapere!
    Saluti!


  • User Newbie

    [php]
    $result = @$conn->query($sqlquery);
    if($result != FALSE)
    {
    echo "L'utente esiste già";
    exit;
    }
    [/php]È normale che questo codice restituisca così, perchè tu controlli se ha eseguito la query. Invece dovresti controllare se la query contiene delle righe. Se le contiene significa che ha trovato un utente mentre se non le contiene non c'è nessun utente e quindi puoi tranquillamente eseguire la registrazione.
    Prova con questo codice:
    [php]
    $result = $conn->query($sqlquery);
    if($result->num_rows)
    {
    echo "L'utente esiste già";
    exit;
    }
    [/php]


  • User Newbie

    Ciao, grazie mille!
    Così ho risolto, però chiedo, se posso ovviamente.

    La funzione

    [php]num_rows[/php]

    non riesco a trovarla nel manuale di PHP online, mi daresti una spiegazione veloce veloce?

    Grazie mille per la pazienza!


  • ModSenior

    Ciao Zippo87,
    la trovi qui:
    http://php.net/manual/en/mysqli-result.num-rows.php

    Serve semplicemente per contare il numero di righe che ha restituito la query.


  • User Newbie

    Grazie mille ero capitato in quella pagina!
    Quindi

    mysqli_result::$num_rows -- mysqli_num_rows
    ```si può scriverlo in queste tre maniere allora?
    Scusa ma, già ne so pochino quindi cerco di assumere più informazioni che posso.
    Grazie ancora e scusa!
    Ciao.

  • ModSenior

    mysqli_result::$num_rows Significa che utilizzando la programmazione ad oggetti ha un attributo num_rows nell'istanza di mysqli_result, che è quella che hai utilizzato seguendo il consiglio di pietro98: $result->num_rows.
    Mentre mysqli_num_rows è una semplice funzione che puoi usare se preferisci usare la programmazione procedurale.


  • User Newbie

    Grazie mille, nel frattempo avevo combinato un mezzo casino finché rispondevi!

    A buon rendere Thedarkita e anche a pietro98 ovviamente!
    Ciao!