Domanda:
Autenticazione con php e mysql.. AIUTO?
KikoPallanuoto
2009-04-21 11:06:47 UTC
Ciao a tutti sono un web designer e sto cercando di capire il php con mysql.
Vorrei creare un pagina di autenticazione, che si appoggi su i dati inseriti in un database mysql.
Il database "login" ha la tabella chiamata "utenti" con questi campi id, username, password.

Vorrei che che i dati inseriti nel form vengano confrontati in quelli del db e se è esatto mi apra un'altra pagina altrimenti errore.

Grazie a tutti
Quattro risposte:
Paolo
2009-04-21 11:52:13 UTC

if (isset($accesscheck))

{

$GLOBALS['PrevUrl'] = $accesscheck;

session_register('PrevUrl');

}

if (isset($_POST['username']))

{

$phpsessid=session_id();

$username=$_POST['username'];

$password=$_POST['password'];

//mi tengo in memoria il nick e la password in delle variabili di sessione

$_SESSION['user']=$_POST['username'];

$_SESSION['pass']=$_POST['password'];

$successo = "pagina successiva al login riuscito.php";

$fallimento = "pagina dove si immettono username e password.php";

$ridirezione = false;

$database='nome del database';

$chandle = mysql_connect("localhost:3306", "root o comunque utente che accede al database", "password del root che accede al database"); //Connessione



$db_selected = mysql_select_db("nome del database"); //DataBase Selection

$query="SELECT username, password FROM utenti WHERE username='$username' AND password='$password'";

$ri = mysql_db_query($database, $query) or die(mysql_error());

$numrows = mysql_num_rows($ri);

if ($numrows)

{

$loginStrGroup = "";

//dichiaro due variabili e assegno loro;

$GLOBALS['MM_Username'] = $username;

$GLOBALS['MM_UserGroup'] = $loginStrGroup;

//registro le variabili di sessione;

session_register("MM_Username");

session_register("MM_UserGroup");

if (isset($_SESSION['PrevUrl']) && false)

{

$successo = $_SESSION['PrevUrl'];

}

header("Location: " . $successo );

}

else

{

require("pagina precedente cioè quella di login.php");

echo "

username o password errata!

";

}

}

?>



X GIOZH ...LUI HA CHIESTO IL CODICE PER FARE UNA CERCA COSA...NON HA CHIESTO IL CODICE PER FARE CONTROLLI O I CONTROLLI SUI CARATTERI IMMESSI.

LA PAGINA NON FINISCE MICA CON IL CODICE CHE HO SCRITTO.. :) NON C'E' SOLO SQL INJECTION GUARDA BENE :) CI SONO ANCHE ALTRE COSETTE SE PROPRIO VOGLIAMO DIRLA TUTTA :D
giozh
2009-04-21 19:16:24 UTC
occhio che alcuni di questi codici sono affetti da vulnerabilità di sql injection...
zedda_piras25
2009-04-21 18:47:07 UTC
Dovresti studiare un po di sql e teoria prima comunque a grandi linee fai questo



per prendere i parametri passati dall'utente fai così

http://www.skipstorm.org/2008/10/il-tag-form/



per la connessione al db te l'hanno gia detto ma in un sito reale è meglio se metti tutto in un file separato

http://www.skipstorm.org/2008/10/effettuare-delle-query-mysql-in-php/



e gestisci gli errori

http://www.skipstorm.org/2009/03/gestione-degli-errori-ed-errori-comuni-in-php/



il cuore dell'autenticazione è questo:



$q = mysql_query("select * from utenti where username = '$uid' and pass = '".md5($pass)."'");

if(mysql_num_rows($q) == 1) {

$data = mysql_fetch_array($q);

$_SESSION['userid'] = $data['id'];

$_SESSION['username'] = $data['username'];



// ecc



ricordati di utilizzare sempre mysql_escape_string sui parametri inviati da utente per evitare sql injection



mettere il $_POST['parametro'] in una query significa mettere a disposizione di qualunque niubbo una falla che permette di entrare con qualsiasi utente o distruggere il database del sito



per utilizzare $_SESSION in php devi chiamare prima la funzione session_start()



informati su $_SESSION con google



la sessione dura fino alla scadenza e in genere le impostazioni del server sono 20 min o fino a quando non la distruggi con session_destroy()



quello che fai in una pagina per vedere se un utente è loggato non è altro che controllare se le variabili di sessione sono settate



md5 serve per evitare di salvare la pass in chiaro nel database



ovviamente quando vuoi fare un sito in php è meglio se utilizzi un certo schema, vedi

http://www.skipstorm.org/2008/09/come-organizzare-un-sito-in-php/

per evitare di fare confusione



in questo modo gli utenti passano sempre dalla index e puoi gestire meglio le pagine che richiedono autenticazione ecc senza ripetizioni del codice



per differenziare gli indirizzi utilizza mod_rewrite



informati su htaccess





anche per una banalità del genere c'è un po da sapere e non si può spiegare tutto qua ma almeno ti ho detto cosa andare a cercare
Ste
2009-04-21 18:45:11 UTC
allora..

la prima pagina(quella in cui metterai il campo pasword dovrai crearla cosi:)



login:

Password:







ora pag_dest la crei così:

all'i nizio fai la connesione al db mysql:


$db_name = "login";

$db_us = "root";

$db_pw = "";

$connessione = "";

$connessione = mysql_connect($db_host, $db_us, $db_pw);

if($connessione==false) die("errore nella connesione");

mysql_select_db($db_name,$connessione)or die ("errore nella selezione del database");

return $connessione;

?>



ora dovrai leggere i dati passati dall'altra pagina e controllare se sono presenti nel db quindi crei una query fatta così:



$query="SELECT COUNT(*) as tot FROM utenti WHERE password='". $_POST['password'] ."' AND login='" .$_POST["login"]."'";



ora controlli se hai trovato almeno un risultato:



$risultato_query=mysql_query($query,connetti_database());

($row=mysql_fetch_array($risultato_query)

$totale=$row["tot"];

if($totale==1)

//carichi la pagina ke volevi

else

//o messaggio ke il login è errato



se c'è qualche errore dimmi perche non lo ho provato..



scusa..non avevo nemmeno idea esistesse il sql injection essendo solo uno studente e non uno del mestiere molte cose non le so ancora....


Questo contenuto è stato originariamente pubblicato su Y! Answers, un sito di domande e risposte chiuso nel 2021.
Loading...