+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 7 su 7

La variabile $_SESSION non passa tra le pagine (forse)

  1. #1
    UGoldrake non è in linea Scolaretto
    Ciao a tutti.
    La domanda: "non capisco dove sbaglio". E mi spiego.
    Ho trovato un'ottima video lezione di php + MySQL che però a pochi passaggi dal termine viene interrotta e non riesco a capire quali siano per completare il lavoro.
    Si tratta di creare una pagina php che modifichi i campi di un database MySQL, per far ciò, prende i dati da una pagina "scegli.php", una griglia dove scelgo il record da modificare e lo passo alla pagina "modifica.php" con una form con tutti i campi della tabella. Fin qui tutto bene.
    A quel punto modifico un campo e premo il pulsante "Modifica" che passa il comando alla pagina "EseguiLaModifica.php" ma la variabile $_SESSION che riporta il numero di ID del record da modificare risulta vuota (almeno così mi pare) e la modifica fallisce.
    Di seguito vi posto i <BODY>, già un po' smanettati per tentare di trovare il giusto compromesso, delle due pagine Modifica e EseguiLaModifica, tralasciando l'accesso al database altrimenti viene troppo lungo, tanto quello funge, sperando mi illuminiate sul da farsi perché ci sto provando da due giorni senza risultati.

    Modifica.php:
    <?php
    	   $_SESSION['idUtente']=$_REQUEST[idUtente];
    
    	   $sql = "select * from accesso where idUtente='$_SESSION[idUtente]'";
    	   echo $sql . "-" . "<br/>" . $_SESSION[idUtente];
    	   $result=mysql_query($sql);
    	   $dati=mysql_fetch_assoc($result);
    	   
    	   $cognome=$dati["cognome"];
    	   $nome=$dati["nome"];
    	   $ksComune=$dati["ksComune"];
    	   $userName=$dati["userName"];
    	   $psw=$dati["psw"];
    
    	   $sql="select * from comuni";
    	   $result=mysql_query($sql);
    ?>
     	  <form method="post" name="registra" action="EseguiLaModifica.php" id="registra">
    	  <table>
    	  <tr><td>Cognome<td><input id="cognome" name="cognome" value='<?php echo $cognome ?>' /></td></td></tr>
    	  <tr><td>Nome<td><input id="nome" name="nome" value='<?php echo $nome ?>' /></td></td></tr>
    	  <tr><td>Comune</td>
    	  <td><select name="elencoComuni">
    <?php  
    	  	  while ($dati=mysql_fetch_assoc($result))
    	  		{print "<option value='$dati[idComune]' ";
    			if ($dati[idComune]==$ksComune) echo "selected";	  
    		    print ">$dati[NomeComune]</option> \n";}
    ?>	
    			</select></td></tr>
    
    	  <tr><td>User Name</td><td><input type="text" id="userName" name="userName" value='<?php echo $userName ?>' /></td></tr>
    	  <tr><td>Password<td><td><input type="password" id="psw" name="psw" value='<?php echo $psw ?>' /></td></tr></table>
    
    	  <input id="aggiorna" type="submit" name="aggiorna" value="Aggiorna">
    	  </form>
    
    EseguiLaModifica.php
               $_SESSION['idUtente']=$_REQUEST[idUtente];
    	   $cognome=$_REQUEST["cognome"];
    	   $nome=$_REQUEST["nome"];
    	   $ksComune=$_REQUEST["ksComune"];
    	   $userName=$_REQUEST["userName"];
    	   $psw=$_REQUEST["psw"];
    
    		$sql="update accesso set cognome='$cognome', nome='$nome', " .
    		 "userName='$userName', psw='$psw', ksComune='$ksComune' " .
    		 "where idUtente='" . $_SESSION[idUtente] . "'";
    
    		echo "<br/><br/>" . $_SESSION[idUtente] . "<br/><br/>";
    		echo "Sessione di:" . $_SESSION[idUtente] . "- \n";
    		echo $sql . " \n";
    		if(!mysql_query($sql))
    		    echo "Aggiornamento fallito <br />";
    		
    		mysql_close($conn);
    		print "<a href='ricerca.php'>Nuova Ricerca</a>";		
    ?>
    
    Facendolo girare così risponde con questo messaggio, lasciando in bianco sia la variabile $_SESSION che il campo ksComune che sulla form risulta compilato:
    Sessione di:- update accesso set cognome='bianchi', nome='ttt', userName='user1', psw='1234', ksComune='' where idUtente='' Nuova Ricerca

    Dopo ksComune e idUtente non ci sono le virgolette ma 2 apici.

    Tutto ciò tenendo presente che questo è solo il mio primo esempio di database MySQL con php annesso, quindi potrei aver sbagliato qualsiasi cosa, ma sono stato attento a correggere alcuni errori di sintassi quali apici e virgolette e ";" finali, e non mi pare ci siano problemi con i comandi HTML, uso anche un editor che assiste nella scrittura sia HTML che php.
    Se qualcuno avesse qualche idea gliene sarei grato perché in questo modo posso andare avanti nello studio.

    Ugo

  2. #2
    UGoldrake non è in linea Scolaretto
    Infatti non passava.
    L'ultima prova ha risolto metà problema, nella pagina Modifca.php:
    <form method="post" name="registra" action='<?php echo "registraModifica.php?idUtente=$_SESSION[idUtente]";?>' id="registra">
    
    ho riscritto la riga che apre la form come su indicato.
    Ora manca il sistema per passare il campo del Comune.
    Mi sa che faccio confusione tra idComune e ksComune.
    A dire il vero sono già abbastanza soddisfatto per aver capito il problema precedente, ma ci studio ancora, nel frattempo si accettano suggerimenti.
    Ugo

  3. #3
    L'avatar di Brontolo
    Brontolo non è in linea Very Important Person
    Ho segnalato al moderatore che il thread riguarda più PHP che MySql e credo che verrà spostato. Nel frattempo approfondisci il significato di sessione e l'uso delle variabili globali PHP che, se si chiamano così, un motivo ci sarà.
    ℹ️ Leggi di più su Brontolo ...

  4. #4
    Spostato in php
    ℹ️ Leggi di più su AntonioG ...

  5. #5
    UGoldrake non è in linea Scolaretto
    Ciao Brontolo, e grazie della risposta.
    Non mi sono ancora fatto una cultura sulle variabili globali ma mi sono informato almeno un po'.
    Avevo già notato che nel mio codice manca questo pezzetto forse un po' fondamentale nella composizione della combo:
    name='idComune'
    
    Purtroppo non basta a far passare il valore della variabile, e non capisco come mai, visto che gli altri valori passano senza problemi; l'unica differenza sta nel fatto che si tratta di una combo, mentre le altre sono caselle di testo.
    Ho provato anche con il $_POST al posto del $_REQUEST, più per scrupolo che per altro, ma sono al punto di prima.
    Ugo

  6. #6
    net-addiction non è in linea Scolaretto
    Ciao,
    Non vedo session_start() .
    ℹ️ Leggi di più su net-addiction ...

  7. #7
    L'avatar di Brontolo
    Brontolo non è in linea Very Important Person
    La mia osservazione derivava dal fatto che, da uno sguardo sommario al tuo codice, ho notato che inizializzi la variabile di sessione id_utente in ciascuna delle pagine PHP: $_SESSION['idUtente']=$_REQUEST[idUtente];
    Proprio perché "di sessione" la variabile mantiene il suo valore per tutta la durata della sessione, anche da una pagina all'altra, purché si abbia cura di attivare la sessione in ogni pagina con session_start();
    ℹ️ Leggi di più su Brontolo ...

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Risposte: 2
    Ultimo Post: 16-04-2016, 07:54
  2. passaggio array con $_session
    Da sciagallone nel forum PHP
    Risposte: 13
    Ultimo Post: 26-03-2014, 19:21
  3. Passare contenuto di una variabile tra due pagine ASP
    Da Marco1967 nel forum ASP 3, ASP .Net
    Risposte: 4
    Ultimo Post: 12-09-2008, 16:29
  4. [JavaScript] PopUp..., passa in secondo piano però...
    Da w_t nel forum HTML, CSS e JavaScript
    Risposte: 4
    Ultimo Post: 09-05-2008, 21:28
  5. Apple passa ai processori Intel
    Da Johnny Stella nel forum Microsoft Windows
    Risposte: 2
    Ultimo Post: 08-06-2005, 16:12