- Home
- Categorie
- Coding e Sistemistica
- Coding
- Semplice form di registrazione
-
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à";
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!
-
[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]
-
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!
-
Ciao Zippo87,
la trovi qui:
http://php.net/manual/en/mysqli-result.num-rows.phpServe semplicemente per contare il numero di righe che ha restituito la query.
-
Grazie mille ero capitato in quella pagina!
Quindimysqli_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.
-
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.
-
Grazie mille, nel frattempo avevo combinato un mezzo casino finché rispondevi!
A buon rendere Thedarkita e anche a pietro98 ovviamente!
Ciao!