- Home
- Categorie
- Coding e Sistemistica
- PHP
- Problemi Con Login Area Riservata
-
Problemi Con Login Area Riservata
Ciao a tutti!!
Sto studiando php da qualche mese...
Vorrei creare un'area amministrazione di mio pugno, senza copiare gli esempi..altrimenti che piacere c'è!!
ma mi sono impallato su una cosa.
vi prego di indicarmi la soluzione giusta.
il login che ho progettato prevede (senza sessione):- form per il login (campi di testo USERN e PASS).
- pagina di verifica.
- pagina riservata (che creerò in seguito, se passo questo esame!!)
ho creato due campi MYSQL username e password...
Il login funziona, ma solo con la prima user e pass, con le altre no.
riuscite ad indicarmi il problema di sicuro elementare.
vi posto il codice...e grazie
pagina di verifica
<?$query="select * from elenco'";
$risultato= mysql_query($query);
$rigo=mysql_fetch_array($risultato);if(($_REQUEST['usern'] == $rigo['username'] ) && ($_REQUEST['pass'] == $rigo['password'] )){ echo "eh vai!!!!"; }else{ echo"riloggati gentilmente che ci sono problemi"; }
?>
-
secondo me andrebbe bene anche un campo "privilieggi" capisci a mia ^_^
-
Nel tuo script leggi solo il primo record del risultato della query.
Ed è per quello che funziona solo con un account.Devi fare un bel ciclo while su mysql_fetch_row($risultato) così leggi fino all'ultimo record.
Dal manuale online di PHP, quello con i commenti, puoi trovare tutto quello che ti serve...
http://us2.php.net/manual/en/ref.mysql.php
-
E' giusto quello che ti ha detto InuYaksa, in più credo che sarebbe ancora meglio se facessi direttamente la query dello user. Quindi qualcosa tipo:
$query = "select * from elenco where username = '" . $_REQUEST['usern'] . "'";
In questo modo puoi togliere una condizione dal test che segue e non devi fare il ciclo.
-
grazie prima di ogni cosa per avermi risposto...
la mia inesperienza mi ha portato a scrivere questo codice e come è facile intendere non funge.
vi posto cosa ho creato con il vostro consiglio (magari non lo so fondere con quello che avevo creato)....
se mi loggo con il secondo user mi da
"riloggati gentilmente che ci sono problemieh vai!!!!riloggati gentilmente che ci sono problemi" (eh vai me lo dà?!?).<?
$query= mysql_query("select * from elenco");
while ($rigo= mysql_fetch_array($query)) {
if(($_REQUEST['usern'] == $rigo['username'] ) && ($_REQUEST['pass'] == $rigo['password'] ))
{
echo "eh vai!!!!";
}
else
{
echo "riloggati gentilmente che ci sono problemi";
}
}
?>
-
ho fatto un'altra prova e adesso funziona!!!
ho utilizzato il metodo "Senamion" senza ciclo while....
Solo resta un problema...
se chiudo la finestra e vi riaccedo in una nuova..
mi dà "riloggati", ma mi restituisce il seguente messaggioNotice: Undefined index: loggato in c:\programmi\easyphp1-7\www\dipartimento\pa3.php on line 4
login non valido! loggatiche corrisponde
alla seguente riga....if($_COOKIE['loggato']=="si"){
Ad ogni modo vorrei che mi rimandi alla pagina di login
cosa dovrei inserire secondo voi nel codice che o creato nella pagina riservata?pa3.php
<?
if($_COOKIE['loggato']=="si"){
?>
benvenuto
<?
}else{
echo" login non valido non rompere i coglioni e loggati";
}
?>grazie sempre
-
Non usate mai una $_REQUEST dentro una query...
perché qualunque cracker alle prime armi sarebbe così in grado i bucarvi il sito in 5 minuti.Se il parametro arriva da post allora usa $_POST se invece arriva da url allora usa $_GET.... la $_REQUEST solo in casi estremi.
Successivamente devi "ripulire" il valore da eventuali trucchi sporchi con una banale addslashes.
percui ti consiglio $nome = addslashes($_POST['nome'])
così poi usare $nome con più sicurezza.
Ricordati sempre di controllare che esistano i parametri con ISSET sennò PHP si arrabbia!
-
Quoto InuYaksa, il mio era solo un esempio (non sapendo com'era fatto il form), giustamente fai controlli su cosa ti viene passato.
Per il tuo problema controlla sempre le variabile con isset(), nel tuo caso specifico:if(isset($_COOKIE['loggato']) && $_COOKIE['loggato']=="si"){
-
@Senamion said:
Quoto InuYaksa, il mio era solo un esempio (non sapendo com'era fatto il form), giustamente fai controlli su cosa ti viene passato.
Per il tuo problema controlla sempre le variabile con isset(), nel tuo caso specifico:if(isset($_COOKIE['loggato']) && $_COOKIE['loggato']=="si"){
ti ringrazio molto per l'aiuto, adesso funziona!!!
ad ogni modo mi hanno sconsigliato di usare le sessioni, piuttosto che i cookies per maggiore sicurezza e adattabilità.
ho provato quindi con questo codice ma non capisco come inserire un header che mi reindirizzi se "ok" alla index.php?id_utente=<?=$rigo['id_utente']?> (metodo che utilizzavo con i cookies) dell'utente che si è loggato....
potreste dargli un'occhiata?grazie dell'aiuto!!<?php
session_start();
dbconnect();
if ($_POST['action'] == "login") {
$_SESSION['verified_user'] = "";
$result = mysql_query("SELECT * FROM elenco_utenti WHERE user='".$_POST['username']."' AND pass='".$_POST['psw']."'");
if (mysql_num_rows($result) > 0) list($_SESSION['verified_user']) = mysql_fetch_row($result);
}
?><html><head></head><body>
<br><a href="log-in.php">Log in</a> - <a href="index.php">Index</a> - <a href="log-out.php">Log out</a><br>
<?php
echo"<br>";
if ($_SESSION['verified_user'] != "") {
echo"<b>Welcome.</b><br>";
} else {
if ($_POST['action'] == "login" && $_SESSION['verified_user'] == '') {
echo"<font color="red">Login error!</font><br><br>";
}
?>
<form name="login_form" action="log-in.php" method="post">
<input type="hidden" name="action" value="login">
Username: <input type="text" name="username">
Password: <input type="password" name="psw"> <input type="submit" name"Login" value="Login"></form>
<?php
}
function dbconnect() {
mysql_connect("localhost", "root", "");
@mysql_select_db("utenti") or die ("Unable to select database");
}
?></body></html>
-
Il posto dovrebbe essere al posto della riga:
echo"<b>Welcome.</b><br>";