Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1
    Utente di HTML.it L'avatar di paw
    Registrato dal
    Dec 2002
    Messaggi
    336

    Dati di sessione tra più pagine

    Ciao a tutti

    La mia necessità è evitare che si possa accedere a certe pagine direttamente e vorrei farlo con le variabili di sessione. (non utilizzo login con user e password)

    Il flusso regolare della navigazione dovrebbe essere questo:
    1. "richiesta-ordine.php" è la pagina dove l'utente inserisce i propri dati per richiedere l'ordine
    2. "conferma-ordine.php" ripropongo i dati inseriti nella pagina precedente per confermarli
    3. "invio-conferma.php" è solo lo script per l'invio dell'email di conferma ordine
    4. "grazie-ordine.php" è la pagina dove ringrazio dell'ordine

    Se non ho capito male dagli esempi negli altri post devo inserire come prima riga del codice:
    <?php
    session_start();
    $_SESSION['controllo'] = TRUE;
    ?>
    nella prima pagina (richiesta-ordine)

    mentre nella seconda pagina inserisco:
    <?php

    if(isset($_SESSION['controllo'])== FALSE){
    Header("Location: index.html" );
    exit;
    }
    ?>

    (per ora rimando alla index nel caso si acceda ad una pagina non permessa)

    ma non funziona...
    in questo modo va sempre alla index mentre se aggiungo session_start anche nella seconda pagina accede sempre

    Dove sto sbagliando?

    grazie mille per l 'aiuto


  2. #2
    Sbagli l'uso di isset(). Considera che
    Codice PHP:
    $arr['x'] = FALSE;
    echo isset(
    $arr['x']); 
    stampa 1, isset() testa se un valore e' settato, non se questo valore e' vero. Controlla PRIMA se e' settato con isset() e poi verifica se e' TRUE o FALSE. session_start() e' necessario in ogni pagina che usi le sessioni.

  3. #3
    Utente di HTML.it L'avatar di *pragma
    Registrato dal
    Sep 2001
    Messaggi
    1,087
    è davvero difficile risponderti perchè mancano le conoscenze elementari per la comunicazione.
    1) i dati vengono inseriti in un form.
    2) In "richiesta-ordine.php" c'è un form con method="post" e con per lo meno più " input " ognuno dei quali ha un nome es
    <input type="text" name="codice" /> ecc...
    3) all'inizio di "conferma-ordine.php" metti sempre session_start(); e poi
    $_SESSION['cod'] = $_POST['codice'] ;
    ecc....
    e visualizzi con echo $_SESSION['cod'];
    ecc....
    e poi devi continuare a passare i dati (sempre con session_start(); e $_SESSION['cod']; e gli altri valori di sessione.
    non se se è questo che cerchi, comunque sono indicazioni veramente minime e non ho scritto nulla sui controlli.
    ciao

  4. #4
    Utente di HTML.it L'avatar di paw
    Registrato dal
    Dec 2002
    Messaggi
    336
    Prima di tutto scusate se mancano informazioni...

    Confermo nella prima pagina è tutto inserito in un form inviato con POST con una serie di campi
    <input type="text" name="nome" />
    <input type="text" name="cognome" /> .....

    e i controlli sui campi vengono fatti con un js.

    Quindi se non ho capito male nella prima pagina devo mettere solo
    <?php
    session_start();
    ?>

    Mentre nella seconda pagina
    <?php
    session_start();
    $_SESSION['nome'] = $_POST['nome'] ;
    ?>

    ma su cosa la faccio la if allora?
    testo se il campo nome è pieno?

  5. #5
    Utente di HTML.it L'avatar di bode
    Registrato dal
    Feb 2007
    Messaggi
    304
    Ti faccio un esempietto:
    Codice PHP:
    session_start();
    if(!isset(
    $_SESSION['log'])) 

    $_SESSION['log'] = 0;  // utilizzo questa variabile di sessione log per vedere se un  utente è loggato o meno      

    if (
    $_SESSION['log'] != 1// se non è loggato
    {
     if(isset(
    $_POST['pass']) && isset($_POST['user']))  // e se ho inserito nei campi una user o una password 

      
    $qry_pass mysql_real_escape_string($_POST['pass']); 
      
    $qry_user mysql_real_escape_string($_POST['user']);  
    $query "SELECT * " .   // verifico se user e password sono presenti nel DB
                
    "FROM utenti " 
                
    "WHERE username = '$qry_user' " 
                
    "AND password = '$qry_pass' ";
                 
     
        
    $results mysql_query($query) or die (mysql_error()); 
    if(
    mysql_num_rows($results) != 0
      {
       
       
    $row mysql_fetch_array($results); 
       
    $_SESSION['log'] = 1;  // se sono presenti allora assegno 1 alla variabile di sessione che mi dice che l' utente è logato 
    }
    }

    Quindi tu basandoti sullo stato della variabile si sessione $_SESSION['log'] capisci se l'utente ha i privilegi o no. Questo è un esempio ma se cerchi sul forum ne trovi a bizzeffe. Quindi farai sempre i controlli con degli if su quella variabile se è uguale a zero non è loggato e non gli permetterai di ordinare se è loggato e quindi la variabile varrà 1 glielo permetterai.

  6. #6
    Utente di HTML.it L'avatar di paw
    Registrato dal
    Dec 2002
    Messaggi
    336
    mi devi scusare ma non riesco a capire fino in fondo

    nella prima pagina richiesta-ordine, dove chiedo nel form i dati per l'ordine, devo impostare log a 1? quindi:

    session_start();
    $_SESSION['log'] = 1;

    però devo essere sicura di impostarlo quando il form è compilato correttamente, in quanto con il js di controllo campi il form viene riproposto tante volte fino a quando i campi non sono completi, quindi forse :

    session_start();
    if($_POST){
    $_SESSION['log'] = 1;
    }

    e poi, nella seconda pagina conferma-ordine, dove chiedo conferma dei dati immessi

    session_start();
    if ($_SESSION['log'] != 1) // se non è loggato
    { Header("Location: index.html" );
    exit;
    }


    probabilmente però c'è qualcosa che non va perchè va sempre alla index

  7. #7
    Utente di HTML.it L'avatar di *pragma
    Registrato dal
    Sep 2001
    Messaggi
    1,087
    nella prima pagina richiesta-ordine.php, per come hai esposto le cose, non ha senso aprire
    una sessione. In quella pagina l'utente inserisce i dati nel form e vengono controllati da
    un javascript (quindi si presuppone che l'utente non disabiliti il javascript).
    Inviando il form i dati arrivano alla pagina conferma-ordine.php. Qui ti conviene aprire una sessione perchè poi gli stessi dati devono essere passati a pagine successive, .
    Quindi a inizio pagina e prima di ogni altra cosa sciverai.
    <?php
    session_start();
    ?>
    e hai aperto una sessione che è anche un array, per ora, vuoto.
    Considera che è opportuno che nessuno, dopo aver copiato l'indirizzo in un
    precedente momento, lo incolli nella barra degli indirizzi. Ed allora se il pulsante di invio ha nome
    "spingi_qui" (e anche se sono stati fatti i controlli sugli altri input) scriverai:
    codice:
    <?php
        if(empty($_POST['spingi_qui']) OR empty($_POST['nome1']) OR ecc...)) {
           header("location: index.php");
           exit();
       }
    // poi altro eventuale codice nel quale dici che se va tutto bene si continua ....  
    // e poi cominci a riempire l'array delle sessioni
       $_SESSION['nome1'] = $_POST['nome1'];
       $_SESSION['nome2'] = $_POST['nome2'];
    // più giù stampi i dati passati dal form
      echo $_SESSION['nome1'];
    // ecc....
    ?>
    dalla pagina "conferma-ordine.php" (che ha i dati memorizzati in sessione) puoi inviare i
    dati (anche tramite il pulsante di una form) alla pagina "invio-conferma.php" (form con
    semplice pulsante di invio).
    All'inizio della pagina invio-conferma.php scivi
    <?php
    session_start();
    .....
    ?>
    e tutti i dati passano. Anche qui dovresti premunirti che nessuno abbia copiato
    precedentemente l'indirizzo e lo incolli nella barra degli indirizzi quindi
    codice:
    if(empty($_SESSION['nome1']) OR .... ) {
       header("location: index.php");
      exit();
    }
    poi a fine pagina di spedizione mail distruggi dati e sessione
    <?php
    $_SESSION = array(); // sessione è un array vuoto. un po' paranoico ma vabbè!
    session_unset(); // Distrugge le variabile nella sessione.
    session_destroy(); // Funzione che distrugge una sessione.
    ?>
    rileggi il mio primo intervento
    ciao

  8. #8
    Utente di HTML.it L'avatar di paw
    Registrato dal
    Dec 2002
    Messaggi
    336
    Ok grazie mille

    Funziona tutto perfettamente, finalmente le pagine si vedono solo se eseguite nel giusto ordine

    Posso fare ancora due domande?

    che differenza c'è ad usare

    echo $_SESSION['nome']; o
    echo $_POST['nome'];

    per visualizzare i campi?

    e poi nell'ultimo passaggio, quando dallo script invio-conferma.php mando l'email e richiamo la pagina di grazie con:

    Header("Location: grazie-ordine.php?nome=".$nome ."&cognome=".$cognome ."&email=". $email);

    mi appare tutta la stringa con i valori immessi nell'indirizzo della pagina che viene visualizzata, si può evitare?

  9. #9
    Utente di HTML.it L'avatar di *pragma
    Registrato dal
    Sep 2001
    Messaggi
    1,087
    Originariamente inviato da paw
    ......
    Posso fare ancora due domande?
    che differenza c'è ad usare

    echo $_SESSION['nome']; o
    echo $_POST['nome'];

    per visualizzare i campi?
    Nessuna
    Originariamente inviato da paw
    e poi nell'ultimo passaggio, quando dallo script invio-conferma.php mando l'email e richiamo la pagina di grazie con:

    Header("Location: grazie-ordine.php?nome=".$nome ."&cognome=".$cognome ."&email=". $email);

    mi appare tutta la stringa con i valori immessi nell'indirizzo della pagina che viene visualizzata, si può evitare?
    scrivi header e location minuscolo.
    Così su due piedi mi viene da dire di no, ma dovrebbero poterci essere altre possibilità, farò le mie prove. Tuttavia mi viene da pensare che il reindirizzamento è così veloce che non può essere copiato, e poi anche se lo fosse quali sono le conseguenze?
    ciao

  10. #10
    Utente di HTML.it L'avatar di paw
    Registrato dal
    Dec 2002
    Messaggi
    336
    Ma l'indirizzo con tutti i dati inseriti
    (es:http://localhost/grazie-ordine.php?n...l=mia@email.it)
    mi rimane visibile nella barra degli indirizzi quando viene visualizzata la pagina grazie-ordine.php, è un po' bruttino vedere tutta quella pappardella di roba (anche se non è 'pericoloso'), no?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.