Problema con le sessioni

Salve a tutti , avete  10 secondi per dirmi chi ha inventato i cookie e le sessioni ..... meno 9 , 8 , 7 , 4 , 2 , 1 ....

Tempo scaduto !! , vabbè sarà per la prossima volta ,  meditate gente , meditate .....

Scherzi a parte , ho un piccolo grande problema con le sessioni , cambio tono e mi spiego meglio

Avrei le seguenti necessità :

1 - Memorizzare   TUTTO  quello che viene digitato nel Form di ricerca in un file di sessione .

2 - Nel caso il TESTO  venisse ripetuto a distanza di pochissimo tempo ( essendo digitato nuovamente nel Form ) , dovrei far partire un suono ( piacevole si intende , mica una puzzetta ) .

Utilizzando il codice sottostante riesco solo a memorizzare il primo testo digitato , dal secondo in poi neanche a parlarne .

Qualcuno sa dirmi come potrei fare ?

<?php
session_start();
$_session['nome'] = "parola";
if (!($chiave)){
session_register("chiave");
}
?>

Saluti alla comunità

inviato 7 anni fa
Exe
Exe
1
X 0 X

session_register è una funzione obsoleta, non dovresti mai utilizzarla! Le sessioni si usano così:

http://www.phpnews.it/articoli/le-sessioni/2/

Inoltre $chiave da dove viene? Register global?

 :bye:

risposto 7 anni fa
Gianni Tomasicchio
X 0 X

Salve Gianni

Grazie intanto per la risposta

Ho dato un'occhiata all'articolo , ma non ho capito come applicare quelle info per risolvere il mio problema ,

intanto potrei sostituire  $_session  con $_SESSION  e togliere session_register , ma come faccio a memorizzare tutto quello che viene digitato nel Form nel file di sessione ?

$chiave da dove viene?

E la mia chiave di ricerca , posto uno spezzone del codice :

<?php

$chiave=$_REQUEST['chiave']; 

top();

$db = mysql_connect($db_host, $db_user, $db_password);

if ($db == FALSE)

die ("Errore nella connessione. Verificare i parametri nel file conf.php");

mysql_select_db($db_name, $db)

or die ("Errore nella selezione del database. Verificare i parametri nel file conf.php");

$keys = explode (",", $chiave);

$query = "";

reset ($keys);

while (list(,$parola) = each ($keys))

{ $parola = trim($parola);

if ($parola != "")

$query .= "titolo =  parola ..........  segue poi SELECT  ecc.. ecc .....

?>

Nota - Il Form di ricerca si trova su due pagine uguali , sulla prima digiti il testo da cercare e sulla seconda visualizza il risultato e ovviamente anche il Form per un'altra ricerca , e via dicendo ........

            Salutoni e Grazie per adesso !             :bye:

risposto 7 anni fa
Exe
Exe
1
modificato 7 anni fa
X 0 X

Supponiamo che vuoi evitare che la ricerca venga eseguita 2 volte con gli stessi dati inseriti dall'utente.

Prima controlli che non ci siano memorizzati in sessione dei dati di una precedente ricerca. Se non ci sono allora devi solo memorizzare in sessione i dati della ricerca corrente, altrimenti se ci sono controlli che non siano uguali. Se sono uguali allora significa che l'utente sta ripetendo la ricerca, altrimenti è una nuova ricerca, che va memorizzata in sessione

<?php
if(!isset($_SESSION['nome_campo_1']) {
   $_SESSION['nome_campo_1'] = $_POST['nome_campo_1'];
   $_SESSION['nome_campo_2'] = $_POST['nome_campo_2'];
   $_SESSION['nome_campo_3'] = $_POST['nome_campo_3'];
} else {
   if($_SESSION['nome_campo_1'] == $_POST['nome_campo_1'] && $_SESSION['nome_campo_2'] == $_POST['nome_campo_2'] && $_SESSION['nome_campo_3'] == $_POST['nome_campo_3']) {
      echo 'ERRORE, non puoi ripetere la ricerca';
   } else {
      $_SESSION['nome_campo_1'] = $_POST['nome_campo_1'];
      $_SESSION['nome_campo_2'] = $_POST['nome_campo_2'];
      $_SESSION['nome_campo_3'] = $_POST['nome_campo_3'];
   }
}

Se vuoi anche gestire il concetto di ricerche fatte a breve distanza di tempo potresi memorizzare in sessione anche l'instante in cui viene eseguita la ricerca e poi confrontarlo con l'istante corrente per decidere se è possibile effettuare una nuova ricerca identica.

 :bye:

risposto 7 anni fa
Gianni Tomasicchio
X 0 X

Uhm.... davvero niente male

provo subito e ti faccio sapere !

 Grazie intanto   

risposto 7 anni fa
Exe
Exe
1
X 0 X

A rieccomi ...

<?php

if(!isset($_SESSION['nome_campo_1']) {

   $_SESSION['nome_campo_1'] = $_POST['nome_campo_1'];

   $_SESSION['nome_campo_2'] = $_POST['nome_campo_2'];

   $_SESSION['nome_campo_3'] = $_POST['nome_campo_3'];

scusa ma visto che il campo del Form di ricerca e uno solo e anche la  $chiave e una sola

cosa devo metterci al posto di  nome_campo_1 , 2 , 3      ?

risposto 7 anni fa
Exe
Exe
1
X 0 X

I campi 1, 2 e 3 sono degli ipotetici campi del form di ricerca. Se il tuo form ha solo un campo allora cancella dal codice ogni riferimento agli altri 2. Ovviamente devi rinominare "nome_campo_1" con il vero nome del campo nel form.

 :bye:

risposto 7 anni fa
Gianni Tomasicchio
X 0 X

Ok mi ero un po confused

Ho modificato il codice che mi hai postato in questo modo :

<?php
session_start();
if(!isset($_SESSION['ricerca'])) {
   $_SESSION['ricerca'] = $_POST['ricerca'];   
} else {
   if($_SESSION['ricerca'] == $_POST['ricerca']) {
     echo 'ERRORE, non puoi ripetere la ricerca'; 
   } else {
      $_SESSION['ricerca'] = $_POST['ricerca'];      
   }
}
?>

Così però non funge , se al posto di ricerca metto chiave invece funziona , ma non memorizza tutti

i termini digitati , di conseguenza funziona SOLO se digito due volte di seguito lo stesso termine ,

che ne pensi ?

  Ciao  Gianni   e grazie naturalmente per l'aiuto che finora mi hai dato !

 O0

risposto 7 anni fa
Exe
Exe
1
X 0 X

Se il campo di testo nel form si chiama "chiave" alora dovrai usare "chiave" nello script. Il codice che ti ho riportato ovviamente funziona solo se si ripete esattamente la stessa ricerca, usando lo stesso testo come chiave.

 :bye:

risposto 7 anni fa
Gianni Tomasicchio
X 0 X

Ciao Gianni  sempre felice di risentirti .

La stringa $chiave sta per chiavi da ricercare ma chiave sta anche nel campo di testo come puoi vedere sotto

<form method=post action=provasessione.php> 

<input type="text" name="chiave" size="70" style= ecc..... </form>   

funziona solo se si ripete esattamente la stessa ricerca, usando lo stesso testo come chiave

Come ho detto prima non e che non funziona , funziona solo se digito nel form , supponiamo :

America , premo invio , e poi di nuovo America .  Se invece cerco America , India e poi di nuovo America non va più , si e dimenticato del testo precedentemente digitato .

Infatti se guardo nel file di sessione , mi viene aggiornato ogni volta cancellando il precedente , io credo che il problema sia quì cioè nel riuscire a fargli memorizzare tutto , allora eseguendo il controllo dovrebbe trovare anche il testo digitato per esempio 2 o 3 minuti fa .

          Saluti   " sempre accompagnati da un grazie"

 

risposto 7 anni fa
Exe
Exe
1
X 0 X

Ok, adesso mi è più chiaro.

Ovviamente l'esempio che ti ho riportato memorizza solo l'utlima ricerca, non tutte le ricerche. Non è impossibile ottenere quello che dici ma è MOLTO più complicato. $_SESSION['chiave'] dovrebbe essere utilizzato come un array, per contenere tutte le ricerche fatte. Ad ogni elemento di questo array dovrebbe essere associato l'istante di ricerca (timestamp).

Ad ogni ricerca, come prima cosa, questo array andrebbe svuotato degli elementi "vecchi", ovvero quelli che hanno associato un timestamp inferiore a quello corrente meno, ad esempio, due minuti. Con l'array ripulito che rimane bisognerebbe verificare se è presente la chiave di ricerca corrente.

Non mi chiedere di scriverti lo script perché richiede più di 5 minuti per essere realizzato

 :bye:

risposto 7 anni fa
Gianni Tomasicchio
X 0 X
Non mi chiedere di scriverti lo script perché richiede più di 5 minuti per essere realizzato

Non voglio chiederti troppo , ma con il codice sottostante a quanti minuti scendiamo ?

<?php
session_start();
if (!isset($_SESSION['chiave']) || !is_array($_SESSION['chiave'])) 
    $_SESSION['chiave']=array();
 
if(!in_array($_POST['chiave'],$_SESSION['chiave'])) 
    $_SESSION['chiave'][]=$_POST['chiave'];  
?>

Si va verso la strada giusta ?

              Saluti      O0

risposto 7 anni fa
Exe
Exe
1
X 0 X

Ti sei avvicinato, ma come puoi intuire, non c'è alcun riferimento all'istante in cui sono state effettuate le precedenti ricerche.  Come puoi evitare di ripetere solo le ricerche duplicate effettuate negli ultimi 2 minuti?

:bye:

risposto 7 anni fa
Gianni Tomasicchio
X 0 X
Ti sei avvicinato, ma come puoi intuire, non c'è alcun riferimento all'istante in cui sono state effettuate le precedenti ricerche.

Il codice riguarda soltanto la costruzione di un array .......

Come puoi evitare di ripetere solo le ricerche duplicate effettuate negli ultimi 2 minuti?

Risposta - non lo so ............  mi sa che finirò per fondermi il cervello !

                        Ciao Gianni , grazie comunque per i suggerimenti che mi hai dato

                        Mangiatevi un castoro e salverete un albero

risposto 7 anni fa
Exe
Exe
1
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda