[PHP] proteggere pagine

steve97

Utente Attivo
30 Mar 2017
53
0
6
salve, avrei bisogno di limitare accesso a una pagina, in teoria dovrebbe solo essere visibili agli utenti registrati loggati. ho sentito dire che si puo risolvere con le variabili di sessioni, ma non trovo esempi di applicazioni, ringrazio della comprensione.

prima c'e lo script che controlla se l'utenza e valida, magari dovrei fare qualche modifica

PHP:
/* LOGIN.PHP */
<head>
<link href="stilo.css" type="text/css" rel="stylesheet">
<meta name="viewport" content="width=device-width">

<?php

$conex = mysql_connect("localhost", "wardrivers");
mysql_select_db("my_wardrivers", $conex);


$email = $_POST['email'];
$pw = $_POST['password'];


$sql = "SELECT email, password FROM utenti WHERE email='$email' AND password='$pw'";
$controllo = mysql_query($sql) or die (mysql_error());
print_r($controllo)."<br>";
echo "ok";

if(mysql_num_rows($controllo) == 1) {
echo "Benvenuto";
?>
<div id="form">
   <form method="get" action="database.php">
    <table>
 
       <tr>
           <td>artista preferito</td>
           <td><input type="text" name="nome"></td>
        </tr>

        <td><input type="submit" value="invio"></td>
     </table>
    </form>

</div><?php






}
else {header('location:../');}


?>[PHP]


lo script da proteggere e il seguente, e in teoria lo script ha il compito di aggiungere nuovi dati a una tabella

[PHP]
/* DATABASE.PHP */
<?php

$nome = $_GET['nome'];
$data = date('Y-m-d H:i:s');

if($nome == null) {header("location:../index.php");}
$conex = mysql_connect("localhost", "wardrivers");
mysql_select_db("my_wardrivers", $conex);


$recupero = "SELECT nome FROM raccolta WHERE nome='$nome'";
$result = mysql_query($recupero) or die (mysql_error());
if(mysql_num_rows($result) == 0) {
   $sql = "INSERT INTO raccolta(id, nome, disponibilita, nazione, data)
   VALUES (NULL, '$nome', '1', 'italia', '$data')";
    mysql_query($sql) or die(mysql_error());
    echo "dati inseriti correttamente";

 
}
elseif(mysql_num_rows($result) >= 1) {
 mysql_query("UPDATE raccolta SET disponibilita=disponibilita+1");
 echo "dati aggiornati";
}
else{echo 'err';}

?>
 
Ultima modifica di un moderatore:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
ti schematizzo, usando le sessioni
PHP:
<?php
session_start();//attento: prima di qualsiasi cosa
?>
<head>
<link href="stilo.css" type="text/css" rel="stylesheet">
<meta name="viewport" content="width=device-width">
<!--.....-->
<?php
$conex = mysql_connect("localhost", "wardrivers");
mysql_select_db("my_wardrivers", $conex);


$email = $_POST['email'];
$pw = $_POST['password'];


$sql = "SELECT email, password FROM utenti WHERE email='$email' AND password='$pw'";
$controllo = mysql_query($sql) or die (mysql_error());
print_r($controllo)."<br>";
echo "ok";

if(mysql_num_rows($controllo) == 1) {
echo "Benvenuto";
$riga=mysql_fetch_assoc($controllo);
$_SESSION['utente']=$riga['password'];//se l'utente è registrato crei la sessione
//eccetera compreso il form ATTENTO usa il metod POST non il GET il get è sempre pericoloso
}
?>
poi nella pagina protetta
PHP:
<?php
session_start();
if(!isset($_SESSION['utente'])){
    //la sessione non e stata create
    header('location:dove_vuoi_tu.php');
    exit();
}else{
    //tutto quello che devi fare   
}
?>
poi abbandona le vecchie istruzioni pho mysql_xxxx e passa alle nuove mysqli_xxxx
 

steve97

Utente Attivo
30 Mar 2017
53
0
6
ma perche assegni la variabile riga solo al utente e non alla password?
$_SESSION['utente']=$riga['password'];

inoltre volevo chiederti come faccio a recuperare gli altri campi di quel utente, esempio se nella tabella utenti ho una riga cosi
email : [email protected] , nazione: italia
al momento di fare login con quel email, vorrei che uscisee
benventuo pippo del italia
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
guarda che è uno schema, se vuoi estrarre tutto nella quary usi * e poi passi in sessione quello che ti serve
PHP:
<?php
//...........
//con * estrai tutti i campi
$sql = "SELECT * FROM utenti WHERE email='$email' AND password='$pw'";
$controllo = mysql_query($sql) or die (mysql_error());
print_r($controllo)."<br>";
echo "ok";

if(mysql_num_rows($controllo) == 1) {
echo "Benvenuto";
$riga=mysql_fetch_assoc($controllo);
echo "Benvenuto ".$riga['nome'];
$_SESSION['utente']=$riga['password'];
$_SESSION['nome']=$riga['nome'];
//passi in sessione quello che ti serve nella pagina protetta

//eccetera compreso il form ATTENTO usa il metod POST non il GET il get è sempre pericoloso
}
?>
poi nella protetta
PHP:
<?php
session_start();
if(!isset($_SESSION['utente'])){
    //la sessione non e stata create
    header('location:dove_vuoi_tu.php');
    exit();
}else{
    echo "ciao ".$_SESSION['nome']." ora puoi operare";
    //e puoi usare tutte le sessioni che hai defino proma
    //tutto quello che devi fare   
}
?>
 

steve97

Utente Attivo
30 Mar 2017
53
0
6
ho tolto i session dalla condizionale e il codice funziona, quindi a che cosa sserver realmente?
PHP:
if(mysql_num_rows($controllo) == 1) {
echo "Benvenuto";
$riga=mysql_fetch_assoc($controllo);
echo "Benvenuto ".$riga['email'];
//passi in sessione quello che ti serve nella pagina protetta

//eccetera compreso il form ATTENTO usa il metod POST non il GET il get è sempre pericoloso
}
?>
 

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.295
331
83
@steve97
Da regolamento del forum, come tutti noi sei tenuto ad usare il tag
code.gif
quando posti del codice, oppure la funzione codice dalla barra degli strumenti
box inserisci 2.png.JPG

Inoltre ti prego di leggere attentamente il regolamento generale del forum e quello di sezione dove posti
Grazie
Per questa volta te lo sistemo io ma mi raccomando per il futuro
 

steve97

Utente Attivo
30 Mar 2017
53
0
6
adesso il problema e che dovrei mandare quel dato ossia la nazione del utente dallo script login verso lo script database.php cosi quando l'utente aggiunge un nuovo libro autamicamente la query va a salvare nella tabella il nome del libro e la nazione del utente
 

steve97

Utente Attivo
30 Mar 2017
53
0
6
perche ora mi riporta al index.php dopo che faccio submit al formulario??
Codice:
<?php
session_start();

if(!isset($_SESSION['utente'])) {
header("location:../index.php");}

else{
$nome = $_GET['nome'];
$nazione = $_GET['nazione'];
$data = date('Y-m-d H:i:s');


$conex = mysql_connect("localhost", "wardrivers");
mysql_select_db("my_wardrivers", $conex);


$recupero = "SELECT nome FROM raccolta WHERE nome='$nome'";
$result = mysql_query($recupero) or die (mysql_error());
if(mysql_num_rows($result) == 0) {
   $sql = "INSERT INTO raccolta(id, nome, disponibilita, $nazione, data)
   VALUES (NULL, '$nome', '1', 'italia', '$data')";
    mysql_query($sql) or die(mysql_error());
    echo "dati inseriti correttamente";

  
}
elseif(mysql_num_rows($result) >= 1) {
 mysql_query("UPDATE raccolta SET disponibilita=disponibilita+1 WHERE nome='$nome' ");
 echo "dati aggiornati";
}
}

?>
riguarlo allo script login, la soluzione che ho trovato per risolvere il mio problema con l'invio del nome del libro e la nazione del utente e questa qui
Codice:
<?php
session_start();
$conex = mysql_connect("localhost", "wardrivers");
mysql_select_db("my_wardrivers", $conex);


$email = $_POST['email'];
$pw = $_POST['password'];


$sql = "SELECT * FROM utenti WHERE email='$email' AND password='$pw'";
$controllo = mysql_query($sql) or die (mysql_error());


if(mysql_num_rows($controllo) == 1) {

$riga=mysql_fetch_assoc($controllo);

$nazioneUtente = $riga['nazione'];

echo "Benvenuto ".$riga['email']." di ".$nazioneUtente;


?>
<div id="form">
   <form method="get" action="database.php">
    <table>
   
       <tr>
           <td>aggiungi un nuovo libro:</td>
           <td><input type="text" name="nome"></td>
            <!--
            <input type="text" name="nazione" value='<?php echo $nazioneUtente; ?>' hidden="hidden" >
       -->
       </tr>

        <td><input type="submit" value="invio"></td>
     </table>
    </form>

</div><?php






}
else {header('location:../');}


?>
 

mr.x

Utente Attivo
9 Apr 2016
252
25
28
perche ora mi riporta al index.php dopo che faccio submit al formulario??
perchè non hai settato la variabile di sessione ed hai in if che se non la trova settata ti redirige in index.
Quello che ti ha scritto Borgo Italia a me sembra chiaro, ciò he non mi è chiaro è pechè tu abbia tolto le variabili di sessione.. Come le passi le variabili tra le pagine?
 

steve97

Utente Attivo
30 Mar 2017
53
0
6
perchè non hai settato la variabile di sessione ed hai in if che se non la trova settata ti redirige in index.
Quello che ti ha scritto Borgo Italia a me sembra chiaro, ciò he non mi è chiaro è pechè tu abbia tolto le variabili di sessione.. Come le passi le variabili tra le pagine?
quello che ho capito e che mi basta mettere tra le parentesi quadrate un campo esistente della mia tabella raccolta per proseguire

$_SESSION['utente']=$riga['campoQualsiasi'];
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
attento, mi sa che devi studiasre ancora un po'
affinche una variabile sia variabile di sessione non basta che sia racchiusa tra parentesi quadre.
se noti tra una variabile qualsiasi e le varibili superglobali (di cui le sessioni fanno parte) già visivamente c'è una differenza
le variabili normali
$pinco
$pallo[0], $pallo[1].... array vettoriale
$sempronio['sofonisba'], $sempronio['asdrubale']... array associativo

le varibili superglobali
$_SESSION['nome']
$_POST['altro_nome']
ecc...
un'altra differenza sostanziale è che le variabili "normali" muoiono quando cambi pagina, le superglobali sopravvivino
es le varibili super $_POST e $_GET possono passare i valori da una pagina ad un'altra
le varibili super $_SESSION possono sopravvivere sino a che non chiudi il sito o il bw e quindi possono trasmettere il loro valore tra le varie pagine
in particolare le variabili di sessione devono essere, diciamo, create, in ogni pagina in cui le usi deve esserci l'istruzione
session_start();

http://php.net/manual/en/language.variables.superglobals.php