Pagina 2 di 4 primaprima 1 2 3 4 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 31

Discussione: Form a tre condizioni

  1. #11
    Utente di HTML.it L'avatar di neida
    Registrato dal
    Feb 2005
    Messaggi
    1,478
    Nel passaggio [2], quando ricevi i dati inviati dal form iniziale, tutto funziona bene proprio perchè i dati "viaggiano" atraverso $_POST. Cosa che non accade quando dal passaggio [2] procedi verso il [3], difatti i valori delle variabili $nome e $cognome risultano nulli.

    Il consiglio è quello di trasportare questi valori con dei campi hidden da inserire nel form del passaggio [2]...

    codice:
    <input type="hidden" name="nome" value="$nome">
    <input type="hidden" name="cognome" value="$cognome">
    Anche se, personalmente, resto del parere che lo switch sarebbe la soluzione migliore...

  2. #12
    Sul perchè le variabili non vengano impostate (e sul perchè, di conseguenza, ti viene dato l'errore sull'indice) neida è già stata più che chiara.

    Rimane, però, il problema delle valorizzazioni iniziali che fai

    Codice PHP:
    $nome=ucwords($_POST['nome']);
    $cognome=ucwords($_POST['cognome']); 
    Infatti, quando passi dal punto 2 al punto 3 non viene inviato nessun dato post e quindi ti viene generato l'errore. Le soluzioni possibili sono molte.

    1) Come suggerito da neida utilizzi dei campi hidden. Questa soluzione, però, anche se più semplice, comporta dei rischi. Cosa succede, infatti, se qualcuno dovesse vedere il codice html della pagina e scoprire che una volta effettuato il controllo del punto 2 i dati vengono ripassati in chiaro al punto 3? Semplice! Potrei inserire valori validi al punto 1 e passare il controllo del punto 2. A questo punto modifico il valore dei dati presenti nei campi hidden facendo passare comunque quello che voglio. Attenzione, dunque!

    2) La seconda soluzione si appoggia alle sessioni. E' un po' più difficile da gestire ma più sicura decisamente.
    Non fai altro che eseguire il controllo del punto 2 normalmente ma in più assegni i valori delle var alle sessioni. Al punto 3, quindi, ti riferirai ai valori che hai memorizzato in sessione e non dovrai preoccuparti di una loro eventuale modificazione da parte di un utente malintenzionato.
    eCommerceRS.NET - Commerciante, vendi on-line!
    Il mio nick è mircov e non mirco!!!

  3. #13
    Originariamente inviato da neida
    Nel passaggio [2], quando ricevi i dati inviati dal form iniziale, tutto funziona bene proprio perchè i dati "viaggiano" atraverso $_POST. Cosa che non accade quando dal passaggio [2] procedi verso il [3], difatti i valori delle variabili $nome e $cognome risultano nulli.
    Eggià!! Il ragionamento fila!
    Nel primo passaggio i dati stanno in un form e vengono trasmessi tramite POST al passaggio [2], mentre nel secondo passaggio i dati non stanno da nessuna parte, quindi non vengono neanche "Post-ati"!
    (Sì, lo so che è *esattamente* quello che hai scritto tu, ma me lo dovevo ripetere con parole mie per capirlo bene ;-).

    Bene. Adesso tutto funzia (anche se con quell' "error_reporting(E_ALL);" continua a dirmi "Undefined index:...")!
    Ora - apparte il discorso dello Switch - questo è il modo "ortodosso", o ci abbiamo solo "messo una pezza"?
    Cioè... Visto che 'ste maledette variabili stanno tutte in cima e che al secondo passaggio acquistano dei valore ben precisi, non c'è un modo per dire allo script di "ricordarsi" quei valori per tutte le operazioni successive?

    Anche se, personalmente, resto del parere che lo switch sarebbe la soluzione migliore...
    Io sono pronto.
    Se mi fai un esempio su come impostare lo switch nella fattispecie, oppure m'allunghi un link dove trattano lo switch in modo sufficientemente (per me) esaustivo, mi ci metto subito ;-)

    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.

  4. #14
    Cioè... Visto che 'ste maledette variabili stanno tutte in cima e che al secondo passaggio acquistano dei valore ben precisi, non c'è un modo per dire allo script di "ricordarsi" quei valori per tutte le operazioni successive?
    Il metodo te l'ho spiegato!

    Quando ti viene restituito un errore dallo completo altrimenti non possiamo capire quale sia il problema. Posta per intero tutti gli errori che ti vengono restituiti indicando anche le operazioni che hai effettuato (in questo caso magari puoi evitare di dire cosa fai perchè lo script è molto semplice ma in script più complessi dillo). Ciao!
    eCommerceRS.NET - Commerciante, vendi on-line!
    Il mio nick è mircov e non mirco!!!

  5. #15
    Quando mi ricapita sottomano il tipo che m'aveva detto che il PHP era "semplicisssssssimo" lo "sdrumo"! :/
    Ecco che mi vado a cercare un po' di documentazioni sulle sessioni...
    (Ma proprio *adesso* mi dovevano togliere la "Guida Base al PHP"?!! Sto con questo libercolo "Programmare con PHP 4" tanto caldamente consigliato in giro, ma non mi sembra tutto 'sto granché)..

    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.

  6. #16
    Originariamente inviato da mircov
    Quando ti viene restituito un errore dallo completo altrimenti non possiamo capire quale sia il problema. Posta per intero tutti gli errori che ti vengono restituiti indicando anche le operazioni che hai effettuato (in questo caso magari puoi evitare di dire cosa fai perchè lo script è molto semplice ma in script più complessi dillo). Ciao!
    Notice: Undefined index: nome in /.../FORM/form3.php on line 3
    Notice: Undefined index: cognome in /.../FORM/form3.php on line 4
    Notice: Undefined index: invia in /.../FORM/form3.php on line 5
    Notice: Undefined index: insert in /.../FORM/form3.php on line 6

    Nell'apertura dello script che ho riportato com'era all'inizio (senza più gli "isset"):
    Codice PHP:
    error_reporting(E_ALL);
    $nome=ucwords($_POST['nome']);
    $cognome=ucwords($_POST['cognome']);
    $invia=$_POST['invia'];
    $insert=$_POST['insert'];

    //====  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=\"hidden\" name=\"nome\" value=\"
    $nome\">
                            <input type=\"hidden\" name=\"cognome\" value=\"
    $cognome\">
                            <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>"
    ;
        } 
    (Però funzia).

    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. #17
    Si, è normale che funzioni! Le variabili non sono impostate solo allo step 1 e 3. Per eliminare i notice (i notice vanno eliminati via codice, cioè evitando che vengano prodotti e non nascosti con error_reporting!) basta usare isset:

    Codice PHP:
    if( isset( $_POST ) ) {
       
    $nome=ucwords($_POST['nome']);
       
    $cognome=ucwords($_POST['cognome']);
       
    $invia=$_POST['invia'];
       
    $insert=$_POST['insert'];

    Quello di sopra è un modo generale.

    Puoi però effettuare il controllo seletivamente in questo modo

    Codice PHP:
    if( isset( $_POST['nome'] ) ) {
       
    $nome ucwords($_POST['nome']);
    }

    // ecc. 
    Il controllo selettivo lo puoi anche contrarre in questi due modi
    Codice PHP:
    // I metodo
    if( isset( $_POST['nome'] ) )
       
    $nome ucwords($_POST['nome']) ;

    // II Metodo
    // Operatore ternario: alla var viene assegnato
    // un valore vuoto se $_POST non esiste

    $nome = ( isset( $_POST['nome'] ) ) ? ucwords$_POST['nome'] ) : '' 
    Per ciò che riguarda la semplicità di PHP esso è veramente semplice ma all'inizio, se non hai precedenti esperienze di programmazione, può confondere un po' (come tutti i linguaggi!). Prova ad imparare il C o il C++ e poi vedi se il PHP è semplice o meno! Tutto è relativo!
    eCommerceRS.NET - Commerciante, vendi on-line!
    Il mio nick è mircov e non mirco!!!

  8. #18
    Siete gentilisssssimi! Grazie ;-)
    Ma nonciòccapito granché, sorry...

    Intanto non capisco com'è che questo:
    Codice PHP:
    if( isset( $_POST ) ) {
       
    $nome=ucwords($_POST['nome']);
       
    $cognome=ucwords($_POST['cognome']);
       
    $invia=$_POST['invia'];
       
    $insert=$_POST['insert'];

    non funzia e mi dà i soliti notice (come se non avessi scritto nulla):
    Notice: Undefined index: nome in /.../FORM/form3.php on line 3
    Notice: Undefined index: cognome in /.../FORM/form3.php on line 4
    Notice: Undefined index: invia in /.../FORM/form3.php on line 5
    Notice: Undefined index: insert in /.../FORM/form3.php on line 6


    mentre invece questo:
    Codice PHP:
    $nome = (isset($_POST['nome'])) ? ucwords($_POST['nome']) : ' ' ;
    $cognome = (isset($_POST['cognome'])) ? ucwords($_POST['cognome']) : ' ' ;
    $invia = (isset($_POST['invia'])) ? ucwords($_POST['invia']) : ' ' ;
    $insert = (isset($_POST['insert'])) ? ucwords($_POST['insert']) : ' ' 
    messo in apertura dello script risolve tutto.
    (Non che avessi la più pallida idea su quale dei due avrebbe dovuto funzionare e quale no, intendiamoci. È solo per capire la differenza).

    Poi... Non ho capito bene quando "dico":
    Codice PHP:
    $nome = (isset($_POST['nome'])) ? ucwords($_POST['nome']) : '' 
    COSA sto dicendo e A CHI lo sto dicendo.
    Cioè... se provo a tradurlo in "italiano" dovrebbe suonare (piùommeno) così:
    "SE la variabile _POST con valore 'nome' esiste, allora la variabile $nome sarà uguale alla variabile _POST con valore 'nome' e lo "ucwords", ALTRIMENTI.... " ??"....
    "Altrimenti"... COSA?
    Semplicemente "non rompere con i 'notice' ", o c'è qualcosa in più che mi sfugge?
    (Oppure, ripensandoci, è per il fatto che anche se vuota, la variabile è cmq "impostata", a quel punto)?

    Poi... (sono uno scassapalle, lo so)...
    Ho provato a dare un'occhiata in giro per le sessioni e gli switch...
    Per quanto riguarda le sessioni trovo solo roba moooolllto al di là della mia portata (gestione di cookies, login e un casino d'altra roba che mi sembra - forse - un po' eccessiva per uno scriptino così semplice come il "mio").
    Quindi... ehm... se si potesse avere qualche dritta/esempio_pratico per la fattispecie, sarebbe assai gradito }

    Per quanto riguarda gli switch, invece, è tutto il contrario;
    trovo solo esempi banalissimi ("Se piove sto a casa - se c'è il sole esco") che mi fanno anche capire la "logica" dello switch, ma non riesco proprio a riportare al mio caso specifico.
    Anche qui... se si potesse avere un esempio unfilino più articolato e "dedicato" ve ne sarei davvero grato per almeno un paio di settimane! ;-)p

    GRAZZ!!! ;-)

    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. #19
    Ti rispondo solo ad alcune domande perchè ora devo scappare. Poi ti risponderò in modo più dettagliato.

    1) non so perchè if(isset($_POST)) non funzioni mentre l'operatore ternario si. Farò delle prove e te lo farò sapere.

    2) L'operatore ternario fa esattamente quello che hai detto: se esiste $_POST['nome'] lo assegna altrimenti gli dà un valore vuoto proprio per non far rompere con i notice (se è così che la vuoi vedere! ). Questo si fa semplicemente perchè se tali vars non esistono vuol dire che non servono (nel tuo caso) e quindi in questo modo lo fai "capire" allo script.

    3) Per le sessioni basta che prima di qulunque output al browser scrivi session_start e poi usi l'array superglobale $_SESSION per memorizzare le tue var. Prova e vedi per crederci!

    4) Per lo switch ti faccio un esempio più chiaro appena ho tempo. Intanto comincia a giocare con le sessioni per capire come funzionano.

    Ricordati che $_SESSION è un array e come tale non ha liitazioni in quanto a "livelli".

    in $_POST['nome'] nome è una chiave e non un valore. A dopo. Ciao!
    eCommerceRS.NET - Commerciante, vendi on-line!
    Il mio nick è mircov e non mirco!!!

  10. #20
    Originariamente inviato da mircov
    ...
    3) Per le sessioni basta che prima di qulunque output al browser scrivi session_start e poi usi l'array superglobale $_SESSION per memorizzare le tue var. Prova e vedi per crederci!

    4) Per lo switch ti faccio un esempio più chiaro appena ho tempo. Intanto comincia a giocare con le sessioni per capire come funzionano.
    Ooocchei....
    Ho "giocato" un po' con le sessioni....
    Le sessioni si sono MOLTO divertìte; IO, un po' meno:

    Codice PHP:
    <?php
    session_start
    ();
    error_reporting(E_ALL);
    $nome = (isset($_POST['nome'])) ? ucwords($_POST['nome']) : '' ;
    $cognome = (isset($_POST['cognome'])) ? ucwords($_POST['cognome']) : '' ;
    $invia = (isset($_POST['invia'])) ? ucwords($_POST['invia']) : '' ;
    $insert = (isset($_POST['insert'])) ? ucwords($_POST['insert']) : '' ;
    $_SESSION = array('$nome''$cognome''$invia''$insert');

    //====  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>"
    ;
        }
    ?>
    Ovviamente così com'è lo script non funzia...
    Esegue tutti e tre i passaggi, ma al terzo continua a non riconoscere le variabili '$nome' e '$cognome', quindi mi stampa tutto, tranne i valori delle variabili.
    (Dal momento che 'sta storia delle session era saltata fuori come soluzione più ortodossa a quella di inserire gli '<input type="hidden">', naturalmente m'è sembrato logico toglierli).

    Non avendo mai avuto a che fare con le sessioni, non mi è chiaro se quel
    $_SESSION = array('$nome', '$cognome', '$invia', '$insert');
    deve restare così com'è, perché - in qualche modo che m'è ancora oscuro - serve solo a memorizzare le variabili in esso contenute per la durata di quella specifica sessione, oppure devo trattarlo come un array qualsiasi e quindi prima estrarne le variabili e poi inizializzarle.

    Ricordati che $_SESSION è un array e come tale non ha liitazioni in quanto a "livelli".
    Ah, sì, bene... Fà piacere saperlo, ma... *chevvordi'*?? ;-)p
    Sei un tesoro ;-)
    (E io sono una PIPPA)!

    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.