Pagina 3 di 4 primaprima 1 2 3 4 ultimoultimo
Visualizzazione dei risultati da 21 a 30 su 31

Discussione: Form a tre condizioni

  1. #21







    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.

  2. #22

    HA!!!!

    Non so ancora bene come, ma... ce l'ho fatta!!! ;-)p

    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>"
    ;
        }
    ?>
    Adesso FUNZIA!
    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.

  3. #23
    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:

    Codice PHP:
    foreach( $_SESSION['form'] as $key => $value ) {
       $
    $key $value ;

    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.

    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!!!

  4. #24
    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!
    Figùrati, scherzi?
    (È stato orribile, cmq ;-)

    ....
    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 ;

    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! ;-)

    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>"
    ;
        }
    ?>
    Giust?
    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?
    Codice PHP:
    foreach( $_SESSION['form'] as $key => $value ) {
       $
    $key $value ;

    'Sto "foreach" mi sembra bello 'potente' e non mi dispiacerebbe assimilarlo per bene.
    (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.

  5. #25
    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

    Codice PHP:
    foreach( $array as $value // Estrae solo il valore

    foreach( $array as $key => $value //Estrae chiave e valore 
    Foreach in pratica scorre l'array chiave per chiave.

    Con la sintassi
    Codice PHP:
    $$key $value 
    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.
    eCommerceRS.NET - Commerciante, vendi on-line!
    Il mio nick è mircov e non mirco!!!

  6. #26
    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!
    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.
    (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.

  7. #27
    Ti riferisci a questo?
    Codice PHP:
    $_SESSION['form']['nome'];
    $_SESSION['form']['cognome'];
    foreach(
    $_SESSION['form'] as $key => $value) {
       $
    $key $value ;

    Hai creato delle variabili che non hanno alcun valore! Devi assegnarlo il nome!

    Hai fatto un po' di casino!

    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 ;

    Ora hai sia $_SESSION['form']['nome'] che $nome e puoi usare l'una o l'altra var ottenendo lo stesso valore.
    eCommerceRS.NET - Commerciante, vendi on-line!
    Il mio nick è mircov e non mirco!!!

  8. #28
    Originariamente inviato da mircov
    Hai creato delle variabili che non hanno alcun valore! Devi assegnarlo il nome!
    Hai fatto un po' di casino!
    Sono 'gnurante et puranco un po' rinco... sorry

    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 ;

    Ora hai sia $_SESSION['form']['nome'] che $nome e puoi usare l'una o l'altra var ottenendo lo stesso valore.
    Ehm, sì... In teoria era *esattamente* quello che volevo.
    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:

    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>"
    ;
        }
    ?>
    (Eppoi non riesco a capire com'è che ieri funzionava anche se non avevo assegnato niente)!
    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.

  9. #29
    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
    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>"
    ;
        }
    ?>
    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.
    eCommerceRS.NET - Commerciante, vendi on-line!
    Il mio nick è mircov e non mirco!!!

  10. #30
    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']!
    Ecchecc...
    Io penZavo che una volta memorizzate nelle $_SESSION le variabili rimanessero "disponibili" per tutti i passaggi dello script.
    [...]

    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.
    E io ti ringrazio *infinitamente* per averlo fatto ;-)
    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.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.