salve ultimamente ho dovuto cancellare il mio sito perchè mi ritenevo incapace di farlo quindi attualmente utilizzo il sito per fare delle prove una di queste prove è quella di effettuare il login il mio codice è questo:
Codice PHP:
<?php
//variabili di connessione
$db_host = "localhost";
$db_user = "arcadeprehacks";
$db_password = "*********************";
$db_name = "my_arcadeprehacks";
//connetto il database
$db = mysql_connect($db_host, $db_user, $db_password) or die ('Errore durante la connessione');
mysql_select_db($db_name, $db) or die ('Errore durante la selezione del db');
?>
<html>
<head>
<title>Pagina di Prova Login in Php e Mysql</title>
</head>
<body>
<form action='<? echo $_SERVER['PHP_SELF']; ?>?login=ok' method='POST'>
<b>Username</b><br>
<input type='text' name='user'><br>
<b>Password</b><br>
<input type='password' name='pass'><br>
<input type='submit' value='Effettua il login'>
</form>
<?php
// recupero di valori inviati dal form: user e pass
$user = $_POST['user'];
$pass = $_POST['pass'];
$risp = "ok";
$login = $_GET['login'];
// questo serve per evitare di ricevere subito un messaggio dallo script
if ( $login == $risp ) {
// controllo che entrambi i valori siano stati compilati
if ( $user && $pass ) {
// effettuo l'escape per i valori speciali per evitare problemi con le query
$user = mysql_real_escape_string($user);
$pass = mysql_real_escape_string($pass);
// preparo una query cioè una richiesta al database che vede se esistono i valori appena inseriti nella tabella creata precedentemente
$sql = "SELECT * FROM utenti WHERE username = '$user' AND password = MD5('$pass')";
$res = mysql_query($sql) or die (mysql_error());
// ora se i dati inseriti sono quelli esatti presenti all'interno della tabella possiamo far effettuare il login
if ( $res == TRUE ) {
// ora creo una sessione con l'id dell'utente che lo farà restare connesso tutto il tempo della navigazione alle pagine protette da login
while($row = mysql_fetch_array($res)) {
session_start();
$idutente = $row['id'];
$nomeutente = $row['username'];
$_SESSION['id_utente'] = $idutente;
$_SESSION['nome_utente'] = $nomeutente;
// e infine reindirizzo l'utente nella pagina protetta da login
header("location: paginasegreta.php");
}
}
echo "Username o Password non corrette";
} else {
echo "Non sono stati compilati tutti i dati obbligatori";
}
}
?>
</body>
</html>
a questo punto vorrei farvi due domande:
1) è abbastanza corretto il codice? se no potreste aiutarmi a correggerlo e/o a ridurlo
2) vorrei applicare un filtro che non permatta che i caratteri < , > e la parola script
inoltre vi posto il codice per le registrazioni:
Codice PHP:
<html>
<head>
<title>Modulo di Registrazione</title>
</head>
<body>
<form action='registrazione.php?reg=1' method='POST'>
<b>Nickname</b><br>
<input type='text' name='nick'><br>
<b>Password</b><br>
<input type='password' name='pass1'><br>
<b>Ripeti Password</b><br>
<input type='password' name='pass2'><br>
<b>Mail</b><br>
<input type='text' name='mail'><br>
<b>Nome</b><br>
<input type='text' name='nome'><br>
<b>Cognome</b><br>
<input type='text' name='cognome'><br>
<b>Sesso</b><br>
<input type='text' name='sesso'><br>
<b>Anno</b><br>
<input type='text' name='anno'><br>
<input type='submit' value='Registrati'><br>
</form>
<?
// connettiamoci il nostro database
$db_host = "localhost";
$db_user = "arcadeprehacks";
$db_password = "****************";
$db_name = "my_arcadeprehacks";
//connetto il database
$db = mysql_connect($db_host, $db_user, $db_password) or die ('Errore durante la connessione');
mysql_select_db($db_name, $db) or die ('Errore durante la selezione del db');
// recuperiamo il get per evitare di ricevere subito i messaggi dei vari if sotto
$reg = $_GET['reg'];
if ( $reg == 1 ) {
// recuperiao tutti i dati inviati via post
$nick = $_POST['nick'];
$pass1 = $_POST['pass1'];
$pass2 = $_POST['pass2'];
$mail = $_POST['mail'];
$nome = $_POST['nome'];
$cognome = $_POST['cognome'];
$sesso = $_POST['sesso'];
$anno = $_POST['anno'];
// vediamo se tutti i campi sono stati compilati
if ( $nick == TRUE && $pass1 == TRUE && $pass2 == TRUE && $mail == TRUE && $nome == TRUE && $cognome == TRUE && $sesso == TRUE && $anno == TRUE ) {
// controlliamo se il campo mail è stato scritto in maniera errata
$email = eregi("^[_a-z0-9+-]+(\.[_a-z0-9+-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+$",$mail);
if($email == TRUE ) {
// controlliamo se l'e-mail è già inserita all'interno del db
$query = "SELECT mail FROM utenti WHERE mail = '$mail'";
$risultato = mysql_query($query) or die (mysql_error());
$risp = mysql_fetch_assoc($risultato);
if ( $risp == FALSE ) {
// ora controlliamo che pass1 e pass2 sono uguali
if ( $pass1 == $pass2 ) {
// criptiamo la password per sicurezza
$pass_md5 = md5($pass1);
// e infine registriamo l'utente
mysql_query("INSERT INTO utenti
(id , username , password , mail , nome , cognome , sesso , anno )
VALUES
('','$nick', '$pass_md5', '$mail', '$nome', '$cognome', '$sesso', '$anno' )") OR DIE(mysql_error());
// inviamo una mail per comunicare all'utente che si è appena registrato
$destinatario = $mail;
$nostro_recapito = "admin@arcadeprehacks.altervista.org";
$oggetto= "Iscrizione al nostro sito";
$testo= "
Complimenti ti sei appena iscritto al nostro sito.\n
Questa è il tuo nickname : $nick \n
Questa è la tua password : $pass1 \n
";
mail ("$destinatario", "$oggetto", "$testo", "From: $nostro_recapito");
echo "Complimenti registrazione effettuata con successo.";
} else {
echo "Le due Password inserite non sono uguali";
}
} else {
echo "Mail già utilizzata";
}
}else{
echo "Devi inserire un indirizzo di Mail Valido";
}
} else {
echo "Tutti i campi sono obbligatori";
}
}
?>
</body>
</html>
anche questo secondo voi è abbastanza "pulito" se no come potrei migliorarlo? anche questo farà parte del sistema di login/registrazione del nuovo sito ma cercherò di cambiare i nomi ad esempio di mail in qualche carattere random ad esempio ahsufuaoas per rendere più difficile trovare delle informazioni in un modo "non lecito".