PDA

View Full Version : [PHP] Login e cambio template


Traxsung
07-09-2013, 21:40
Buonasera amici girando per la rete ho trovato questo template per il login davvero molto carino e pulito:

Ecco il codice:


<link href="login-box.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div style="padding: 100px 0 0 250px;">
<div id="login-box">
<H2>Login</H2>
Lorem Ipsum is simply dummy text of the printing and typesetting industry.
<br />
<br />
<div id="login-box-name" style="margin-top:20px;">Email:</div><div id="login-box-field" style="margin-top:20px;"><input name="q" class="form-login" title="Username" value="" size="30" maxlength="2048" /></div>
<div id="login-box-name">Password:</div><div id="login-box-field"><input name="q" type="password" class="form-login" title="Password" value="" size="30" maxlength="2048" /></div>
<br />
<span class="login-box-options"><input type="checkbox" name="1" value="1"> Remember Me <a href="#" style="margin-left:30px;">Forgot password?</a></span>
<br />
<br />
<a href="#"><img src="images/login-btn.png" width="103" height="42" style="margin-left:90px;" /></a>
</div>
</div>
</body>
</html>



attualmente io utilizzo un login molto semplice...
Questo è il codice:


<link href="css/login-box.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div style="padding: 100px 0 0 250px;">
<div id="login-box">
<H2>Login</H2>
Lorem Ipsum is simply dummy text of the printing and typesetting industry.
<br />
<br />
<form action="login.php" method="post" name="logForm" id="logForm">
<div id="login-box-name" style="margin-top:20px;">Nome Utente:</div><div id="login-box-field" style="margin-top:20px;"><input name="usr_email" class="form-login" title="Nome Utente" value="" size="30" maxlength="2048" /></div>
<div id="login-box-name">Password:</div><div id="login-box-field"><input name="pwd" type="password" class="form-login" title="Password" value="" size="30" maxlength="2048" /></div>
<br />
<span class="login-box-options"><input type="checkbox" name="remember" value="1"> Remember Me <a href="forgot.php" style="margin-left:30px;">Password Dimenticata?</a></span>
<br />
<br />
<input name="doLogin" type="image" <img src="images/login-btn.png" name="submit" width="103" height="42" style="margin-left:90px;" /></a>
</form>
</div>
</div>
</form>
</body>
</html>



Graficamente ottengo quello che voglio, ma a livello funzionale no.
Dove sbaglio ?

Mi date qualche consiglio ?


Grazie

OoZic
07-09-2013, 23:45
cosa intendi dire?

spiegati meglio, personalmente non ho capito qual'è il problema.

Traxsung
07-09-2013, 23:52
Si, scusami hai ragione mi spiego meglio

io ho questo codice in origine:


<link href="styles.css" rel="stylesheet" type="text/css">
</head>
<body>
<table width="100%" border="0" cellspacing="0" cellpadding="5" class="main">
<tr>
<td colspan="3">&nbsp;</td>
</tr>
<tr>
<td width="160" valign="top"><p>&nbsp;</p>
<p>&nbsp; </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p></td>
<td width="732" valign="top"><p>&nbsp;</p>
<h3 class="titlehdr">Login Users
</h3>
<p>
</p>
<form action="login.php" method="post" name="logForm" id="logForm" >
<table width="65%" border="0" cellpadding="4" cellspacing="4" class="loginform">
<tr>
<td colspan="2">&nbsp;</td>
</tr>
<tr>
<td width="28%">Username / Email</td>
<td width="72%"><input name="usr_email" type="text" class="required" id="txtbox" size="25"></td>
</tr>
<tr>
<td>Password</td>
<td><input name="pwd" type="password" class="required password" id="txtbox" size="25"></td>
</tr>
<tr>
<td colspan="2"><div align="center">
<input name="remember" type="checkbox" id="remember" value="1">
Remember me</div></td>
</tr>
<tr>
<td colspan="2"> <div align="center">
<p>
<input name="doLogin" type="submit" id="doLogin3" value="Login">
</p>
<p><a href="register.php">Register Free</a><font color="#FF6600">
|</font> <a href="forgot.php">Forgot Password</a> <font color="#FF6600">
</font></p>
<p><span style="font: normal 9px verdana">Powered by <a href="http://php-login-script.com">PHP
Login Script v2.3</a></span></p>
</div></td>
</tr>
</table>
<div align="center"></div>
<p align="center">&nbsp; </p>
</form>
<p>&nbsp;</p>

</td>
<td width="196" valign="top">&nbsp;</td>
</tr>
<tr>
<td colspan="3">&nbsp;</td>
</tr>
</table>

</body>
</html>



ho adattato il codice che trovi nel primo post
Graficamente ottengo lo stesso effetto, purtroppo non effettua il login.
Controllando il nome dei campi, dell'action e del submit sembra uguali....

OoZic
08-09-2013, 00:20
<input name="doLogin" type="image" <img src="images/login-btn.png" name="submit" width="103" height="42" style="margin-left:90px;" /></a>

L'errore è qui.

il codice corretto è:
<input name="doLogin" type="image" src="images/login-btn.pngf" alt="Submit" width="103" height="42" style="margin-left:90px;" />

Traxsung
08-09-2013, 00:28
Ho apportato le modifiche che mi hai suggerito, ma purtroppo neanche così funziona.... non si logga :muro:

OoZic
08-09-2013, 09:39
Posta il file php

Traxsung
08-09-2013, 13:38
il file login.php è questo:
Ti posto l'originale così vedì


<?php

include 'dbc.php';

$err = array();

foreach($_GET as $key => $value) {
$get[$key] = filter($value); //get variables are filtered.
}

if ($_POST['doLogin']=='Login')
{

foreach($_POST as $key => $value) {
$data[$key] = filter($value); // post variables are filtered
}


$user_email = $data['usr_email'];
$pass = $data['pwd'];


if (strpos($user_email,'@') === false) {
$user_cond = "user_name='$user_email'";
} else {
$user_cond = "user_email='$user_email'";

}


$result = mysql_query("SELECT `id`,`pwd`,`full_name`,`approved`,`user_level` FROM users WHERE
$user_cond
AND `banned` = '0'
") or die (mysql_error());
$num = mysql_num_rows($result);

// Match row found with more than 1 results - the user is authenticated.
if ( $num > 0 ) {

list($id,$pwd,$full_name,$approved,$user_level) = mysql_fetch_row($result);

if(!$approved) {
//$msg = urlencode("Account not activated. Please check your email for activation code");
$err[] = "Account not activated. Please check your email for activation code";

//header("Location: login.php?msg=$msg");
//exit();
}

//check against salt
if ($pwd === PwdHash($pass,substr($pwd,0,9))) {
if(empty($err)){

// this sets session and logs user in
session_start();
session_regenerate_id (true); //prevent against session fixation attacks.

// this sets variables in the session
$_SESSION['user_id']= $id;
$_SESSION['user_name'] = $full_name;
$_SESSION['user_level'] = $user_level;
$_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']);

//update the timestamp and key for cookie
$stamp = time();
$ckey = GenKey();
mysql_query("update users set `ctime`='$stamp', `ckey` = '$ckey' where id='$id'") or die(mysql_error());

//set a cookie

if(isset($_POST['remember'])){
setcookie("user_id", $_SESSION['user_id'], time()+60*60*24*COOKIE_TIME_OUT, "/");
setcookie("user_key", sha1($ckey), time()+60*60*24*COOKIE_TIME_OUT, "/");
setcookie("user_name",$_SESSION['user_name'], time()+60*60*24*COOKIE_TIME_OUT, "/");
}
header("Location: myaccount.php");
}
}
else
{
//$msg = urlencode("Invalid Login. Please try again with correct user email and password. ");
$err[] = "Invalid Login. Please try again with correct user email and password.";
//header("Location: login.php?msg=$msg");
}
} else {
$err[] = "Error - Invalid login. No such user exists";
}
}



?>
<html>
<head>
<title>Members Login</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="JavaScript" type="text/javascript" src="js/jquery-1.3.2.min.js"></script>
<script language="JavaScript" type="text/javascript" src="js/jquery.validate.js"></script>
<script>
$(document).ready(function(){
$("#logForm").validate();
});
</script>
<link href="styles.css" rel="stylesheet" type="text/css">

</head>

<body>
<table width="100%" border="0" cellspacing="0" cellpadding="5" class="main">
<tr>
<td colspan="3">&nbsp;</td>
</tr>
<tr>
<td width="160" valign="top"><p>&nbsp;</p>
<p>&nbsp; </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p></td>
<td width="732" valign="top"><p>&nbsp;</p>
<h3 class="titlehdr">Login Users
</h3>
<p>
<?php
/******************** ERROR MESSAGES*************************************************
This code is to show error messages
**************************************************************************/
if(!empty($err)) {
echo "<div class=\"msg\">";
foreach ($err as $e) {
echo "$e <br>";
}
echo "</div>";
}
/******************************* END ********************************/
?></p>
<form action="login.php" method="post" name="logForm" id="logForm" >
<table width="65%" border="0" cellpadding="4" cellspacing="4" class="loginform">
<tr>
<td colspan="2">&nbsp;</td>
</tr>
<tr>
<td width="28%">Username / Email</td>
<td width="72%"><input name="usr_email" type="text" class="required" id="txtbox" size="25"></td>
</tr>
<tr>
<td>Password</td>
<td><input name="pwd" type="password" class="required password" id="txtbox" size="25"></td>
</tr>
<tr>
<td colspan="2"><div align="center">
<input name="remember" type="checkbox" id="remember" value="1">
Remember me</div></td>
</tr>
<tr>
<td colspan="2"> <div align="center">
<p>
<input name="doLogin" type="submit" id="doLogin3" value="Login">
</p>
<p><a href="register.php">Register Free</a><font color="#FF6600">
|</font> <a href="forgot.php">Forgot Password</a> <font color="#FF6600">
</font></p>
<p><span style="font: normal 9px verdana">Powered by <a href="http://php-login-script.com">PHP
Login Script v2.3</a></span></p>
</div></td>
</tr>
</table>
<div align="center"></div>
<p align="center">&nbsp; </p>
</form>
<p>&nbsp;</p>

</td>
<td width="196" valign="top">&nbsp;</td>
</tr>
<tr>
<td colspan="3">&nbsp;</td>
</tr>
</table>

</body>
</html>

OoZic
08-09-2013, 17:41
scusa ma prima di modificare il codice funzionava?

Traxsung
08-09-2013, 20:41
si certo, funzionava perfettamente... è questo che mi stranizza :cry:

OoZic
08-09-2013, 21:12
okay allora mi posteresti il codice funzionante prima , e l'ultimo codice che hai modificato e non funziona?

Tra tutti quelli postati non ho più capito qual'è quello giusto :D

nel frattempo assicurati che tutti i campi ci siano e abbiano gli stessi name (e possibilmente id)

Traxsung
08-09-2013, 21:16
Questo il codice originale ovvero il file login.php


<?php

include 'dbc.php';

$err = array();

foreach($_GET as $key => $value) {
$get[$key] = filter($value); //get variables are filtered.
}

if ($_POST['doLogin']=='Login')
{

foreach($_POST as $key => $value) {
$data[$key] = filter($value); // post variables are filtered
}


$user_email = $data['usr_email'];
$pass = $data['pwd'];


if (strpos($user_email,'@') === false) {
$user_cond = "user_name='$user_email'";
} else {
$user_cond = "user_email='$user_email'";

}


$result = mysql_query("SELECT `id`,`pwd`,`full_name`,`approved`,`user_level` FROM users WHERE
$user_cond
AND `banned` = '0'
") or die (mysql_error());
$num = mysql_num_rows($result);

// Match row found with more than 1 results - the user is authenticated.
if ( $num > 0 ) {

list($id,$pwd,$full_name,$approved,$user_level) = mysql_fetch_row($result);

if(!$approved) {
//$msg = urlencode("Account not activated. Please check your email for activation code");
$err[] = "Account not activated. Please check your email for activation code";

//header("Location: login.php?msg=$msg");
//exit();
}

//check against salt
if ($pwd === PwdHash($pass,substr($pwd,0,9))) {
if(empty($err)){

// this sets session and logs user in
session_start();
session_regenerate_id (true); //prevent against session fixation attacks.

// this sets variables in the session
$_SESSION['user_id']= $id;
$_SESSION['user_name'] = $full_name;
$_SESSION['user_level'] = $user_level;
$_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']);

//update the timestamp and key for cookie
$stamp = time();
$ckey = GenKey();
mysql_query("update users set `ctime`='$stamp', `ckey` = '$ckey' where id='$id'") or die(mysql_error());

//set a cookie

if(isset($_POST['remember'])){
setcookie("user_id", $_SESSION['user_id'], time()+60*60*24*COOKIE_TIME_OUT, "/");
setcookie("user_key", sha1($ckey), time()+60*60*24*COOKIE_TIME_OUT, "/");
setcookie("user_name",$_SESSION['user_name'], time()+60*60*24*COOKIE_TIME_OUT, "/");
}
header("Location: myaccount.php");
}
}
else
{
//$msg = urlencode("Invalid Login. Please try again with correct user email and password. ");
$err[] = "Invalid Login. Please try again with correct user email and password.";
//header("Location: login.php?msg=$msg");
}
} else {
$err[] = "Error - Invalid login. No such user exists";
}
}



?>
<html>
<head>
<title>Members Login</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="JavaScript" type="text/javascript" src="js/jquery-1.3.2.min.js"></script>
<script language="JavaScript" type="text/javascript" src="js/jquery.validate.js"></script>
<script>
$(document).ready(function(){
$("#logForm").validate();
});
</script>
<link href="styles.css" rel="stylesheet" type="text/css">

</head>

<body>
<table width="100%" border="0" cellspacing="0" cellpadding="5" class="main">
<tr>
<td colspan="3">&nbsp;</td>
</tr>
<tr>
<td width="160" valign="top"><p>&nbsp;</p>
<p>&nbsp; </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p></td>
<td width="732" valign="top"><p>&nbsp;</p>
<h3 class="titlehdr">Login Users
</h3>
<p>
<?php
/******************** ERROR MESSAGES*************************************************
This code is to show error messages
**************************************************************************/
if(!empty($err)) {
echo "<div class=\"msg\">";
foreach ($err as $e) {
echo "$e <br>";
}
echo "</div>";
}
/******************************* END ********************************/
?></p>
<form action="login.php" method="post" name="logForm" id="logForm" >
<table width="65%" border="0" cellpadding="4" cellspacing="4" class="loginform">
<tr>
<td colspan="2">&nbsp;</td>
</tr>
<tr>
<td width="28%">Username / Email</td>
<td width="72%"><input name="usr_email" type="text" class="required" id="txtbox" size="25"></td>
</tr>
<tr>
<td>Password</td>
<td><input name="pwd" type="password" class="required password" id="txtbox" size="25"></td>
</tr>
<tr>
<td colspan="2"><div align="center">
<input name="remember" type="checkbox" id="remember" value="1">
Remember me</div></td>
</tr>
<tr>
<td colspan="2"> <div align="center">
<p>
<input name="doLogin" type="submit" id="doLogin3" value="Login">
</p>
<p><a href="register.php">Register Free</a><font color="#FF6600">
|</font> <a href="forgot.php">Forgot Password</a> <font color="#FF6600">
</font></p>
<p><span style="font: normal 9px verdana">Powered by <a href="http://php-login-script.com">PHP
Login Script v2.3</a></span></p>
</div></td>
</tr>
</table>
<div align="center"></div>
<p align="center">&nbsp; </p>
</form>
<p>&nbsp;</p>

</td>
<td width="196" valign="top">&nbsp;</td>
</tr>
<tr>
<td colspan="3">&nbsp;</td>
</tr>
</table>

</body>
</html>



Questo invece la parte relativa al form da me modificato:


<link href="css/login-box.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div style="padding: 100px 0 0 250px;">
<div id="login-box">
<H2>Login</H2>
Lorem Ipsum is simply dummy text of the printing and typesetting industry.
<br />
<br />
<form action="login.php" method="post" name="logForm" id="logForm">
<div id="login-box-name" style="margin-top:20px;">Nome Utente:</div><div id="login-box-field" style="margin-top:20px;"><input name="usr_email" class="form-login" title="Nome Utente" value="" size="30" maxlength="2048" /></div>
<div id="login-box-name">Password:</div><div id="login-box-field"><input name="pwd" type="password" class="form-login" title="Password" value="" size="30" maxlength="2048" /></div>
<br />
<span class="login-box-options"><input type="checkbox" name="remember" value="1"> Remember Me <a href="forgot.php" style="margin-left:30px;">Password Dimenticata?</a></span>
<br />
<br />
<input name="doLogin" type="image" <img src="images/login-btn.png" name="submit" width="103" height="42" style="margin-left:90px;" /></a>
</form>
</div>
</div>
</form>
</body>
</html>

OoZic
08-09-2013, 23:13
Scusa già ti avevo detto di controllare che tutti i name/id corrispondessero, poi anche le classi e gli altri attributi.

Ho lasciato solo le parti che ci interessano:

<form action="login.php" method="post" name="logForm" id="logForm" >
<input name="usr_email" type="text" class="required" id="txtbox" size="25">
<input name="pwd" type="password" class="required password" id="txtbox" size="25">
<input name="remember" type="checkbox" id="remember" value="1">
<input name="doLogin" type="submit" id="doLogin3" value="Login">



<form action="login.php" method="post" name="logForm" id="logForm">
<input name="usr_email" type="text" class="form-login required" id="txtbox" size="30" />
<input name="pwd" type="password" class="form-login required password" id="txtbox" size="25" />
<input type="checkbox" name="remember" id="remember" value="1">
<input name="doLogin" type="image" src="images/login-btn.png" id="doLogin3" width="103" height="42" style="margin-left:90px;" />


Devi fare copia e incolla cosi come li vedi e secondo me funzionerà tutto.
Avevi campi con due name, oltre a un sacco di attributi che non hai in quello originale e quindi non vedo per quale motivo mettere.
Assicurati soltanto che id="txtbox" non corrisponda a uno stile che si sovrappone al tuo stile attuale, viceversa cancella quello stile.
C'erano poi campi che avevano la classe required in quello originale ma non l hai riportata in quello modificato.

Devi prestare attenzione secondo me, tutto qui :D

Traxsung
09-09-2013, 02:13
Ho provato come mi hai consigliato ma non funziona :muro:
L'unica cosa che funzionano sono i controlli sui campi, il resto nada

E' come se il submit non eseguisse l'action

OoZic
09-09-2013, 08:52
prova per un secondo a mettere il bottone normale e vedere se funziona:

<input name="doLogin" type="submit" id="doLogin3" value="Login">

Traxsung
09-09-2013, 18:03
Così entra.
Pensi possa essere un problema relativo al codice dell'immagine ?

OoZic
09-09-2013, 18:25
a sto punto direi di si, tra l'altro l'input di tipo immagine non si usa.

fai un banale bottone <a id="bottone-submit" href="#"><img src=""/></a>

e poi ci agganci un javascript che effettua il submit

var b = document.getElementById('bottone-submit');
var f = document.getElementById('logForm');
b.onclick = inviaform;

function inviaform () {
f.submit();
}

Traxsung
09-09-2013, 18:27
scusami, ma non ho capito bene dove aggiungere questi codici

Grazie

OoZic
09-09-2013, 19:03
al posto dell'input type image metti

<a id="bottone-submit" href="#"><img src=""/></a>

infondo prima di chiudere il body inserisci


<script>
var b = document.getElementById('bottone-submit');
var f = document.getElementById('logForm');
b.onclick = inviaform;

function inviaform () {
f.submit();
}
</script>
</body>

Traxsung
15-09-2013, 15:56
Perfetto funziona :)

Grazieeee