[PHP] Passare variabile di sessione con metodo GET

maxus68

Utente Attivo
1 Nov 2016
23
0
1
55
Ciao a tutti,
sto diventando matto con una cosa che all'apparenza dovrebbe essere semplice ma che per chi come me sta imparando non lo è.

Ho un elenco di clienti (index.php) prelevato da db e ogni riga presenta un pulsante Elimina, alla pressione di tale pulsante mi si apre la pagina elimina.php con i dettali del cliente dell'ID della riga.

Il problema sta nel fatto che quella variabile con il numero dell'ID la devo conservare nella pagina elimina.php per fare ulteriori operazioni, così ho deciso di usare una variabile di sessione.

Il codice della form è il seguente:
PHP:
echo '<td><form action="elimina.php" method="GET"><input type="hidden" name="idnota" value='.$row["IDNota"].'>
        <input type="submit" class="btnmodif" value="ELIMINA"></form></td>';

Nella pagina elimina.php inserisco
PHP:
 @$Id=$_GET['idnota'];
e tutto funziona perfettamente.

Il problema nasce quando creo la variabile di sessione:
PHP:
@$uno = $_GET['idnota'];
 $_SESSION['due'] = $uno;

ma nella pagina elimina.php il semplice echo non restituisce nulla
PHP:
 echo $_SESSION['due'];

Lo stesso codice utilizzandolo nella pagina index.php dove è presente l'elenco mi restituisce regolarmente l'ID del cliente alla pressione del pulsante.

Ho provato in vari modi ma non ne riesco venire a capo.

Spero di essere stato abbastanza chiaro nella spiegazione e ringrazio chiunque mi possa dare una mano.

Massimo
 

zorro

Utente Attivo
20 Ott 2014
322
21
28
ROMA
Ciao Maxus,
prima di usare le sessioni devi sempe anteporre la funzione

PHP:
session_start();

Inoltre ti sconsiglio di usare il simbolo @ in quanto, se non sbaglio (non l'ho mai usato) non ti fa vedere gli eventuali messaggi d'errore . Ciao


Zorro
 

maxus68

Utente Attivo
1 Nov 2016
23
0
1
55
Ciao Zorro,
la sessione vien avviata correttamanete in tutte e due le pagine.
Adesso però sembra funzionare:
PHP:
// nella index.php
echo '<td><form action="elimina.php" method="GET"><input type="hidden" name="idnota" value='.$row["IDNota"].'>
          <input type="submit" class="btnmodif" value="ELIMINA"></form></td>';  

//nella elimina.php
$Id = $_GET['idnota'];
$_SESSION['due'] = $Id ;

Il problema però è che il seguente codice non funziona nel senso che non cancella il record come se IDNota fosse null, e tra l'altro non restituisce errori (nome tabella e campo sono corretti!)
PHP:
if (isset($_POST['btnsi'])){
$query = "DELETE FROM tbl_note WHERE IDNota='" . $_SESSION['due'] . "';";
mysqli_query($conn,$query);
                
echo "Nota correttamente eliminata!";
            }
 

zorro

Utente Attivo
20 Ott 2014
322
21
28
ROMA
eventualmente puoi, prima della query, verilficare, tramite una echo, i vaori di btnsi, di due e di IDNota per verificare i dati passati e se effettivamente ti passa qualcosa
 

maxus68

Utente Attivo
1 Nov 2016
23
0
1
55
Se metto l'ECHO prima della IF il valore di due mi appare, mentre se lo metto subito dopo sparisce
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
Se metto l'ECHO prima della IF il valore di due mi appare, mentre se lo metto subito dopo sparisce
nel tuo codice é presente $_POST['btnsi'], probabilmente non é stata valorizzata

hai usato GET potrebbe essere POST sbagliato

se pubblichi elimina.php, si può capire meglio la sequenza delle operazioni,

a me sembra che,
1 produci una lista di oggetti passibili di cancellazione,
2 alla scelta del bottone "cancella", visualizzi le informazioni complete dell'oggetto
3 alla conferma con il bottone "btnsi" viene eseguita la cancellazione fisica

il 2 e 3 step sono gestiti dallo stesso script elimina.php

se ciò é vero controlla il passaggio delle variabili tra un'operazione e l'altra
 

maxus68

Utente Attivo
1 Nov 2016
23
0
1
55
Ciao Marino,
con lo script che vedi sotto (elimina.php) sono riuscito a fare quello che volevo e cioè premendo il pulsante SI o NO mi elimina o meno il record.

Però secondo me non è la soluzione più corretta, intendo dire che vorrei capire il motivo per cui la variabile di sessione $_SESSION['idok'] si svuota nel momento in cui entra nella IF


PHP:
// pagina index.php

<?php
    session_start();
 ?>
.....
echo '<td><form action="elimina.php" method="GET"><input type="hidden" name="idnota" value='.$row["IDNota"].'>
          <input type="submit" class="btnmodif" value="ELIMINA"></form></td>';       



// pagina elimina.php
<?php
    session_start();
    ?>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
    <title>Untitled</title>
        <link rel="stylesheet"  type="text/css" href="../zappellini/css/noteelimina.css"/>  

</head>

<body>

<?php
        @$Id = $_GET['idnota'];
        $_SESSION['idok'] = $Id ;      

//stabilire la connessione      
        $conn = mysqli_connect("localhost","root","");
       
        if ($conn->connect_errno) {
        echo "Connessione fallita: ". $conn->connect_error . ".";
        exit();
        }
       
//selezionare il db
        mysqli_select_db($conn,"my_zappellini");
       
// chiedo conferma
        echo "<div class='domanda'>";
        echo "Stai per cancellare la Nota numero " . $_SESSION['idok'] . " vuoi continuare?";
        echo "</div>";

?>
<form action="elimina.php" method="POST">
<table align=center >
    <td><input type="hidden" name="SI" class="btnSi" value="<?php echo $_SESSION['idok'] ?>"></td>
    <td><input type="submit" name="btnsi" class="btnSi" value="SI"></td>
    <td></td>
    <td><input type="submit" name="btnno" class="btnNo" value="NO"></td>
</table>
</form>

<?php
    if (isset($_POST['btnsi'])){
    $idok = $_POST['SI'];
    //$query = "DELETE FROM tbl_note WHERE IDNota='$idok';";
    //$query = "DELETE FROM tbl_note WHERE IDNota='" . $_SESSION['due'] . "';";
    //mysqli_query($conn,$query);
    echo "<div class='notadelete'>";
    echo "Nota correttamente eliminata!";
    echo "</div>";
    }

    if (isset($_POST['btnno'])){
    echo "Nota NON eliminata";
    exit;
    }
?>
<p align="center" ><a href="index.php">TORNA ALL'ELENCO</a></p>

</body>
</html>
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
Però secondo me non è la soluzione più corretta, intendo dire che vorrei capire il motivo per cui la variabile di sessione $_SESSION['idok'] si svuota nel momento in cui entra nella IF
perché chiami 2 volte lo script elimina,
la prima volta passando parametri in GET
la seconda volta in POST
in maniera abbastanza confusa,

come ti ho scritto stai facendo 3 "operazioni" con 2 script
andrebbe riscritto tutto, ma volendo mantenere il tuo modo di operare,
suddivido il tuo codice in 3 script e lascio a te la sistemazione complessiva

index.php
PHP:
// pagina index.php

<?php
    session_start();
 ?>
.....
echo '<td>
          <form action="conferma.php" method="GET">
              <input type="hidden" name="idnota" value='.$row["IDNota"].'>
              <input type="submit" class="btnmodif" value="ELIMINA">
          </form>
      </td>';

conferma.php
PHP:
// pagina conferma.php
<?php
    session_start();

    $Id = $_GET['idnota'];
    $_SESSION['idok'] = $Id ;    
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
    <title>Untitled</title>
        <link rel="stylesheet"  type="text/css" href="../zappellini/css/noteelimina.css"/>
</head>
<body>
<?php
// chiedo conferma
        echo "<div class='domanda'>";
        echo "Stai per cancellare la Nota numero " . $_SESSION['idok'] . " vuoi continuare?";
        echo "</div>";
?>
<form action="elimina.php" method="POST">
<table align=center >
    <td><input type="hidden" name="SI" class="btnSi" value="<?php echo $_SESSION['idok'] ?>"></td>
    <td><input type="submit" name="btnsi" class="btnSi" value="SI"></td>
    <td></td>
    <td><input type="submit" name="btnno" class="btnNo" value="NO"></td>
</table>
</form>
</body>
</html>

elimina.php
PHP:
// pagina elimina.php
<?php
    session_start();

//stabilire la connessione    
        $conn = mysqli_connect("localhost","root","");
     
        if ($conn->connect_errno) {
        echo "Connessione fallita: ". $conn->connect_error . ".";
        exit();
        }
     
//selezionare il db
        mysqli_select_db($conn,"my_zappellini");

    if (isset($_POST['btnsi'])){
    $idok = $_POST['SI'];
    //$query = "DELETE FROM tbl_note WHERE IDNota='$idok';";
    //$query = "DELETE FROM tbl_note WHERE IDNota='" . $_SESSION['due'] . "';";
    //mysqli_query($conn,$query);
    echo "<div class='notadelete'>";
    echo "Nota correttamente eliminata!";
    echo "</div>";
    }

    if (isset($_POST['btnno'])){
    echo "Nota NON eliminata";
    exit;
    }
?>
<p align="center" ><a href="index.php">TORNA ALL'ELENCO</a></p>

in questo modo puoi evitare l'uso di session, perché passi i parametri tra uno scrip e l'altro in sequenza

se hai ancora problemi fatti vivo
 
Ultima modifica:

maxus68

Utente Attivo
1 Nov 2016
23
0
1
55
Grazie Marino.
Anche io avevo pensato ad una cosa del genere ma mi sembrava quanto meno curioso dover fare un passaggio intermedio (conferma.php) mentre mi pare di capire che sia necessario.

Io ho programmato per anni con la programmazione ad oggetti e oggettivamente mi trovo in difficoltà con il PHP tenuto conto anche che non lo faccio di professione ma solo per passione
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
considera che server e client sono due entità che "non si conoscono",
il client invia una richiesta, il server risponde e tutto finisce
il server NON tiene aperto un "eseguibile" per quel client

il server non ha più nessun valore di quel client, dopo aver inviato la risposta, salvo sessioni (sul server) e cookies (sul client)

ogni volta che viene eseguito un "submit" il server risponde e ha finito il suo compito, tutte le variabili php sono perse

d'altra parte php é un "editor" per comporre pagine dinamiche (denigrandolo un po')

ripeto, é necessario capire che il server risponde, componendo la pagina di risposta ed ha finito il lavoro

poi i 3 passi,
lista con scelta dell'elemento (submit)
conferma (submit)
eliminazione
possono essere gestiti con 3 script o anche con 1 solo,
ma deve essere chiaro che quell'uno, viene chiamato 3 volte e deve gestire la situazione
 
Ultima modifica:

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
aggiungendo uno specifico codice javascript alla "pagina" di risposta con la lista, si possono ottenere benefici,
per esempio la conferma potrebbe essere demandata al client (non al server come nell'originale)
risparmiando una richiesta al server e relativa risposta

richiesta al server e risposta con la lista per la scelta dell'elemento

submit intercettato da javascript che gestisce la conferma

richiesta al server per eliminazione dell'elemento, risposta con una nuova lista
o ritorno alla lista (già attiva, senza richiesta al server) se possibile, in caso di non conferma
 
Ultima modifica:
Discussioni simili
Autore Titolo Forum Risposte Data
F Passare una variabile php dal DB mysql alla pagina PHP 3
L [PHP] Passare variabile PHP 3
AMONRA75 [PHP] passare una variabile in una finestra MODAL PHP 1
K [PHP] Paginazione Wordpress: passare variabile PHP 6
T [PHP] passare una variabile in una finestra MODAL di bootstrap PHP 3
G Passare valore ad una variabile con jQuery e PHP PHP 1
A passare variabile ad un file PHP da acquisire con $_GET PHP 3
B AIUTO: come passare una variabile php ad una funzione javascript Javascript 2
neo996sps Passare variabile su include di file php PHP 2
V passare la scelta di una select ad un variabile php PHP 5
U passare una variabile di sessione da pagina di joomla a pagina php Joomla 3
P passare valore variabile da javascript a php Javascript 1
G passare una variabile da una prompt js a php Javascript 1
E Passare variabile php a JS Javascript 0
S passare un valore da un form a un file .php con metodo post PHP 4
N Passare array da php a javascript PHP 5
D passare valori da database sql a php PHP 1
G [PHP] Passare dati tra record PHP 4
M Passare una varibile da PHP a Javascript PHP 2
B [PHP] passare valore ad un form su un'altra pagina PHP 4
V Passare a PHP pagina bootstrap creata in HTML PHP 1
A passare parametri ad un file php prima di utilizzare $.get jQuery 1
A [PHP] Passare variabili tra pagine diverse PHP 2
K [PHP] Passare valore select PHP 2
SimooRu [PHP] Non riesco a far passare i dati con i form PHP 4
A Passare variabili da javascript a PHP PHP 8
marino51 passare array da php a javascript PHP 5
G Passare loop in php su uno script javascript PHP 12
L Errore nel passare più valori tra pagine php PHP 10
G Come far passare un valore attraverso il metodo POST utiliazzando PHP a jQuery PHP 4
L come passare il campo allegato dal file html al fiel php per spedirlo con un form PHP 12
L Passare valori da script js a PHP Javascript 0
P Passare un valore, o arriare una funzione da pagina2.php in pagina1.php Javascript 2
L Passare ad uno script PHP i dati di un form incluso l'upload di un'immagine Ajax 0
A passare variabili da javascript a php PHP 3
C passare variabili da php a javascript Javascript 13
C php, passare i valori di una lista PHP 4
N passare variabili da php a popup js,e viceversa Javascript 2
A Passare la risoluzione da javascript a php in modo trasparente PHP 31
M [php] passare valore di una select ] PHP 0
G aiuto:passare dati da html a php PHP 1
B Come faccio a passare l'URL dove mi trovo ad un iframe php Javascript 2
A Passare un array ad un'altra pagina .php PHP 1
B Passare un array da html a php PHP 1
F Cerco Hosting con VECCHIE versioni di php Hosting 0
Cosina Captcha php PHP 1
N php msyql PHP 6
N php problemi a visualizzare video PHP 3
A menu a tendina php PHP 1
D protezione cartelle: blocco visualizzazione/scaricamento contenuto, ma abilitazione utilizzo dati da parte di file .php presenti sul sito Web Server 1

Discussioni simili