PDA

View Full Version : [php/mysql] Piccolo problema codice login


Apple2k
13-10-2009, 16:44
ciao, ho un piccolo problema da risolvere entro domani e mi affido a voi per un aiuto..

si tratta di php e mysql..
vorrei effettuare un login nel quale php svolga due azioni differenti nel caso in cui si tratti di semplice utente o amministratore...

in questa porzione di codice
1) ricevo mediante post una username e password da un form
2) controllo che queste due siano presenti nella tabella utenti
3) infine, attraverso l'if, vorrei che dalla riga estratta leggesse il campo tipo (di tipo enum) in modo da svolgere un'operazione se tipo = 'amministratore' ed un'altra operazione se tipo = 'cliente'

dove sbaglio? ci può essere qualche errore grossolano vi avviso.. :doh:
e vi ringrazio in anticipo


$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];
//ottenuti username e password da un form

$sql="SELECT username, password, tipo FROM utenti AS u WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);
//ho estratto dalla tabella utenti la riga con quell'username e quella password

$count=mysql_num_rows($result);
// Mysql_num_row conta le righe
// Se result trova $myusername e $mypassword, count deve valere 1

if($count==1 && u.tipo=='amministratore'){
// Registra $myusername, $mypassword e ti riporta al file "logadminsuccess.php"
session_register("myusername");
session_register("mypassword");
header("location:logadminsuccess.php");
}

elseif($count==1 && u.tipo=='cliente'){
// Registra $myusername, $mypassword e ti riporta al file "logusersuccess.php"
session_register("myusername");
session_register("mypassword");
session_start();
$_SESSION['user'] = $myusername;
header("location:logusersuccess.php");
}
?>

Zelig
13-10-2009, 18:10
ciao non sono espertissimo di PHP, ma l'ho usato in qualche occasione

cmq dovrebbe essere cosi :

- la string query va concatenata col . (punto)

$sql="SELECT username, password, tipo FROM utenti AS u WHERE username='".$myusername."' and password='".$mypassword."'";

poi dopo la tua istruzione
$count=mysql_num_rows($result);

fai

$array = mysql_fetch_assoc($result);

poi per controllare il tipo

if($count==1 && $array['tipo ']=='amministratore')


spero ti sia d'aiuto

ciao

Apple2k
13-10-2009, 18:46
mamma mia.. risolto subito.. :)
è raro che succeda a prima botta eheh!!

grazie 1000 Zelig...

avevo temporaneamente risolto in una maniera poco ottimizzata, grazie a te ho corretto è ho fatto come volevo...
il primo suggerimento del . come concatenamento non era necessario mentre gli altri 2 ($array e $array['tipo ']=='amministratore') sono stati proverbiali.. grazie 1000 ancora

posto il codice corretto a chiunque possa servire...

// Nome utente e password inviate attraverso il form
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];

$sql="SELECT * FROM utenti WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

// Mysql_num_row conta le righe
$count=mysql_num_rows($result);
// Se result trova $myusername e $mypassword, count deve valere 1

$array = mysql_fetch_assoc($result);

if($count==1 && $array['tipo']=='amministratore'){
// Registra $myusername, $mypassword e ti riporta al file "logadminsuccess.php"
session_register("myusername");
session_register("mypassword");
header("location:logadminsuccess.php");
}

if($count==1 && $array['tipo']=='cliente'){
// Registra $myusername, $mypassword e ti riporta al file "logusersuccess.php"
session_register("myusername");
session_register("mypassword");
session_start();
$_SESSION['user'] = $myusername;
header("location:logusersuccess.php");
}


se non chiedo troppo.. ho anche un problemino col modulo di registrazione.. dev'essere una cosa ancora più banale.. lo scrivo fra un attimo al prossimo post.. se puoi fare qualcosa anche quì.. :cry:

Apple2k
13-10-2009, 19:08
ecco quì

1) nella prima parte prendo i vari dati inseriti nel form..
2) col primo if controllo se ci sono campi vuoti, e se ci sono mostra il messaggio
3) col secondo if controllo se password e password2 non coincidono, se è vero mostra il messaggio
4) inserisco nella tabella utenti i vari campi..

allora: funziona tutto.. il problema è che funzione sempre e comunque..
io vorrei che se trovasse un campo mancante (oppure se le password non dovessero coincidere) bloccasse tutto...
invece scrive i campi sulla tabella sempre e comunque..
certamente mi accorgo che manca qualcosa.. ma cosa?


//prendo i campi dal form
$nome = $_POST['nome'];
$cognome = $_POST['cognome'];
$citta = $_POST['citta'];
$indirizzo = $_POST['indirizzo'];
$username = $_POST['username'];
$password = $_POST['password'];
$password2 = $_POST['password2'];
$mail = $_POST['mail'];

//controllo se ci sono campi vuoti
if($nome == false || $cognome == false || $citta == false || $indirizzo == false || $username == false || $password == false || $password2 == false || $mail == false)
echo "Riempi tutti i campi";

//controllo se le password coincidono
if($password <> $password2);
echo "Le password inserite non coincidono";

//inserisco nella tabella utenti i campi presi dal form
$sql="INSERT INTO utenti (nome , cognome , citta , indirizzo , username , password , mail , tipo)
VALUES ('$nome', '$cognome', '$citta', '$indirizzo', '$username', '$password', '$mail', 'cliente');";
$risultato=dbQuery($sql);
echo "grazie per esserti registrato adesso puoi effettuare il login...";

Zelig
13-10-2009, 19:37
ciao

ma l'if di controllo non esclude che venga eseguito anche il codice successivo e quindi esegue la query di inserimento

e mi sa php usa come operatore di diverso != non <>

prova cosi :


//prendo i campi dal form
$nome = $_POST['nome'];
$cognome = $_POST['cognome'];
$citta = $_POST['citta'];
$indirizzo = $_POST['indirizzo'];
$username = $_POST['username'];
$password = $_POST['password'];
$password2 = $_POST['password2'];
$mail = $_POST['mail'];

//controllo se ci sono campi vuoti
if($nome == false || $cognome == false || $citta == false || $indirizzo == false || $username == false || $password == false || $password2 == false || $mail == false)
echo "Riempi tutti i campi";

//controllo se le password coincidono
if($password != $password2)
{
echo "Le password inserite non coincidono";
} else {
//inserisco nella tabella utenti i campi presi dal form
$sql="INSERT INTO utenti (nome , cognome , citta , indirizzo , username , password , mail , tipo)
VALUES ('$nome', '$cognome', '$citta', '$indirizzo', '$username', '$password', '$mail', 'cliente');";
$risultato=dbQuery($sql);
echo "grazie per esserti registrato adesso puoi effettuare il login...";
}


ciao

Apple2k
13-10-2009, 20:03
risolto a metà...
se lascio tutti i campi vuoti mi da giustamente errore ma cmq mi registra il record vuoto..
se lascio alcuni campi vuoti mi da giustamente errore ma cmq mi registra il record per quei campi che ho inserito..
solo se password e password2 non coincidono appare il msg di errore e blocca la registrazione..

ora mi assento da pc, rileggerò il post fra qualche.. se hai qualche idea dimmi se no non ti preoccupare.. mi hai già aiutato tantissimo..
ciao e grazie ancora

Zelig
13-10-2009, 20:14
controlli se i campi sono tutti validi, se non lo sono stampa l'errore e basta,
se sono validi controlla le password, se non sono valide stampa l'errore ed esce, se sono valide esegue la query :


//prendo i campi dal form
$nome = $_POST['nome'];
$cognome = $_POST['cognome'];
$citta = $_POST['citta'];
$indirizzo = $_POST['indirizzo'];
$username = $_POST['username'];
$password = $_POST['password'];
$password2 = $_POST['password2'];
$mail = $_POST['mail'];

//controllo se ci sono campi vuoti
if($nome == false || $cognome == false || $citta == false || $indirizzo == false || $username == false || $password == false || $password2 == false || $mail == false)
{
echo "Riempi tutti i campi";
}
else
{
//controllo se le password coincidono
if($password != $password2)
{
echo "Le password inserite non coincidono";
}
else
{
//inserisco nella tabella utenti i campi presi dal form
$sql="INSERT INTO utenti (nome , cognome , citta , indirizzo ,
username , password , mail , tipo)
VALUES ('$nome', '$cognome', '$citta', '$indirizzo',
'$username','$password', '$mail', 'cliente');";

$risultato=dbQuery($sql);
echo "grazie per esserti registrato adesso puoi effettuare il login...";
}
}


ciao

Apple2k
14-10-2009, 00:02
appena tornato e risolto! :cool: grazie...
non so bene cosa c'era di sbagliato, ho solo copiato ed incollato ciò che hai scritto... sei davvero in gamba..
grazie ancora..

flx2000
15-10-2009, 12:40
Una info in più: se vuoi usare le variabili all'interno delle stringe, le stringhe vanno delimitate con " e non con '.
Per il resto, puoi evitarti i concatenamenti e gli errori circondando le variabili da { }.

Esempio:
$tabella = "tab1";
$valore = 5;
$sql = "SELECT * FROM {$tabella} WHERE VAL = '{$valore}' LIMIT 0,1";

In questo caso $sql diventa: SELECT * FROM tab1 WHERE VAL = '5' LIMIT 0,1