Area riservata con login e mysql

searedone

Utente Attivo
11 Giu 2010
508
0
0
Help meeee..... ho un problema che non riesco proprio a risolvere e vi giuro che è da ieri notte che impazzisco ..

Allora ho sempre usato aree login con database di testo ma mai con mysql , ne sto creando una con l'ausilio di un libro e tutto bene se non che non capisco perchè non funziona... chi mi aiuta a capire !?!? ecco il codice..

Il database ve lo risparmio dato che è già installato e già correttamente funzionante e anche creando un form di per l'invio delle password memorizza tutto ...

Il problema è che quando scrivo nome e password dovrebbe in caso di password o login errati rispondermi ( Bad login or password, please try again ) ma innvece ho sempre pagina bianca...

ho creato ovviamente anche un file con DB.php con all'interno le credenziale per il database ma niente sempre schermata bianca ...

che cavolo manca

Codice completo

Ps dimenticavo io di solito scrivo solo require (''); qui c'è require_once (''); puo' essere questo ?!?

index.php
PHP:
<html>
<head><title>Login</title></head>
<body>
<?php if ( $_GET['bad'] == 1 ) { ?>
<font color="red">Bad login or password, please try again<br/></font>
<?php } ?>
<form action="login.php" method="post">
<table width="300" border="0" cellspacing="0" cellpadding="2">
<tr><td>User name:</td><td><input type="text" name="user" /></td></tr>
<tr><td>Password:</td><td><input type="password" name="password" /></td></tr>
<tr><td colspan="2"><center><input type="submit" value="Login" /></center></td></tr>
</table>
</form>
</body>
</html>

login.php
PHP:
<?php
require_once( "DB.php" );
$dsn = 'mysql://root:password@localhost/time';
$db =& DB::Connect( $dsn, array() );
if (PEAR::isError($db)) { die($db->getMessage()); }

$res = $db->query( "SELECT id FROM users WHERE name=? AND password=MD5(?)",
	array( $_POST['user'], $_POST['password'] ) );

$row = array( null );
if ( $res != null )
	$res->fetchInto( $row );

if ( $row[0] != null )
{
		session_start();
		$_SESSION['user'] = $row[0];
		header( "Location: welcome.php" );
}
else
{
		header( "Location: index.php?bad=1" );
}
?>

welcome.php

PHP:
<?php
session_start();
if ( $_SESSION['user'] == null || $_SESSION['user'] < 1 )
{
		header( "Location: prova55.php" );
		exit;
}

require_once( "DB.php" );
$dsn = 'mysql://root:password@localhost/time';
$db =& DB::Connect( $dsn, array() );
if (PEAR::isError($db)) { die($db->getMessage()); }

$res = $db->query( "SELECT name FROM users WHERE id=?",
	array( $_SESSION['user'] ) );
$res->fetchInto( $row );
?>
<html>
<head><title>Welcome</title></head>
<body>
Welcome <?php echo( $row[0] ); ?><br/><br/>
<a href="logout.php">Logout</a>
</body>
</html>

Logout.php

PHP:
<?php
session_destroy();
header( "Location: index.php" );
?>
 
Mhhh...

Io lo sto facendo aiutandomi con un libro ..

E il codice postato è quello che c'era pari passo , io poi ho creato aparte il form per l'invio delle password la tabella del database e quant'altro , ma questo script a detta del libro doveva funzionare cosi .. ma non vah !??!

Potresti aiutarmi mi piacerebbe davvero capire
 
Ecco

Non ti fungerà mai e poi mai.

Molto + simple:

$res = $db->query( "SELECT id FROM users WHERE name='$user' AND password='$password'",
if(mysql_num_rows($res)) {
allora salvi la tua sessione......
$_SESSION['id']=tuoidperesempio.
}
 
Ok per il primo pezzo e dopo provo subito, ma il secondo dove scrivi session !? Tuo id per esempio li cosa e dove devo metterlo !?! Non lo fa' in automatico una volta che cerca di loggarsi !?
 
Tu vuoi l'id dell'utente giusto?

$q=mysql_query("SELECT id FROM utenti WHERE name='$user' AND password='$password' LIMIT 1);
if(mysql_num_rows($q)) {
$_SESSION['id']=mysql_result($q,0,'id');//Qui salvi la sessione e hai l'id utente
}

Poi nelle pagine private fai:

session_start();
if($_SESSION['id']) {
//Qui fai la parte della pag privata
}
else {
echo "Per accedere a questa parte del sito devi effettuare il login";
}
 
Ultima modifica:
Adesso purtroppo sono fuori e nn posso provare;( ma se nn ho capito male l'id me lo crea automaticamente.. Giusto ?!

Cmq appena posso provo e poi ti chiedo
 
MMm

Dipende da come hai fatto il tuo db.
Di solito un utente si iscrive o lo memorizzi a manoni ok?
Quindi avrà per forza un id di solito lo mette mysql se impostato come autoincrement.

Con la query tu chiedi proprio l'id dell'utente con quel name e quella password.
Se esiste allora memorizzi in una variabile di sessione, $_SESSION['id'], proprio l'id per comodità. Questa variabile sarà la tua chiave per determinare se l'utente è loggato.

Simple no? :mavieni:
 
micio86, mai sentito parlare di "prepared statements"? Ti consiglio di rispolverare le tue conoscenze di PHP. Quel codice dovrebbe invece funzionare perfettamente, perché i valori dei placeholder sono sostituiti correttamente. In giornata ci darò un'occhiata più approfondita e ti farò sapere meglio.
 
@micio Ho provato a mettere cio che mi hai postato ma niente !?!?

@alessandro 1997 non funziona ne con la stringa di micio ne con quella originale. una volta che metto login e password mi restituisce pagina bianca , rimane l'url del login e non mi restituisce la pagina index.php con la scritta Bad login or password, please try again come dovrebbe ...

MA che sbaglio ?!??!?! eppure anche il DB.php ho messo all'interno i dati corretti del db che ho installato e che funziona se provo ad inserire le password !?!?

Help
 
Ho dato un'occhiata ma non sono ancora cosi avanti in php :( magariiii

Ma guardando loscript secondo te perchè non funziona allora ?!?!?
 
Onestamente non ne ho idea. Dovrebbe funzionare. Anche se non ho mai usato il package MDB2 di PEAR uso PDO, che è abbastanza simile. Prova a scrivere nella pagina login.php questo:
PHP:
var_dump($row);
Prima del redirect. Vedi cosa stampa a video.
 
Allora ho provato cosi ma niente sempre pagina bianca

PHP:
<?php
require_once( "DB.php" );
$dsn = 'mysql://root:password@localhost/time';
$db =& DB::Connect( $dsn, array() );
if (PEAR::isError($db)) { die($db->getMessage()); }

$res = $db->query( "SELECT id FROM users WHERE name=? AND password=MD5(?)",
	array( $_POST['user'], $_POST['password'] ) );


var_dump($row);  


$row = array( null );
if ( $res != null )
	$res->fetchInto( $row );

if ( $row[0] != null )
{
		session_start();
		$_SESSION['user'] = $row[0];
		header( "Location: welcome.php" );
}
else
{
		header( "Location: index.php?bad=1" );
}
?>
 
Sorry, se mi intrometto ma sto cercando di fare un'area riservata con mysql ma oggi butta proprio male mìnon c'è libro che tenga...

Uff

@ eliox so che sei un mostro in php e proprio per questo non capisco perchè non mi funziona la tua area riservata _(

ti posto il codice spero che tu possa aiutarmi mi da sempre login errato ...

Come puoi vedere ho aggiunto un require per il database , la parte di iscrizione l'ho già fatta e funziona perfettamente ho verificato nel database memorizza le password e l'id , ho solo cambiato la tabella tua con users come potrai vedere...

login.php
PHP:
<?php

require ("db_connect.php"); 

?>

<?php 
session_start ();//facciamo partire la sessione
//controlliamo i dati inviati    
 if ((!isset($_POST['utente'])) && (!isset($_POST['password']))) 
 { 
// ecco il form
  echo "<form method=\"post\" action=\"".$_SERVER['PHP_SELF']."\"> 
  User: <input type=\"text\" name=\"username\"><br> 
  Password: <input type=\"password\" name=\"password\"><br> 
  <input type=\"submit\" value=\"Invia\"></form>"; 
  }else{ 
// query in tabella
  $sql = mysql_query("SELECT * FROM users WHERE username='".$POST['username']."' AND '".$_POST['password']."'");
  if (mysql_num_rows($sql)>0)
  {
  $_SESSION['username']=$_POST['username']; 
  $_SESSION['password']=$_POST['password']; 
  header("Location: pagina_riservata.php");
  }
 else {echo "Login errato";} 
  }
?>

pagina_riservata.php

PHP:
<?php 
session_start(); 
if(isset($_SESSION['username'])&& isset($_SESSION['password'])) 
{ 
echo "Ciao " . $_SESSION['username'];  
}else{ 
header("Location: form.php"); 
} 
?>

sempre login errato
 

Discussioni simili