Controllo su codice

Ragazzi, sono nuovo e cercavo un portale interamente dedicato al php, adesso che l'ho trovato, di sicuro non lo lascerò più  ;D o perlomeno.. non lo farò finquando non mi caccerete :D

detto questo, ho subito un favore da chiedervi.

Premesso che comunque non sono un genio della programmazione PHP poichè ho cominciato da non molto, ho creato un sistema di login che utilizzasse le sessioni per loggare; il mio unico problema e che pur essendo presenti i dati nel db ( Il tutto correttamente funzionante, compresa l'estrapolazione del dati) al momento in cui richiamo la sessione di login in altre pagine non mi riscontra l'avvenuto "Settaggio" della stessa, ecco il codice della pagina per il check del login, per piacere aiutatemi:

<?php
session_start();

if (!IsSet($_SESSION['login_effettuato']))
{

$UsernameFromLogin = trim(addslashes(@$_POST['username']));
$PasswordFromLogin = trim(addslashes(@$_POST['password']));

if((!strlen($UsernameFromLogin) < 6) or (!strlen($PasswordFromLogin) < 6)) {
$QueryCreazione = "SELECT * FROM utenti WHERE username = '".$UsernameFromLogin."' AND password = '".$PasswordFromLogin."'";
$QueryCheck = mysql_query($QueryCreazione);
$QuerySes = mysql_num_rows($QueryCheck);

if($QuerySes != 0) {

$_SESSION['utente_loggato'] = "$QuerySes";
}


}

}

if (@$_GET['logout'] == 1) {
$SESSION = array();
session_destroy;
}
?>
inviato 9 anni fa
Pixelate
X 0 X

Inizia col correggere questa riga:

if((!strlen($UsernameFromLogin) < 6) or (!strlen($PasswordFromLogin) < 6))

cambiala in:

if(!(strlen($UsernameFromLogin) < 6) and  !(strlen($PasswordFromLogin) < 6))

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

ho sistemato però ancora l'username non risulta presente nel database e non so proprio come spiegarmela sta cosa..

<?php
/* 
# File: verify.php
# Todo: Inserire criptatura MD5
*/

session_start();

if (!IsSet($_SESSION['id_user'])) {

$UsernameFromLogin = trim(addslashes(@$_POST['username']));
$PasswordFromLogin = trim(addslashes(@$_POST['password']));

if(!(strlen($UsernameFromLogin) < 5) and  !(strlen($PasswordFromLogin) < 5)) {

$SelectQuery = "SELECT * FROM utenti WHERE username = '".$UsernameFromLogin."' AND password = '".$PasswordFromLogin."'";
$ResultQuery = mysql_query($SelectQuery);
$RowQuery = mysql_fetch_row($ResultQuery);

if (!strlen($RowQuery[1]) == 0) {

$_SESSION['UserOk'] = $RowQuery[1];

}

mysql_free_result($ResultQuery);

}

if (@$_GET['logout'] == 1) {
$_SESSION = array();
session_destroy();
}

}
?>
risposto 9 anni fa
Pixelate
X 0 X

Ma tu nei file in chi vuoi identificare l'user loggato inizializzi lo script in questo modo?

<?php
     session_start();
     if(!session_is_registered(username)){
         header("location: tua_pagina_di_login_non_effetuato.php");
     }
     // altro
?>
risposto 9 anni fa
DaD
DaD
1
X 0 X

c'è ancora un problema:

if (!strlen($RowQuery[1]) == 0) {

va corretto così:

if ($RowQuery) {

 :bye:

P.S.: session_is_registered è deprecato, inoltre accetta come parametro una stringa e non una costante.

risposto 9 anni fa
Gianni Tomasicchio
X 0 X
P.S.: session_is_registered è deprecato, inoltre accetta come parametro una stringa e non una costante.
<?php
     session_start();
     if(!session_registered(username)){
         header("location: tua_pagina_di_login_non_effetuato.php");
     }
     // altro
?>

Lo usato adesso è in questo modo funziona ...

risposto 9 anni fa
DaD
DaD
1
X 0 X
Lo usato adesso è in questo modo funziona ...

infatti ho detto che è deprecato, non che non funziona. Poi l'errore sul parametro passato non lo vedi perché probabilmente hai i NOTICE disabilitati, ma c'è...

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X
if(IsSet($_SESSION['id_user'])) {
echo "ciao";
} else {
echo "Utente non presente nel database";
}

quando richiamo nelle altre pagine uso questo codice, è corretto?, comunque gianni non ho ben capito la tua correzione su codice ($RowQuery) potresti spiegarmela meglio?

risposto 9 anni fa
Pixelate
X 0 X
Lo usato adesso è in questo modo funziona ...

infatti ho detto che è deprecato, non che non funziona. Poi l'errore sul parametro passato non lo vedi perché probabilmente hai i NOTICE disabilitati, ma c'è...

 :bye:

Cioè anche session_registered() è deprecato? cosa devo usare allora?  ???

Poi il parametro da passare quindi sarebbe ...

<?php
     session_start();
     if(!session_registered("username")){
         header("location: tua_pagina_di_login_non_effetuato.php");
     }
     // altro
?>

Giusto?

risposto 9 anni fa
DaD
DaD
1
X 0 X

Se si vuole usare session_registered allora il parametro va passato tra apici, ma credo che in PHP 6 non esisterà più quella funzione.

Bisogna usare isset($_SESSION['nome_variabile']).

----

mysql_fetch_row restituisce false se la query non restituisce righe, quindi per controllare questo valore basta if($RowQuery) che viene verificato se si ottiene una corrispondenza nel DB.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

ho sistemato così, ma il problema sussiste eppure le query funzionano tutte..

<?php
/* 
# File: verify.php
# Todo: Inserire criptatura MD5
*/

session_start();

if (!IsSet($_SESSION['id_user'])) {

$UsernameFromLogin = trim(addslashes(@$_POST['username']));
$PasswordFromLogin = trim(addslashes(@$_POST['password']));

if(!(strlen($UsernameFromLogin) < 5) and  !(strlen($PasswordFromLogin) < 5)) {

$ResultQuery = mysql_query("SELECT * FROM utenti WHERE username = '$UsernameFromLogin' AND password = '$PasswordFromLogin'");
$RowQuery = mysql_fetch_row($ResultQuery);

if($RowQuery) {

$_SESSION['UserOk'] = $RowQuery;

}

mysql_free_result($ResultQuery);

}

if (@$_GET['logout'] == 1) {
$_SESSION = array();
session_destroy();
}

}
?>
risposto 9 anni fa
Pixelate
X 0 X

ho risolto, praticamente richiamavo 2 nomi diversi di sessioni, ora ho settato entrambe come $_SESSION['login_effettuato']; :)

<?php

session_start();

require_once('connections.php');

if (!IsSet($_SESSION['login_effettuato']))

{

$UsernameFromLogin = trim(addslashes(@$_POST['username']));

$PasswordFromLogin = trim(addslashes(@$_POST['password']));

if((!strlen($UsernameFromLogin) < 6) or (!strlen($PasswordFromLogin) < 6)) {

$QueryCreazione = "SELECT * FROM utenti WHERE username = '".$UsernameFromLogin."' AND password = '".$PasswordFromLogin."'";

$QueryCheck = mysql_query($QueryCreazione);

$QuerySes = mysql_fetch_row($QueryCheck);

if($QuerySes) {

$_SESSION['login_effettuato'] = "$QuerySes[0]";

echo "$QuerySes[0]";

}

}

}

if (@$_GET['logout'] == 1) {

$_SESSION = array();

session_destroy ();

}

?>
risposto 9 anni fa
Pixelate
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda