Problema passaggio variabili tra pagine

navajo75

Utente Attivo
16 Mar 2012
103
1
18
Buongiorno a tutti,
ho un file che si chiama mese.php in cui è inserito il seguente codice

Codice:
  if (isset($corrispettiviins)) {
    echo '<a href="php/verifica-febbraio.php?mese=Febbraio&corrispettiviins=inscorrispettivi"><img src="img/febbraio.png" /></a>';
  }  else {
       echo '<a href="php/verifica-febbraio.php?mese=Febbraio&corrispettivicons=conscorrispettivi"><img src="img/febbraio.png" /></a>';
      }

La variabile $corrispettiviins è settata e viene recuperata da un'altra pagina, anno.php, attraverso il GET, come a seguire

Codice:
  if (!isset($_GET['corrispettiviins'])) {
    } else {    
        $corrispettiviins=$_GET['corrispettiviins'];
      $posizionemeseins="Inserimento corrispettivi";
    }
  if (!isset($_GET['corrispettivicons'])) {
  } else {
        $corrispettivicons=$_GET['corrispettivicons'];
      $posizionemesecons="Consultazione corrispettivi";
    }

Dalla pagina mese.php, mi sposto alla pagina verifica-mese.php, dove, come prima cosa eseguo il controllo su quale variabile sia settata, $corrispettiviins o $corrispettivicons, utilizzando lo stesso codice di cui sopra, quindi:

Codice:
  if (!isset($_GET['corrispettiviins'])) {
    } else {    
        $corrispettiviins=$_GET['corrispettiviins'];
      $posizionemeseins="Inserimento corrispettivi";
    }
  if (!isset($_GET['corrispettivicons'])) {
  } else {
        $corrispettivicons=$_GET['corrispettivicons'];
      $posizionemesecons="Consultazione corrispettivi";
    }

e poi mando al mese corretto, febbraio.php o febbraio-bisestile.php, a seconda che l'utente scelga un anno in cui febbraio è bisestile o normale

Codice:
  if (isset($corrispettiviins)&&($year==2016)OR($year==2020)OR($year==2024)OR($year==2028)OR($year==2032)OR($year==2036)):
    header("Location: ../febbraio-bisestile.php?corrispettiviins=inscorrispettivi");
  elseif (isset($corrispettivicons)&&($year==2016)OR($year==2020)OR($year==2024)OR($year==2028)OR($year==2032)OR($year==2036)):    
    header("Location: ../febbraio-bisestile.php?corrispettivicons=conscorrispettivi");
  elseif (isset($corrispettiviins)&&($year!=2016)OR($year!=2020)OR($year!=2024)OR($year!=2028)OR($year!=2032)OR($year!=2036)):
    header("Location: ../febbraio.php?corrispettiviins=inscorrispettivi");
  elseif (isset($corrispettivicons)&&($year!=2016)OR($year!=2020)OR($year!=2024)OR($year!=2028)OR($year!=2032)OR($year!=2036)):
    header("Location: ../febbraio.php?corrispettivicons=conscorrispettivi");
  endif;

Cosa ottengo? Se l'utente scegli d'inserire i corrispettivi funziona tutto correttamente, sia che si scelga il febbraio di un anno bisestile, sia che si scelga il febbraio di un anno non bisestile.
I problemi cominciano quando l'utente sceglie di consultare i corrispettivi. Se si sceglie consultazione, anno 2016 e febbraio ok, ma come si sceglie un anno diverso, sballa tutto. Se ad esempio si sceglie anno 2017, nel riepilogo della pagina, ricevo l'informazione che sto inserendo i corrispettivi, anche se ho scelto di consultarli; e così anche se scelgo altri anni bisestili che non siano il 2016.
Per provare a capire meglio, sempre nella pagina verifica.php, ho inserito il seguente codice:

Codice:
  $uno="Primo caso. Inserimento corrispettivi-anno bisestile.";
  $due="Secondo caso. Consultazione corrispettivi-anno bisestile.";
  $tre="Terzo caso. Inserimento corrispettivi-anno non bisestile.";
  $quattro="Quarto caso. Consultazione corrispettivi-anno non bisestile.";

  if (isset($corrispettiviins)&&($year==2016)OR($year==2020)OR($year==2024)OR($year==2028)OR($year==2032)OR($year==2036)):
    echo $uno;
  elseif (isset($corrispettivicons)&&($year==2016)OR($year==2020)OR($year==2024)OR($year==2028)OR($year==2032)OR($year==2036)):    
    echo $due;
  elseif (isset($corrispettiviins)&&($year!=2016)OR($year!=2020)OR($year!=2024)OR($year!=2028)OR($year!=2032)OR($year!=2036)):
    echo $tre;
  elseif (isset($corrispettivicons)&&($year!=2016)OR($year!=2020)OR($year!=2024)OR($year!=2028)OR($year!=2032)OR($year!=2036)):
    echo $quattro;
  endif;

Ed ecco cosa ottengo:
1) Inserimento corrispettivi anno 2016, o 2020, o 2024, o 2028, o 2032, o 2036: Primo caso. Inserimento corrispettivi-anno bisestile (CORRETTO)
2) Inserimento corrispettivi con qualunque anno non bisestile: Terzo caso. Inserimento corrispettivi-anno non bisestile (CORRETTO)
3) Consultazione corrispettivi anno 216: Secondo caso. Consultazione corrispettivi-anno bisestile (CORRETTO)
4) Consultazione corrispettivi con qualunque altro anno bisestile (2020, 2024, 2028, 2032, 2036): Primo caso. Inserimento corrispettivi-anno bisestile (NON CORRETTO)
5) Consultazione corrispettivi con qualunque altro anno non bisestile: Terzo caso. Inserimento corrispettivi-anno non bisestile (NON CORRETTO)

Ringrazio con anticipo chiunque voglia aiutrami
Saluti,
Marco
 

Hormus

Utente Attivo
26 Giu 2020
83
10
8
lei usa il parametro GET per identificare un singolo valore, sarà valido se presente esattamente uno e verifica se la variabile è vero e poi se vero o vero, aggiunto parentesi graffa e sostituito OR con && poiché non bisestile su un range di 2016-2020-2024-2028-2032-2036 è valido solo se tutti restituiscono true o l'unico false e in quel caso l'anno è bisestile.
PHP:
//un solo parametro altrimenti non valido
if(isset($_GET['corrispettiviins']) || isset($_GET['corrispettivicons'])) {
//per register_globals
unset($corrispettiviins, $corrispettivicons);
    if(!isset($_GET['corrispetivicons'])) {
        $corrispettiviins=$_GET['corrispettiviins'];
        $posizionemeseins="Inserimento corrispettivi";
    } elseif(!isset($_GET['corrispettiviins'])) {
        $corrispettivicons=$_GET['corrispettivicons'];
        $posizionemesecons="Consultazione corrispettivi";
    } else {
        unset($_GET['corrispettiviins'], $_GET['corrispettivicons']); // in realtà per la variabile $_GET occorrerebbe un redirect senza quella variabile GET ma comunque è solo un un'esempio.
    }
}
  $uno="Primo caso. Inserimento corrispettivi-anno bisestile.";
  $due="Secondo caso. Consultazione corrispettivi-anno bisestile.";
  $tre="Terzo caso. Inserimento corrispettivi-anno non bisestile.";
  $quattro="Quarto caso. Consultazione corrispettivi-anno non bisestile.";

  if (isset($corrispettiviins)&&(($year==2016)OR($year==2020)OR($year==2024)OR($year==2028)OR($year==2032)OR($year==2036))):
    echo $uno;
  elseif (isset($corrispettivicons)&&(($year==2016)OR($year==2020)OR($year==2024)OR($year==2028)OR($year==2032)OR($year==2036))):
    echo $due;
  elseif (isset($corrispettiviins)&&(($year!=2016)&&($year!=2020)&&($year!=2024)&&($year!=2028)&&($year!=2032)&&($year!=2036))):
    echo $tre;
  elseif (isset($corrispettivicons)&&(($year!=2016)&&($year!=2020)&&($year!=2024)&&($year!=2028)&&($year!=2032)&&($year!=2036))):
    echo $quattro;
  endif;
Oppure riscrivi il secondo codice con l'operatore ternario e verifichi comunque se è vero se per due operazioni è false restituirà la stringa vuota o altrimenti una stringa numerica da 1 a 4 per questo motivo utilizzo anche if per verificare diversa da stringa vuota.
PHP:
$range_leap_year = array(''.'2016', ''.'2020', ''.'2024', ''.'2028', ''.'2032');
if(($result = (in_array("$year", $range_leap_year, true) ? (isset($corrispettiviins) ? '1' : (isset($corrispettivicons) ? '2' : '')) : (isset($corrispettiviins) ? '3' : (isset($corrispettivicons) ? '4' : '')))) !== '') {
    echo $result;
}
Fix prima parte codice.
Poi se sei sicuro della logica del tuo codice la stringa vuota è superflua.
 
Ultima modifica:

navajo75

Utente Attivo
16 Mar 2012
103
1
18
La ringrazio infinitamente. Funziona in questa maniera qua:

Codice:
session_start();
  
  if (!isset($_GET['corrispettiviins'])) {
  } else {    
     $corrispettiviins=$_GET['corrispettiviins'];
      $posizionemesesceltoins="Inserimento corrispettivi";
    }
  if (!isset($_GET['corrispettivicons'])) {
  } else {
        $corrispettivicons=$_GET['corrispettivicons'];
      $posizionemesesceltocons="Consultazione corrispettivi";
    }
    
  $year=$_SESSION['year'];
  $mese=$_GET['mese'];
  $_SESSION['month']=$mese;
  $month=$_SESSION['month'];

  $range_leap_year = array(''.'2016', ''.'2020', ''.'2024', ''.'2028', ''.'2032', ''.'2036');
if(($result = (in_array("$year", $range_leap_year, true) ? (isset($corrispettiviins) ? header("Location: ../febbraio-bisestile.php?corrispettiviins=inscorrispettivi") : (isset($corrispettivicons) ? header("Location: ../febbraio-bisestile.php?corrispettivicons=conscorrispettivi") : '')) : (isset($corrispettiviins) ? header("Location: ../febbraio.php?corrispettiviins=inscorrispettivi") : (isset($corrispettivicons) ? header("Location: ../febbraio.php?corrispettivicons=conscorrispettivi") : '')))) !== '') {
    echo $result;
}

Devo chiudere il post in qualche modo?
Di nuovo, mille grazie
 

Hormus

Utente Attivo
26 Giu 2020
83
10
8
No è sbagliato per la prima parte del codice le ho scritto il perché.. comunque va bene che ha risolto.
Editato il messaggio precedente. Fix prima parte del codice.
Se per l'esito vero e dunque dalla stringa numerica da 1 a 4 deve semplicemente impostare un header può togliere l'if
PHP:
$result = (in_array("$year", $range_leap_year, true) ? (isset($corrispettiviins) ? header("Location: ../febbraio-bisestile.php?corrispettiviins=inscorrispettivi") : (isset($corrispettivicons) ? header("Location: ../febbraio-bisestile.php?corrispettivicons=conscorrispettivi") : '')) : (isset($corrispettiviins) ? header("Location: ../febbraio.php?corrispettiviins=inscorrispettivi") : (isset($corrispettivicons) ? header("Location: ../febbraio.php?corrispettivicons=conscorrispettivi") : '')));
 
Ultima modifica:

MarcoGrazia

Utente Attivo
15 Dic 2009
852
20
28
62
Udine
www.stilisticamente.com
Quello che non capisco è questo: $range_leap_year = array(''.'2016', ''.'2020', ''.'2024', ''.'2028', ''.'2032', ''.'2036'); ma definire se l'anno è bisestile o meno con una funzione?

PHP:
if  ( ( $anno % 4 == 0 ) && ( !($anno % 100 == 0 ) || ( $anno % 400 == 0 ) ) )
{
$anno = bisesto
}
else
{
$anno = non bisesto
}
Se uno inserisce dati prima del 2016 che fai modifichi il programma? Se ci sono previsioni dopo il 2036 che fai modifichi il programma?

Poi vedo che non controlli cosa viene passato via GET, ti affidi alla sicurezza di una variabile calcolata e inserita dal programma nel link, ma se uno la modifica arbitrariamente mettendoci un valore non numerico?
Il programma va in crash?
 
Discussioni simili
Autore Titolo Forum Risposte Data
A Problema con getCurrentPosition e passaggio variabili da javascript a PHP Javascript 3
R Problema passaggio variabili POST PHP 0
J problema passaggio di variabili Classic ASP 0
D Problema Passaggio variabili Classic ASP 2
S Flash & PHP - Problema passaggio variabili! Flash 1
M Problema passaggio variabili in asp Classic ASP 2
andreas88 Problema installazione passaggio 2 Magento Magento 0
A Problema nel passaggio di una animazione da flash a animate Flash 9
ESABOT Problema passaggio dati tra activity tramite intent Sviluppo app per Android 1
G [PHP] Problema nel passaggio del valore mese PHP 8
T Problema con il passaggio dati metodo "POST" PHP 1
F Problema con passaggio variabile da form PHP 3
B Problema su passaggio dati da form Classic ASP 1
M [RISOLTO]Problema controllo e passaggio di valori da una pagina all''altra PHP 4
S problema di passaggio parametri Javascript 0
P Problema passaggio di valori da una pagina php ad un'altra PHP 2
S problema passaggio di parametri tra due pagine php PHP 7
V problema passaggio di dati Javascript 0
V problema riguardante l'apertura di pagine e passaggio dati nei div Javascript 0
P problema passaggio valore javascript a select su pagine php Javascript 0
LaKanka Problema passaggio parametri PHP 2
G problema passaggio parametri form-php PHP 1
cosov Problema con passaggio dati tra pagine asp Classic ASP 5
K Problema form update PHP 2
O problema con dvr dahua xvr5116 IP Cam e Videosorveglianza 0
S Problema nel ciclare un json Javascript 0
G Problema con Xampp Web Server 1
andrea barletta Problema con miniature comandi Photoshop 0
I problema con alice Posta Elettronica 0
K Problema Inner join PHP 1
F firefox problema http Linux e Software 0
N Problema con position absolute e overflow HTML e CSS 4
E Problema jquery Success jQuery 2
L Problema con inner join PHP 11
K [php] Problema con inner join PHP 4
E problema selezione sfumata Photoshop 2
K [PHP] Problema con variabili concatenate. PHP 1
A Problema filtro fluidifica Photoshop Photoshop 1
H Problema Bordi Scontorno Photoshop 1
O problema con query PHP 4
R Problema installazione Realtek WiFi USB rtl8821 Reti LAN e Wireless 0
I problema con 2 account Posta Elettronica 1
L problema collegamento file css con html HTML e CSS 1
Y Problema percorso file in rete PHP 1
N Problema SEO "L'URL non si trova su Google" SEO e Posizionamento 4
E Problema accesso a file con app sviluppata con MIT APP INVENTOR 2 Sviluppo app per Android 0
P Problema acquisizione clienti Webdesign e Grafica 1
F NetBeans problema creazione progetto Java Windows e Software 0
M Problema con Try Catch PHP 0
C problema seo + cerco esperto SEO e Posizionamento 11

Discussioni simili