Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 31

Discussione: Form a tre condizioni

  1. #1

    Form a tre condizioni

    Ciao a tutti!

    Riassunto:
    Io avrei fatto il mio bel Form per inserire i dati: due campi di testo (Nome e Cognome, niente di che... ho appena iniziato) e due "button" (Reset e Submit).
    Una volta inserito il testo, e pigiato il pulsante Submit (che ha <name="invia">) si visualizza la seconda parte di codice dettata dall' "if ($invia);" per confermare i dati inseriti.
    In questa seconda pagina la conferma avviene tramite un altro Submit (<name="insert"> che dovrebbe richiamare, attraverso un "else if ($insert)", la stampa del testo formattato per poter essere inserito in un DB (che è un file .txt).
    So che non serve, ma vorrei riuscire lo stesso a capire perché non riesco a stampare la terza pagina.
    Tutto il codice sta su un unico file "form.php", che è questo (deprivato della formattazione HTML per non ammorbarvi troppo):

    Codice PHP:
    <?php
    $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=\"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>"
    ;
        }
    ?>
    Così com'è, mi "zompa" dal "Passaggio [2]" direttamente all' [1].
    Mentre nel codice formattato riesco a stampare tutto l'html del "Passaggio [3]", ma non c'è verso di stampare una variabile che è una.

    Dove sbaglio?
    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.

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    131
    ciao
    sembrerebbe giusto
    ho verificato che quanto torna al punto 1
    cambi
    else if ($insert)
    con
    else if ($cognome)
    salvi la pagina e aggiorni
    lui cosi' passa alpunto 3 e funge
    sostanzialmente passa sia nome che cognome ma non passa il valore di insert

    non so che dirti
    mo faccio qlc altra verifica

    a dopo

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    131
    non so xche' ma cosi' funge alla grande

    if ($invia=="OK") { echo "<html><head><title>[2] == Controlla i dati</title></head>


    <input type=\"reset\" value=\"Cambia i dati\" onclick=\"java-script:history.back()\">

    <input type=\"submit\" value=\"SI\" name=\"invia\">

    else if ($invia=="SI") { echo "<html><head><title>[3] == Valori per $nome $cognome</title></head>

    sostanzialmente i bottoni dei form devono avere lo stesso nome
    poi invece di controllare se sono null controlli il valore e tutto funge



    cmq problema risolto

  4. #4
    Grazie della tempestiva risposta awialex
    Però... Apparte il fatto che 'sta cosa la sto facendo per *imparare* il php e quindi capire come "ragiona", la soluzione che mi proponi mi lascia un po' perplesso, se non altro perché questa è la versione "edulcorata" di un form più lungo da postare (per via della formattazione html con css e tabelle varie) che cmq si appoggia alle stesse condizioni di questo ("$invia" e "$insert") e che - almeno nella stampa della sequenza delle pagine - funzia.

    Il problema, lì, è che mi stampa tutta la parte html del "passaggio [3]" (quindi passando anche l'insert), ma è come se si perdesse per strada tutte le altre variabili ($nome, $cognome, $eccetera....) che infatti non stampa.

    Boh...
    Se non ammorba troppo, posso postare tutto il codice dell'originale.
    Oppure riprovo a farne una versione edulcorata funzionante.
    (O almeno "ugualmente NON funzionante" ;-)

    Fammisape'...
    Intanto graziemille ;-)

    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. #5
    Utente di HTML.it L'avatar di neida
    Registrato dal
    Feb 2005
    Messaggi
    1,478
    Considerando il fatto che 'la cosa che stai facendo' serve a te per fare pratica, magari potresti avvicinarti alla questione in un modo più "pulito" ma soprattutto flessibile. Potresti leggere qualcosa sullo switch() tanto per cominciare. Per comodità ti mostro un semplice esempio...
    Codice PHP:
    switch($action) {
      case 
    'verifica_dati':
      
    // stampa a video i dati inviati dal form per verificarne
      // l'esattezza e decidere se procedere o meno con l'inserimento
      
    break;

      case 
    'aggiungi_dati':
      
    // scrivi i dati, query per database, funzioni file per txt...
      // se tutto è andato a buon fine, mostra msg di conferma
      
    break;

      default:
      
    // stampa il form per l'inserimento dei dati
      
    break;

    dove la variabile $action potrà essere nulla, se appunto non verrà inviata, oppure conterrà valori diversi di volta in volta ($_GET)...

    Codice PHP:
    $action = isset($_GET['action']) ? $_GET['action'] : ''

  6. #6
    Originariamente inviato da neida
    Considerando il fatto che 'la cosa che stai facendo' serve a te per fare pratica, magari potresti avvicinarti alla questione in un modo più "pulito" ma soprattutto flessibile. Potresti leggere qualcosa sullo switch() tanto per cominciare. Per comodità ti mostro un semplice esempio...
    Ecco... Questa già mi piace dippiù! ;-)
    In effetti avevo ipotizzato che con tre "casi" la soluzione più pulita poteva essere lo Switch, massiccome m'hanno tolto la "Guida Base al PHP" ho cercato di continuare con gli "if".

    Grazie per l'esempio (sul link c'ero già stato, ma non riesco ancora a cavarci granché - in termini pratici - dal manuale di php.net).

    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. #7
    Bhe, nel tuo codice ci sono un bel po' di cose da vedere.

    In primo luogo devi abilitare i notice: i notice non sono errori ma delle imperfezioni del codice. Se li abilitassi (cerca nel forum per vedere come fare) vedresti che al primo caricamento le variabili non sono impostate (come è giusto che sia!). Ora non ti servono granchè ma più in là, con script più complessi, potrebbero risparmiarti molte ore di esaurimento alla ricerca di errori stupidissimi e come tali quasi impossibili da trovare (soprattutto su grandi listati!).

    Cmq a me al passaggio 2 ci arriva, mentre non arriva al terzo (mi fa rivedere il primo step, quello che viene visualizzato se non sono impostate le vars) per un motivo molto molto semplice legato all'html e non al php: hai scritto questo

    Codice PHP:
    //====  PASSAGGIO N° [2]: Verifica dei dati inseriti ========//
    if ( isset( $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=\"java-script:history.back()\">
                            <input type=\"submit\" value=\"INSERISCI!\" name\"insert\">
                            </form>
                            </body>
                            </html>"
    ;
                    } 
    Nel dettaglio qui sta l'errore:
    codice:
    <input type=\"submit\" value=\"INSERISCI!\" name\"insert\">
    Semplicemente manca un "=".

    PS
    Complimenti per lo stile, mi piace moltissimo!
    eCommerceRS.NET - Commerciante, vendi on-line!
    Il mio nick è mircov e non mirco!!!

  8. #8
    Originariamente inviato da mircov
    Bhe, nel tuo codice ci sono un bel po' di cose da vedere.
    Chessarebbero quelle che hai citato sotto, o ce ne sono delle altre?

    In primo luogo devi abilitare i notice: i notice non sono errori ma delle imperfezioni del codice. Se li abilitassi (cerca nel forum per vedere come fare)...
    Adesso faccio una "cerca" eppoi ne riparliamo, tnx ;-)

    Cmq a me al passaggio 2 ci arriva, mentre non arriva al terzo (mi fa rivedere il primo step, quello che viene visualizzato se non sono impostate le vars) per un motivo molto molto semplice legato all'html

    Nel dettaglio qui sta l'errore:
    codice:
    <input type=\"submit\" value=\"INSERISCI!\" name\"insert\">
    Aaaarrrrrrggghhhh!!!!!! (Non ci sono faccine adatte, nell'universo intiero!!)
    Sarà il centesimo errore di questo tipo cheffaccio!
    Ma su questo ci sono impazzito per ORE! :/
    (Apparte "stare più attenti", non c'è un modo per eludere 'ste cose? Tipo un "correttore" di sintassi?)..

    PS
    Complimenti per lo stile, mi piace moltissimo!
    Eh? Che stile?
    Pigliperilculo? ;-)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. #9
    No, affatto! non ti sto prendendo in giro! Mi piace veramente lo stile con cui programmi, diciamo la formattazione del codice, va! Molto leggibile ed ordinato.

    Per ciò che riguarda quel tipo di errori potresti provare ad usare dei programmi tipo dreamweaver (ma non so se riconoscono questo tipo di errori all'interno di codice php). Cmq sono cose che impari con l'esperienza. Più vai avanti più sarai in grado di capire a cosa è dovuto un determinato errore.

    Un bel po' di cose era dovuto ad i notice e ad altri errori che non ci stanno in realtà (avevo visto il codice superficialmente e non avevo notato che assegni le var $_POST all'inizio del codice). Cmq a parte i notice e l'= sarebvbe meglio usare uno switch come ti è stato suggerito. Ciao!
    eCommerceRS.NET - Commerciante, vendi on-line!
    Il mio nick è mircov e non mirco!!!

  10. #10
    Originariamente inviato da mircov
    No, affatto! non ti sto prendendo in giro! Mi piace veramente lo stile con cui programmi, diciamo la formattazione del codice, va! Molto leggibile ed ordinato.
    Abbè... Quello lo devo fare perforza... Già non ci capisco una mazza così, penZa col codice incasinato ;-)
    Cmq, grazie.

    Per ciò che riguarda quel tipo di errori potresti provare ad usare dei programmi tipo dreamweaver (ma non so se riconoscono questo tipo di errori all'interno di codice php). Cmq sono cose che impari con l'esperienza. Più vai avanti più sarai in grado di capire a cosa è dovuto un determinato errore.
    No, infatti... Credo che su un codice html mi sarei accorto subito dell'errore (se non altro per i colori della formattazione su BBEdit); dubito che Dreamweaver sappia riconoscere il codice php sbagliato; è già un mezzo miracolo quando riconosce quello html giusto!
    E... sì; penso anch'io che si tratti di imparare a rileggersi il codice a forza di sbatterci il grugno.

    Un bel po' di cose era dovuto ad i notice e ad altri errori che non ci stanno in realtà (avevo visto il codice superficialmente e non avevo notato che assegni le var $_POST all'inizio del codice). Cmq a parte i notice e l'= sarebvbe meglio usare uno switch come ti è stato suggerito. Ciao!
    Facciamo che prima provo a farlo funzionare con l'IF eppoi lo rifaccio con lo switch (giuro!!)? ;-)
    Dunque... Ho fatto la "cerca" sui notice, ho aperto il file php.ini, ma l'"error-reporting" stava *già* settato su "E_ALL". Allora ho schiaffato la stringa "error_reporting(E_ALL);" all'inizio della pagina e così sono comparsi i messaggi d'errore di " Undefined index: nome in /.../FORM/form3.php on line xx".
    (E già è un'altra cosa che non capisco, questa dell'error_reporting abilitato su php.ini ma cheppoi non "riporta" gli "error").

    Ho passato un bel po' di tempo a capire comecavolo potessi "impostare le variabili"; adesso, se non sbaglio, mi stai dicendo che invece lo avevo già fatto... onnò? (io in effetti pensavo di sì)
    Ma se l'ho fatto, perché esce fuori quell'"undefined index" sulle variabili?
    E perché al passaggio [3] stampa tutto tranne le variabili (dopo che ciòmmesso l' "=")?

    Ho provato a reimpostare le variabili per ogni "if" con l'"isset":

    Codice PHP:
    error_reporting(E_ALL);

    //====  PASSAGGIO N° [2]: Verifica dei dati inseriti ========//
    if (isset($_POST['invia'])) {
    $nome=ucwords($_POST['nome']);
    $cognome=ucwords($_POST['cognome']);
    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 (isset($_POST['insert'])) {
    $nome=ucwords($_POST['nome']);
    $cognome=ucwords($_POST['cognome']); 
    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>"
    ;
        } 
    Ma niente; continua a darmi quell'"undefined index" su "nome" e su "cognome" e a non stamparmeli nel "passaggio [3]".
    Senza contare il fatto che, una volta che ho dichiarato (ma come si dice? "Impostato", "Dichiarato", "Definito", "Inizializzato", "..."?) le variabili all'inizio, secondo me, non ci dovrebbe essere bisogno di stare a ripetere ogni volta che "$submit=$_POST['submit'];" (anche perché sennò non avrebbe senso mettere tutto in un unico file, no?)...
    Ma, soprattutto, se 'ste variabili non sono "definite" (occomesidice), perché nel passaggio [2] le riconosce e le stampa senza problemi (sia col codice com'era prima, che adesso con l'isset)??!

    Grazz!! ;-)
    (Ue'! Quando incomincio a rompere troppo avvisatemi, eh?)

    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.