![]()
cià
ale
![]()
cià
ale
If you can keep your head when all about you are losing theirs,
it's just possible you haven't grasped the situation.
Non so ancora bene come, ma... ce l'ho fatta!!! ;-)p
Adesso FUNZIA!Codice PHP:
<?php
session_start(); //"Apro" la sessione...
error_reporting(E_ALL); //Chiedo che siano attivati i "notice" su *tutti* gli errori (è già settata così anche nel "php.ini").
//=== Inizializzo le due variabili in modo che anche se sono vuote non riceva "notice" ===//
$invia = (isset($_POST['invia'])) ? ($_POST['invia']) : '' ;
$insert = (isset($_POST['insert'])) ? ($_POST['insert']) : '' ;
//==== PASSAGGIO N° [2]: Verifica dei dati inseriti ========//
if ($invia) {
$_SESSION['nome']=ucwords($_POST['nome']);
$_SESSION['cognome']=ucwords($_POST['cognome']);
echo "<html><head><title>[2] == Controlla i dati</title></head>
<body>
2).
Ciao, ".$_SESSION['nome']." ".$_SESSION['cognome']."!
<form action=\"$_SERVER[PHP_SELF]\" method=\"POST\">
<input type=\"reset\" value=\"Cambia i dati\" onclick=\"javascript:history.back()\">
<input type=\"submit\" value=\"INSERISCI!\" name=\"insert\">
</form>
</body>
</html>";
}
//==== PASSAGGIO N° [3]: STAMPA dei dati inseriti ========//
else if ($insert) {
echo "<html><head><title>[3] == Valori per \"".$_SESSION['nome']." ".$_SESSION['cognome']."\"</title></head>
<body>
3).
Ho inserito i dati \"[b]".$_SESSION["nome"]." ".$_SESSION["cognome"]."[/b]\" nel DB!
</body>
</html>";
}
else {
//==== PASSAGGIO N° [1]: Inserimento dei dati ========//
echo "<html><head><title>[1] == Inserisci i dati</title></head>
<body>
1).
<form action=\"$_SERVER[PHP_SELF]\" method=\"POST\">
Nome: <input name=\"nome\" size=\"30\">
Cognome: <input name=\"cognome\" size=\"30\">
<input type=\"reset\" value=\"CiòripenZato...\">
<input type=\"submit\" value=\"OK\" name=\"invia\">
</form>
</body>
</html>";
}
?>
Però ho bisogno di conferme:
È giusto, così, l'uso di "$_SESSION"?
Non c'è un modo per memorizzare quel "$_SESSION['nome']=ucwords($_POST['nome']);" in una variabile (tipo "$nome") in modo da non dover scrivere tutta la pappardella "$_SESSION['nome']" ogni volta che devo richiamare i varii "nome", "cognome", eccetera...?
Avevo pensato a una cosa tipo "$_SESSION['nome']=$nome;" ma non so dove metterla.
Hinz? ;-)
cià
ale
piesse: Ma la sessione la devo chiudere, poi?
If you can keep your head when all about you are losing theirs,
it's just possible you haven't grasped the situation.
Ciao. In primo luogo scusami se ti ho lasciato al buoi ma ho avuto problemi con l'adsln e sono rimasto senza internet per qualche giorno!
Passando alle tue domande ti rispondo con ordine.
1) Il modo in cui hai usato session va bene
2) Per il secondo problema la soluzione c'è (ma non so fino a che punto serva! Scrivere la pappardella aiuta a capire da dove vengono le variabili!).
Per prima cosa crea un array multidimensionale tipo:
$_SESSION['form']['nome']
$_SESSION['form']['cognome']
ecc
Avendo questo array, per avere il nome di variabile "corto" basta che crei un bel foreach in questo modo:
A prima vista può sembrare strano ma in realtà questo ciclo valorizza una variabile che ha per nome la chiave dell'array e come valore il valore corrispondente nell'array.Codice PHP:
foreach( $_SESSION['form'] as $key => $value ) {
$$key = $value ;
}
Richiamando $_SESSION['form']['nome'] o $nome si avrà lo stesso valore.
Ti consiglio di creare un array multidimensionale perchè potrebbe capitare di dover memorizzare più variabili in sessione, anche non provenienti da form o che cmq non ti serve "abbreviare". In questo modo limiti l'"abbreviazione" alle sole var provenienti da form.
eCommerceRS.NET - Commerciante, vendi on-line!
Il mio nick è mircov e non mirco!!!
Figùrati, scherzi?Originariamente inviato da mircov
Ciao. In primo luogo scusami se ti ho lasciato al buoi ma ho avuto problemi con l'adsln e sono rimasto senza internet per qualche giorno!
(È stato orribile, cmq ;-)
Ecco... è mezz'ora che sto qui a scrivere che non mi funziona ed essere il più preciso possibile sugli errori che mi dà ed è andata a finire che a forza di spippolarci sopra adesso funziona! ;-)....
Avendo questo array, per avere il nome di variabile "corto" basta che crei un bel foreach in questo modo:
Codice PHP:
foreach( $_SESSION['form'] as $key => $value ) {
$$key = $value ;
}
Giust?Codice PHP:
<?php
session_start(); //"Apro" la sessione...
error_reporting(E_ALL); //Chiedo che siano attivati i "notice" su *tutti* gli errori (è già settata così anche nel "php.ini").
//=== Inizializzo le variabili in modo che anche se sono vuote non riceva "notice" ===//
$invia = (isset($_POST['invia'])) ? ($_POST['invia']) : '' ;
$insert = (isset($_POST['insert'])) ? ($_POST['insert']) : '' ;
$nome = (isset($_POST['nome'])) ? ucwords($_POST['nome']) : '';
$cognome = (isset($_POST['cognome'])) ? ucwords($_POST['cognome']) : '';
$_SESSION['form']['nome'];
$_SESSION['form']['cognome'];
foreach($_SESSION['form'] as $key => $value) {
$$key = $value ;
}
//==== PASSAGGIO N° [2]: Verifica dei dati inseriti ========//
if ($invia) {
echo "<html><head><title>[2] == Controlla i dati</title></head>
<body>
2).
Ciao, $nome $cognome!
<form action=\"$_SERVER[PHP_SELF]\" method=\"POST\">
<input type=\"reset\" value=\"Cambia i dati\" onclick=\"javascript:history.back()\">
<input type=\"submit\" value=\"INSERISCI!\" name=\"insert\">
</form>
</body>
</html>";
}
//==== PASSAGGIO N° [3]: STAMPA dei dati inseriti ========//
else if ($insert) {
echo "<html><head><title>[3] == Valori per \"$nome $cognome\"</title></head>
<body>
3).
Ho inserito i dati \"[b]$nome $cognome[/b]\" nel DB!
</body>
</html>";
}
else {
//==== PASSAGGIO N° [1]: Inserimento dei dati ========//
echo "<html><head><title>[1] == Inserisci i dati</title></head>
<body>
1).
<form action=\"$_SERVER[PHP_SELF]\" method=\"POST\">
Nome: <input name=\"nome\" size=\"30\">
Cognome: <input name=\"cognome\" size=\"30\">
<input type=\"reset\" value=\"CiòripenZato...\">
<input type=\"submit\" value=\"OK\" name=\"invia\">
</form>
</body>
</html>";
}
?>
Mi sembra più pulito così, no?
Però se dici che era meglio prima, m'adeguo senza riluttanza alcuna ;-)
Solo, già che ci siamo, ce la faresti a tradurmi "in italiano" e carattere-per-carattere questo?
'Sto "foreach" mi sembra bello 'potente' e non mi dispiacerebbe assimilarlo per bene.Codice PHP:
foreach( $_SESSION['form'] as $key => $value ) {
$$key = $value ;
}
(Ma... da dove lo prende il significato di quel "['form']")?
TNX!
cià
ale
If you can keep your head when all about you are losing theirs,
it's just possible you haven't grasped the situation.
Quando si è alle prime armi si tende a scorrere gli array con for. Non è il modo corretto. Per scorrere gli array si usa foreach.
Foreach può estrarre solo il valore oppure chiave-valore
Foreach in pratica scorre l'array chiave per chiave.Codice PHP:
foreach( $array as $value ) // Estrae solo il valore
foreach( $array as $key => $value ) //Estrae chiave e valore
Con la sintassi
Non ho fatto altro che creare una variabile usando un'altra variabile. Spero sia più chiaro adesso! Cmq io ci ho messo un po' per capire per bene come funziona il foreach. E' una cosa che viene con l'esperienza il riuscire a capire quando va usato.Codice PHP:
$$key = $value ;
eCommerceRS.NET - Commerciante, vendi on-line!
Il mio nick è mircov e non mirco!!!
Sì, scusa... Ho fatto una domanda scema io; sul foreach c'è abbastanza documentazione in giro e ieri ho avuto modo di approfondirlo. È solo che non l'avevo mai incontrato.Originariamente inviato da mircov
Quando si è alle prime armi si tende a scorrere gli array con for. Non è il modo corretto. Per scorrere gli array si usa foreach.
[...]
Non ho fatto altro che creare una variabile usando un'altra variabile. Spero sia più chiaro adesso!
(In effetti ho sempre usato "For").
Ora però non capisco una cosa...
Già ieri 'sto foreach mi dava qualche problema, ma poi s'era messo a funzionare.
Oggi mi (ri)dà questo errore:
Warning: Invalid argument supplied for foreach() in .../FORM/form3b.php on line 13
sullo *stesso preciso-identico* script che ho postato ieri (ho anche copincollato quello postato sopra per essere sicuro di non aver fatto cappellate) e anche su un altro script che è praticamente uguale a questo, solo con più dati e una formattazione html un po' più articolata.
Quale può essere il motivo?![]()
(Un comportamento così "random" mi fà sospettare che c'entrino qualcosa le sessioni, ma non ho uno straccio di conoscenza in merito da addurre a sostegno di tale sospetto).
TNX
cià
ale
If you can keep your head when all about you are losing theirs,
it's just possible you haven't grasped the situation.
Ti riferisci a questo?
Hai creato delle variabili che non hanno alcun valore! Devi assegnarlo il nome!Codice PHP:
$_SESSION['form']['nome'];
$_SESSION['form']['cognome'];
foreach($_SESSION['form'] as $key => $value) {
$$key = $value ;
}
Hai fatto un po' di casino!
Ora hai sia $_SESSION['form']['nome'] che $nome e puoi usare l'una o l'altra var ottenendo lo stesso valore.Codice PHP:
//=== Inizializzo le variabili in modo che anche se sono vuote non riceva "notice" ===//
//=== Adesso hai le variabili POST memorizzate in sessione ===//
$_SESSION['form']['invia'] = (isset($_POST['invia'])) ? ($_POST['invia']) : '' ;
$_SESSION['form']['insert'] = (isset($_POST['insert'])) ? ($_POST['insert']) : '' ;
$_SESSION['form']['nome'] = (isset($_POST['nome'])) ? ucwords($_POST['nome']) : '';
$_SESSION['form']['cognome'] = (isset($_POST['cognome'])) ? ucwords($_POST['cognome']) : '';
//=== Ora usiamo foreach per "abbreviare" le variabili ===//
foreach($_SESSION['form'] as $key => $value) {
$$key = $value ;
}
eCommerceRS.NET - Commerciante, vendi on-line!
Il mio nick è mircov e non mirco!!!
Sono 'gnurante et puranco un po' rinco... sorryOriginariamente inviato da mircov
Hai creato delle variabili che non hanno alcun valore! Devi assegnarlo il nome!
Hai fatto un po' di casino!
![]()
Ehm, sì... In teoria era *esattamente* quello che volevo.Ora hai sia $_SESSION['form']['nome'] che $nome e puoi usare l'una o l'altra var ottenendo lo stesso valore.Codice PHP:
//=== Inizializzo le variabili in modo che anche se sono vuote non riceva "notice" ===//
//=== Adesso hai le variabili POST memorizzate in sessione ===//
$_SESSION['form']['invia'] = (isset($_POST['invia'])) ? ($_POST['invia']) : '' ;
$_SESSION['form']['insert'] = (isset($_POST['insert'])) ? ($_POST['insert']) : '' ;
$_SESSION['form']['nome'] = (isset($_POST['nome'])) ? ucwords($_POST['nome']) : '';
$_SESSION['form']['cognome'] = (isset($_POST['cognome'])) ? ucwords($_POST['cognome']) : '';
//=== Ora usiamo foreach per "abbreviare" le variabili ===//
foreach($_SESSION['form'] as $key => $value) {
$$key = $value ;
}
In pratica, invece, adesso sto di nuovo al punto di partenza; nel senZo che non mi riconosce più le variabili $nome e $cognome al "Passaggio [3]" e dunque non me le stampa:
(Eppoi non riesco a capire com'è che ieri funzionava anche se non avevo assegnato niente)!Codice PHP:
<?php
session_start(); //"Apro" la sessione...
error_reporting(E_ALL); //Chiedo che siano attivati i "notice" su *tutti* gli errori
//=== Inizializzo le variabili in modo che anche se sono vuote non riceva "notice" ===//
$_SESSION['form']['invia'] = (isset($_POST['invia'])) ? ($_POST['invia']) : '' ;
$_SESSION['form']['insert'] = (isset($_POST['insert'])) ? ($_POST['insert']) : '' ;
$_SESSION['form']['nome'] = (isset($_POST['nome'])) ? ucwords($_POST['nome']) : '';
$_SESSION['form']['cognome'] = (isset($_POST['cognome'])) ? ucwords($_POST['cognome']) : '';
foreach($_SESSION['form'] as $key => $value) {
$$key = $value ;
echo "$key => $value
"; //<== Questa è un'aggiunta per averci sempre sott'occhio i valori dell'array; poi la levo ;-)
}
//==== PASSAGGIO N° [2]: Verifica dei dati inseriti ========//
if ($invia) {
echo "<html><head><title>[2] == Controlla i dati</title></head>
<body>
2).
Ciao, $nome $cognome!
<form action=\"$_SERVER[PHP_SELF]\" method=\"POST\">
<input type=\"reset\" value=\"Cambia i dati\" onclick=\"javascript:history.back()\">
<input type=\"submit\" value=\"INSERISCI!\" name=\"insert\">
</form>
</body>
</html>";
}
//==== PASSAGGIO N° [3]: STAMPA dei dati inseriti ========//
else if ($insert) {
echo "<html><head><title>[3] == Valori per \"$nome $cognome\"</title></head>
<body>
3).
Ho inserito i dati \"[b]$nome $cognome[/b]\" nel DB!
</body>
</html>";
}
else {
//==== PASSAGGIO N° [1]: Inserimento dei dati ========//
echo "<html><head><title>[1] == Inserisci i dati</title></head>
<body>
1).
<form action=\"$_SERVER[PHP_SELF]\" method=\"POST\">
Nome: <input name=\"nome\" size=\"30\">
Cognome: <input name=\"cognome\" size=\"30\">
<input type=\"reset\" value=\"CiòripenZato...\">
<input type=\"submit\" value=\"OK\" name=\"invia\">
</form>
</body>
</html>";
}
?>
Siamo sicuri che non devo schiaffare un qualche "session_destroy()" da qualche parte, visto che sto provando diverse versioni di 'sto script e ho l'impressione che certi dati "restino in memoria" nel server (o nelle sessioni, appunto)?
Il mistero s'infittisce...
TNX
cià
ale
If you can keep your head when all about you are losing theirs,
it's just possible you haven't grasped the situation.
Si, alla fine del procedimento devi distruggere i dati di sessione.
E' normale che non funzioni! I dati post al terzo passaggio non ce li hai più! Ce li hai in $_SESSION['form']!
Ci sono un po' di teatri. Al terzo passaggio non essendo impostato alcun valore post la sessione viene sovrascritta con un valore vuoto.
Ecco come funziona il tutto
Cmq rimango dell'opinione che devi usare gli array superglobali e non delle variabili abbreviate. E' una regola di buona programmazione! Se intendi usare le variabili in questo modo, inoltre c'è la direttiva register global che prima era settata ad on (e quindi si otteneva la stessa cosa che vuoi ottenere tu ma senza il foreach). Ora è settata ad off per problemi di sicurezza. USA GLI ARRAY SUPERGLOBALI! Ti ho illustrato l'uso del foreach per questo scopo solo per didattica e non per fartelo usare in uno script reale.Codice PHP:
<?PHP
session_start(); //"Apro" la sessione...
error_reporting(E_ALL); //Chiedo che siano attivati i "notice" su *tutti* gli errori
//==== PASSAGGIO N° [2]: Verifica dei dati inseriti ========//
if (isset($_POST['invia'])) {
//=== Inizializzo le variabili in modo che anche se sono vuote non riceva "notice" ===//
$_SESSION['form']['invia'] = (isset($_POST['invia'])) ? ($_POST['invia']) : '' ;
$_SESSION['form']['insert'] = (isset($_POST['insert'])) ? ($_POST['insert']) : '' ;
$_SESSION['form']['nome'] = (isset($_POST['nome'])) ? ucwords($_POST['nome']) : '';
$_SESSION['form']['cognome'] = (isset($_POST['cognome'])) ? ucwords($_POST['cognome']) : '';
foreach($_SESSION['form'] as $key => $value) {
$$key = $value ;
echo "$key => $value
"; //<== Questa è un'aggiunta per averci sempre sott'occhio i valori dell'array; poi la levo ;-)
}
echo "<html><head><title>[2] == Controlla i dati</title></head>
<body>
2).
Ciao, $nome $cognome!
<form action=\"$_SERVER[PHP_SELF]\" method=\"POST\">
<input type=\"reset\" value=\"Cambia i dati\" onclick=\"java-script:history.back()\">
<input type=\"submit\" value=\"INSERISCI!\" name=\"insert\">
</form>
</body>
</html>";
}
//==== PASSAGGIO N° [3]: STAMPA dei dati inseriti ========//
else if (isset($_POST['insert'])) {
foreach($_SESSION['form'] as $key => $value) {
$$key = $value ;
echo "$key => $value
"; //<== Questa è un'aggiunta per averci sempre sott'occhio i valori dell'array; poi la levo ;-)
}
echo "<html><head><title>[3] == Valori per \"$nome $cognome\"</title></head>
<body>
3).
Ho inserito i dati \"[b]$nome $cognome[/b]\" nel DB!
</body>
</html>";
// Se tutto è andato bene a questo punto devi distruggere la sessione
unset( $_SESSION['form'] ) ;
}
else {
//==== PASSAGGIO N° [1]: Inserimento dei dati ========//
echo "<html><head><title>[1] == Inserisci i dati</title></head>
<body>
1).
<form action=\"$_SERVER[PHP_SELF]\" method=\"POST\">
Nome: <input name=\"nome\" size=\"30\">
Cognome: <input name=\"cognome\" size=\"30\">
<input type=\"reset\" value=\"CiòripenZato...\">
<input type=\"submit\" value=\"OK\" name=\"invia\">
</form>
</body>
</html>";
}
?>
eCommerceRS.NET - Commerciante, vendi on-line!
Il mio nick è mircov e non mirco!!!
Ecchecc...Originariamente inviato da mircov
Si, alla fine del procedimento devi distruggere i dati di sessione.
E' normale che non funzioni! I dati post al terzo passaggio non ce li hai più! Ce li hai in $_SESSION['form']!
Io penZavo che una volta memorizzate nelle $_SESSION le variabili rimanessero "disponibili" per tutti i passaggi dello script.
[...]
E io ti ringrazio *infinitamente* per averlo fatto ;-)USA GLI ARRAY SUPERGLOBALI! Ti ho illustrato l'uso del foreach per questo scopo solo per didattica e non per fartelo usare in uno script reale.
Userò gli array superglobali senz'altro, tanto più che quello che volevo fare io (memorizzare all'inizio e *una volta per tutte* le variabili in una $_SESSION) non si può fare e alla fine c'è da scrivere dippiù così che con i 'supaglobals' ;-)
Che differenza c'è tra "unset($_SESSION['form'])" e session_destroy()?
Che la seconda distrugge TUTTE le *sessioni* mentre la prima solo la *variabile* specificata, ok...
Ma... non si potrebbe scrivere "session_destroy($_SESSION['form'])", allora?
Ora, cambiando - in parte - discorZo...
Sarò *veramente scemo* io, ma proprio non m'entra in testa come potrei riscrivere lo script utilizzando lo SWITCH invece dell'IF.
(Era una delle cose "in agenda", remember? ;-)
TNX
cià
ale
If you can keep your head when all about you are losing theirs,
it's just possible you haven't grasped the situation.