dovè l'errore nella pagina di login?

Paperino78

Utente Attivo
30 Giu 2012
409
0
16
Milano
Ciao, non sapevo che titolo dare alla discussione.
Vengo al problema, sono al termine o quasi della configurazione del login per il mio sito ma nonostante tutto non riesco a venirne a capo. Vi allego il codice, qualcuno saprebbe dirmi dove sbaglio?
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!--#include virtual="/riservato/_private/logon.inc"-->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Login - Biblionet</title>
<link href="css/reset.css" type="text/css" rel="stylesheet"/>
<link href="css/Master.css" type="text/css" rel="stylesheet"/>
<link href="css/formrealtime.css" type="text/css" rel="stylesheet"/>
<link href="css/style.css" type="text/css" rel="stylesheet"/>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery.YIWpasswordStrongTester.js"></script>
<style type="text/css">
#result
{
	border: 1px solid gray;
	padding: 2px;
	width: 200px;
	height: 10px;
}
.radius{
	-moz-border-radius: 6px;
	-webkit-border-radius: 6px;
	border-radius: 6px;
}
</style>

</head>
<body>
<div id="contenitore">

<?php

include 'header3.php';

?>
           <div id="contenuto_reg" class="clearfix">

<?php
		// Azione per il login3.php?azione=login
			if(isset($_GET['azione']) && ($_GET['azione'] == 'login')){
				if(!isset($_POST['invia'])){
?>
		    <div id="content">

            <form id="jform" action="login3.php" method="post">
	            <fieldset>
                    <legend>Login</legend>
                    <p>
                		<label for="username" class="block">Username</label>
						<input type="text" name="username" id="username" value=""/>
                	</p>
                	<p>
                        <label for="password" class="block">Password:</label>
                        <input type="password" name="password" id="password" />
                    </p>
                	<p>
					<button type="submit" id="send" name="invia">Entra</button>
   					</p>
            </form>
<?php
				} else {

					$username = mysql_real_escape_string(stripslashes(strtolower($_POST['username'])));
					//$username = mysql_real_escape_string(stripslashes((strtolower($username)))); //salvo il nickname tutto in minuscolo onde evitare problemi.
					$password = mysql_real_escape_string(stripslashes($_POST['password']));

					if($username == "" || $password == ""){

						echo "Devi compilare tutti i campi";

					} else {

						$password_crypt = md5($password);

						$recuperadati = ($mysqli->query("SELECT * FROM biblionet_nuova_ok WHERE username = '$username' AND password = '$password_crypt'"));
						//$recuperadati = mysql_query("SELECT * FROM biblionet_nuova_ok WHERE username = '$username' AND password = '$password_crypt'");

						if ($verificadati = (($recuperadati->num_row == 1))){
							

						//$verificadati = mysql_num_rows($recuperadati);

						//if($verificadati == 1) {

							$sessione = mysql_fetch_array($recuperadati);
							$_SESSION['utente'] = $sessione['username'];
							echo '<div id="login">
							<p><h3>Ciao, '.$username.'</h3></p>
							</div>';
							echo "Login effettuato con successo!";
							header("Refresh: 3; URL= Newindex.php");

						} else {

							echo '<div id="errore"><p><h3>Probabilmente qualcosa &egrave; andato storto, Non abbiamo nessuno registrato con questi dati. Riprova
							 ad inserire i dati, oppure <a href="TEST%20FORM%20REAL%20TIME.php"> Registrati</a>, &egrave gratis!
							Grazie dallo staff Biblionet</h3></p></div>';
							echo "<meta http-equiv='Refresh' content='3; URL=Newindex.php'>";
						}

					}

				}

				// Azione del logout
			} else {

				if(isset($_GET['azione']) && ($_GET['azione'] == 'logout')){

					$_SESSION=array();
					//session_destroy();
					echo "Logout effettuato con successo!";
					header("Refresh: 3; URL= Newindex.php");

				}
			}


?>
		</div> <!--chiusura content-->

            <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js" charset="utf-8"></script>
            <script type="text/javascript" src="js/validation2.js" charset="utf-8"></script>

        </div><!--contenuto-->

</div><!--contenitore-->
		<div class="vuoto"></div>
      	<div id="footer"><p>Copyright - Tutti i diritti sono riservati - E' vietata la riproduzione anche parziale</p></div>

</body>
</html>
quando clicco su invia senza inserire valori non ottengo nessun errore, quando li inserisco a sono corretti in quanto nel db ho quei dati la pagina non cambia. Sia inserendo il nome della pagina cioè login3.php sia
PHP:
<form id="jform" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>" method="post">

Grazie:book::book:
 
ciao
non ho mai usato mysqli, però così a naso prova a modificare la riga
PHP:
if ($verificadati = (($recuperadati->num_row == 1))){
in
PHP:
if ($recuperadati->num_row == 1){
secondo me c'è qualcosa lì
prova mal che vada non funzia
 
Ciao Borgo, ho provato il tuo codice, ma nulla! Come se non avessi fatto niente. Sia come prima sia con il codice che mi hai suggerito tu quando clicco su invia la pagina non cambia e rimane così ferma. Non ho errori non ho avvisi. Cosa posso fare per visualizzare a video un qualsiasi errore?
 
ciao
provo a darci un occhio meglio, pero se rieco a far qualcosa poi a te sistemarlo (la programmazione a oggetti mi sta sul c...o)
 
Ma stai utilizzando mysql o mysqli? Esegui la query con mysqli e fai il fetch con mysql, inoltre anche prima fai l'escape con mysql
 
Ma stai utilizzando mysql o mysqli? Esegui la query con mysqli e fai il fetch con mysql, inoltre anche prima fai l'escape con mysql

Avete ragione ragazzi ma già mastico poco mysql, poi con l'arrivo di mysqli è difficile capire le differenze. Io dovrei usare mysqli ma capita a volte di usare la "vecchia" versione, dovrei fare il fetch con mysqli forse è li il problema? :crying::crying:
 
Avete ragione ragazzi ma già mastico poco mysql, poi con l'arrivo di mysqli è difficile capire le differenze. Io dovrei usare mysqli ma capita a volte di usare la "vecchia" versione, dovrei fare il fetch con mysqli forse è li il problema? :crying::crying:
Se stai utilizzando mysqli correggi mysql_real_escape_string() con $mysqli->real_escape_string() e mysql_fetch_array() con
PHP:
$sessione = $recuperadati->fetch_array();

Inoltre in questa parte non sono necessarie cosi tante tonde
PHP:
$recuperadati = $mysqli->query("SELECT * FROM biblionet_nuova_ok WHERE username = '$username' AND password = '$password_crypt'") or die($mysqli->error); 

if ($recuperadati->num_rows == 1){

ps: nell'ultimo è num_rows no num_row e ti ho aggiunto il controllo errori
 
Intanto ti ringrazio molto, rimettoil codice corretto, ma non funziona ancora purtroppo
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!--#include virtual="/riservato/_private/logon.inc"-->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Login - Biblionet</title>
<link href="css/reset.css" type="text/css" rel="stylesheet"/>
<link href="css/Master.css" type="text/css" rel="stylesheet"/>
<link href="css/formrealtime.css" type="text/css" rel="stylesheet"/>
<link href="css/style.css" type="text/css" rel="stylesheet"/>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery.YIWpasswordStrongTester.js"></script>
<style type="text/css">
#result
{
	border: 1px solid gray;
	padding: 2px;
	width: 200px;
	height: 10px;
}
.radius{
	-moz-border-radius: 6px;
	-webkit-border-radius: 6px;
	border-radius: 6px;
}
</style>

</head>
<body>
<div id="contenitore">

<?php

include 'header3.php';

?>
           <div id="contenuto_reg" class="clearfix">

<?php
		// Azione per il login3.php?azione=login
			if(isset($_GET['azione']) && ($_GET['azione'] == 'login')){
				if(!isset($_POST['invia'])){
?>
		    <div id="content">

            <form id="jform" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>" method="post">
	            <fieldset>
                    <legend>Login</legend>
                    <p>
                		<label for="username" class="block">Username</label>
						<input type="text" name="username" id="username" value=""/>
                	</p>
                	<p>
                        <label for="password" class="block">Password:</label>
                        <input type="password" name="password" id="password" />
                    </p>
                	<p>
					<button type="submit" id="send" name="invia">Entra</button>
   					</p>
            </form>
<?php
				} else {

					$username = $mysqli->real_escape_string(stripslashes(strtolower($_POST['username'])));
					//salvo il nickname tutto in minuscolo onde evitare problemi.
					$password = $mysqli->real_escape_string(stripslashes($_POST['password']));

					if($username == "" || $password == ""){

						echo "Devi compilare tutti i campi";

					} else {

						$password_crypt = md5($password);

						$recuperadati = $mysqli->query("SELECT * FROM biblionet_nuova_ok WHERE username = '$username' AND password = '$password_crypt'") or die($mysqli->error);

						if ($recuperadati->num_rows == 1){


							$sessione = $recuperadati->fetch_array();
							$_SESSION['utente'] = $sessione['username'];
							echo '<div id="login">
							<p><h3>Ciao, '.$username.'</h3></p>
							</div>';
							echo "Login effettuato con successo!";
							header("Refresh: 3; URL= Newindex.php");

						} else {

							echo '<div id="errore"><p><h3>Probabilmente qualcosa &egrave; andato storto, Non abbiamo nessuno registrato con questi dati. Riprova
							 ad inserire i dati, oppure <a href="TEST%20FORM%20REAL%20TIME.php"> Registrati</a>, &egrave gratis!
							Grazie dallo staff Biblionet</h3></p></div>';
							echo "<meta http-equiv='Refresh' content='3; URL=Newindex.php'>";
						}

					}

				}

				// Azione del logout
			} else {

				if(isset($_GET['azione']) && ($_GET['azione'] == 'logout')){

					$_SESSION=array();
					echo "Logout effettuato con successo!";
					header("Refresh: 3; URL= Newindex.php");

				}
			}


?>
		</div> <!--chiusura content-->

            <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js" charset="utf-8"></script>
            <script type="text/javascript" src="js/validation2.js" charset="utf-8"></script>

        </div><!--contenuto-->

</div><!--contenitore-->
		<div class="vuoto"></div>
      	<div id="footer"><p>Copyright - Tutti i diritti sono riservati - E' vietata la riproduzione anche parziale</p></div>

</body>
</html>

c'è qualcosa che posso fare ancora?
 
Dato che prima eri un po indeciso sei sicuro di aver stabilito una connessione con $mysqli? Comunque ti da qualche errore particolare? Fino a dove arriva, e inoltre hai inizializzato la sessione?
 
Allora, la connessine è ok anche perchè nel form di registrazione compilo tutti i campi, riesco ad inviare la mail, inserisco i dati nel db e li sposto nella tabella definitiva dopo aver confermato la mail.
questo è il file config.php
PHP:
<?php
	//function connect() {
	$mysqli = new mysqli('localhost', 'root', 'pass', 'biblio_nuova');

	if (!$mysqli) {
		printf('Impossibile connettersi al Database %s\n', mysqli_connect_error());
		exit();
	} else {
		$mysqli->set_charset('utf8');
	}

?>

mentre nel file header che comprende il menù superiore con anche il link al form o alla pagina di login ho inserito questo prima del codice html
PHP:
<?php

	include_once 'config2.php';
	session_start();


?>
Credo che sia tutto corretto. Che dici?
 
ciao
attento session_start() deve venire prima di qualsiasi output html

PHP:
<?php
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- ecc.... ->
 
ciao
attento session_start() deve venire prima di qualsiasi output html

PHP:
<?php
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- ecc.... ->

Quindi mi converrebbe mettere nel codice header anche la parte del codice html? con i css e robe varie?
Altrimenti la session_start non parte per prima.
 
ciao
no no, come hai fatto nel primo script che hai postato, soltanto session_start (tra i tag php) da inserire prima del doctype, e prima del <?php che racchiude session_start nemmeno uno spazio
 
Ok ma se io volessi che ogni singola pagina fosse messa in sessione dovrei mettere session_start in ogni pagina e dovrà essere la prima cosa. Quindi dicevo se il file header, che è il file dove trovo il menù e le voci di accesso, lo completo anche con il codice
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!--#include virtual="/riservato/_private/logon.inc"-->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Login - Biblionet</title>
<link href="css/reset.css" type="text/css" rel="stylesheet"/>
<link href="css/Master.css" type="text/css" rel="stylesheet"/>
<link href="css/formrealtime.css" type="text/css" rel="stylesheet"/>
<link href="css/style.css" type="text/css" rel="stylesheet"/>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery.YIWpasswordStrongTester.js"></script>

etc etc, io posso inserire la session_start senza doverla riscrivere ogni volta per ogni pagina. E' corretto il mi ragionamento?
 
Ok ma se io volessi che ogni singola pagina fosse messa in sessione dovrei mettere session_start in ogni pagina e dovrà essere la prima cosa. Quindi dicevo se il file header, che è il file dove trovo il menù e le voci di accesso, lo completo anche con il codice
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!--#include virtual="/riservato/_private/logon.inc"-->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Login - Biblionet</title>
<link href="css/reset.css" type="text/css" rel="stylesheet"/>
<link href="css/Master.css" type="text/css" rel="stylesheet"/>
<link href="css/formrealtime.css" type="text/css" rel="stylesheet"/>
<link href="css/style.css" type="text/css" rel="stylesheet"/>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery.YIWpasswordStrongTester.js"></script>

etc etc, io posso inserire la session_start senza doverla riscrivere ogni volta per ogni pagina. E' corretto il mi ragionamento?
O crei una struttura dinamica per le pagine, o lo inserisci in ognuna oppure modifichi nella configurazione il session.auto_start da 0 a 1

Nel file header in questo caso prima dovresti mettere session_start() e poi l'head html di base e includerla nelle altre pagine
 
ciao
ma se devi andare a toccare il php.ini in locale lo puoi fare di sicuro, ma in remoto non è detto che sia permesso
quindi meglio in ogni pagina o come ha detto paperino in un file da includere, basta che sia all'inizio
 
Cosa intendi per struttura dinamica? In realtà non è sta grande fatica aggiungere la session_start(), è solo un piccolo vezzo diciamo.
 
Lasciamo stare il problema della sesin_start() che comunque si può risolvere, qualcuno sa dirmi dove posso trovare l'errore, nel caso ce ne fosse uno?
 
ciao
metti i var dump in giro e verifica cosa risulta, ti faccio un esempio
PHP:
<?php
//....
var_dump($_POST['username']);
$username = mysql_real_escape_string(stripslashes(strtolower($_POST['username'])));
var_dump($username);
//....
?>
se il var dump del post e dell'username danno come risultato quello che vorresti li togli e passi alla password
se invece (es) il primo ti da NULL devi verificare perche non trasmette il post
e così via sino a che non hai "esplorato" tutto lo script
altro esempio
var_dump($recuperadati);
se ti da bool false vuol dire che non fa la query se ti da reseorce va bene
ecc...
verificando ad una ad una tutte le variabili e istruzioni dovresti capire cosa non va
 

Discussioni simili