+ Rispondi al Thread
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15

Discussione: Form con pulsanti "disgiunti"

  1. #1
    sivodave non è in linea Scolaretto
    Luogo
    Italy
    Post
    84

    Form con pulsanti "disgiunti"

    ciao a tutti!!! avrei un altro quesito da proporvi se mi potete dare delle indicazioni. In un form ho un certo numero di pulsanti di invio, sotto ciascuno dei quali ho una select list che mi permette di selezionare dei valori. Cliccando su ciascun pulsante eseguo una serie di istruzioni che mi permettono di leggere un file ad una o più righe e sulla base del valore selezionato nella select list, di questa riga prendo un particolare valore che poi viene ovviamente mostrato a video.

    Supponiamo che ci siano 4 di questi pulsanti con le relative select list. Ho impostato per ogni select un valore di default, così che non appena accedo alla pagina posso subito vedere qualcosa. Da una select list scelgo di veder un valore diverso da quello impostato di dafault, clicco sul pulsante e vedo il nuovo valore...fin qui tutto ok...dopo di che voglio cambiare il valore ad un altra select list e quindi premo il suo relativo pulsante...e qui succedono due cose:
    1) il valore nuovo mi viene mostrato (quello che volevo)
    2) il valore di prima che avevo cambiato, mi ritorna a quello di default!!

    ovviamente vorrei che succeddesse solo il punto 1...per ovviare ho pensato di inserire ogni gruppo selectlist-pulsante in un form...ho quindi 4 form ognuno con il suo nome così da distinguerli...pensavo fosse la soluzione giusta e invece il risulatao non cambia...tra l'altro anche il name del pulsante e della select list sono diversi da form a form, a scanso di equivoci nella ricerca del dato da parte del programma. Ho provato anche a incapsulare tutti questi sottoform in un unico form.

    è un bel po' che ci sto sbattendo la testa. Ah il form manda i dati nella stessa pagina, cioè l'action è <?php echo $_SERVER['PHP_SELF'];?> . Fondamentale per quello che sto facendo che l'action sia di questo tipo...non posso aprire delle altre pagine, devo veder tutto all'interno di un unica pagina.

    tutta sta pappardella per dire che sto cercando di capire come svincolare l'uno dall'altro i pulsanti all'interno di un form. Son convinto che la soluzione esiste, anche perchè in un form ci possono tranquillamente essere più pulsanti.

    vi ringrazio anticipatamente e nel mentre vado a farmi qualche altro giro nel forum per vedere se c'è che fa qualcosa al caso mio, vi auguro buona giornata e b appetito

    Davide

  2. #2
    Post
    4,744
    Blogs
    12
    Ciao sivodave,
    la tua richiesta trova una soluzione molto semplice, almeno se ho capito bene la domanda. Risolvi il tutto inviando la form alla stessa pagina con <?php echo $_SERVER['PHP_SELF']; ?>, ma come posso vedere, questo lo fai gia'. Non ti resta che recuperare tutti i valori inviati dalle quattro rispettive SELECT e controllare che il dato ricevuto sia uguale al valore presente nelle OPTION, in questo caso rendi la OPTION selezionata come default.

    Se posti la parte di codice interessato, potrei fornirti piu' indicazioni.

    A presto,
    Giuseppe Leone

  3. #3
    sivodave non è in linea Scolaretto
    Luogo
    Italy
    Post
    84
    ciao Master85...leggo solo ora che sono a casa la tua risposta...purtroppo tutti i file li ho lasciati in università...domani mattina ti posto la parte di codice come mi hai richiesto...b serata e a presto

  4. #4
    sivodave non è in linea Scolaretto
    Luogo
    Italy
    Post
    84
    Ciao Master85…ecco il codice che mi fa tribolare. Prima un po’ di spiegazione su quello che ho scritto (abbi pazienza se non lo ho scritto con tutti i crismi della programmazione ma mi trovo a far il programmatore più per caso che per diletto).

    Lo scopo della mia applicazione è di leggere un file di testo contenente dei dati in forma tabellare…c’è una riga di intestazione sulla quale ci sono i nomi dei vari campi di dati e sotto ognuno di essi ci sono ovviamente i dati (sono numeri). Ora non mi interessa vedere tutti i campi di dati assieme, mi è sufficiente ad esempio vederne 4 x volta (o cmq un certo numero) e poi aver la possibilità, tramite una select list, di scegliere quali campi dati vedere di volta in volta.

    Ho allora creato una serie di funzioni:
    readfilerow mi serve per leggere la riga con le intestazioni e quindi salvare in array tt i nomi dei campi dati che posso voler visualizzare (sono circa un centinaio)
    selectlist è un ‘altra funzione che mi serve per creare proprio le select list sulla base del vettore generato da readfilerow
    datatable è l’ultima funzione e mi permette di andare a cercare i valori che mi servono all’interno del foglio di testo e di visualizzarli sotto forma di righe di tabella (ovviamente la tabella la creo prima, cioè all’esterno della funzione).

    Come vedi inizio creando una tabella più esterna dopo di che con un ciclo foreach creo tante sotto tabelle che conterranno i vari dati che dovrò mostrare. L’array $fields che vedi è un array che contiene dei nomi di campi e che rappresentano i campi di default che voglio mostrare quando apro la pagina, è giusto per non aver la pagina vuota e iniziare subito con il vedere dei risultati. Per cui dalla dimensione di $fields creo tante tabelle ognuna delle quali contiene una riga con un pulsante submit, una riga con la select list e tante righe che mi permettono di veder i risultati. Visto che di righe di dati in questo file c’è ne sono centinaia, istruisco il programma a mostrarmi i dati dei campi che ho scelto, che riguardano le ultime n righe ( es : le ultime 10 righe). Questo è quanto faccio. Inoltre incapsulo ogni tabella in un form. Ogni form ha un nome diverso, così come le select list e i pulsanti di invio. Mi dimenticavo di dirti che la ogni selectlist è impostata sul valore “selected” relativo ai campi che di default voglio mostrare, ovvero leggo (il proramma) quali sono i campi impostati di default nell’array $fields e di conseguenza so a quale valore devo impostare la selectlist.



    Codice PHP:
    $labels = readfilerow($file, $numrow); // array che contiene i nomi di tutti campi di dati che è possibile visualizzare
    ?>
    <table align='center' border='1' bordercolor='yellow'> <!-- tabella più esterna -->
        <tr align='middle'> <?php // prima riga della tabella più esterna
        
    foreach ($fields as $key => $cell)
        { 
        
    ?>
        <form name='<?php echo "form"."$key"?>' method='POST' action='<?php echo $_SERVER['PHP_SELF']; ?>'>
        <td align='middle'>
        <table align='center' border='1' bordercolor='red'>
        <tr align='middle'> 
            <td align='middle'>
            <input type='submit' name='<?php echo "invio"."$key"?>' value='aggiorna'>
            </td> 
        </tr> 
        <tr align='middle'> 
            <td align='middle'>
        <?php
        selectlist 
    ($labels$cell$key?>
            </td> 
        </tr>    <?php
        $cellfield 
    = array ($cell);
        
    datatable ($labels$key$key$cellfield$numrows$file?>
        </table>
        </td> 
        </form> <?php
        
    ?>
        </tr>
    </table>

  5. #5
    sivodave non è in linea Scolaretto
    Luogo
    Italy
    Post
    84

    ecco il cocice

    ti invio anche il codice della funzione datatable

    Codice PHP:
    if(!(isset($_POST["invio"."$name"])))

        
    datarows($fields$numrows$file); 
    } else 
    {
        
    $nameselect "list"."$listname";
        
    $new $_POST["$nameselect"];
        
    //echo "la nuova label è $new"; //  DA ELIMINARE
        
    $newfields = array ($new); 
        
    datarows($newfields$numrows$file);
    }  

    la funzione datarows serve per prendere i dati, quindi non interessa. Quello che succede è la seguente cosa:
    se non ho premuto il pulsante di invio di un dato campo allora mi vengono mostrati dei valori che sono riferiti ai campi che ho impostato di default nella’array $fields.
    Se invece premo invio allora leggo il valore che è stato selezionato, cioè $new e di nuovo rieseguo la funzione datarows per ottenere i nuovi valori.


    Spero di essere stato sufficiente chiaro…è un po’ complicato in effetti…

    Grazie mille

  6. #6
    Post
    4,744
    Blogs
    12
    Ciao Sivodave,
    ho dato uno sguardo al tuo codice,
    non commento la soluzione delle funzioni poiche' non ho dedicato molto tempo a queste, bensi' mi sono preoccupato di scrivere del "semplicissimo" codice che simuli cio' che intendi realizzare. La decisione di realizzare quattro FORM diverse per ciascuna SELECT non e' la soluzione migliore, perche' i valori delle SELECT dovranno essere inviati tutti alla stessa pagina, ecco spiegato perche' perdi l'elemento selezionato per ciascuna SELECT. Se hai quattro form diverse (a,b,c,d) ed invii la form "a", le restanti "b,c,d" non verrano prese in considerazione dalla pagina specificata nell'action, anche se tutte le form presentano lo stesso valore come action. Hai inviato la form "a" e non le altre.

    Di seguito ti propongo l'esempio:

    Codice PHP:
    <?php
    //Definisco il box contente i 4 array
    $myBox = array();

    $myBox['a'] = array();
    $myBox['b'] = array();
    $myBox['c'] = array();
    $myBox['d'] = array();

    //Definisco i quattro array
    $myBox['a']['a'] = 'Box A - Valore a';
    $myBox['a']['b'] = 'Box A - Valore b';
    $myBox['a']['c'] = 'Box A - Valore c';

    $myBox['b']['a'] = 'Box B - Valore a';
    $myBox['b']['b'] = 'Box B - Valore b';
    $myBox['b']['c'] = 'Box B - Valore c';

    $myBox['c']['a'] = 'Box C - Valore a';
    $myBox['c']['b'] = 'Box C - Valore b';
    $myBox['c']['c'] = 'Box C - Valore c';

    $myBox['d']['a'] = 'Box D - Valore a';
    $myBox['d']['b'] = 'Box D - Valore b';
    $myBox['d']['c'] = 'Box D - Valore c';

    //Apro la form
    echo "<form method=\"post\" action=\"".$_SERVER['PHP_SELF']."\">\n";

    //Prima SELECT (riferimento a box A)
    echo "\t<select name=\"a\">\n";
    //Visualizzo le OPTION
    foreach($myBox['a'] as $key => $value){
        
    //Rendo selezionata l'OPTION passata come POST
        
    if(@$_POST['a'] == $key){
            echo 
    "\t\t<option value=\"$key\" selected=\"select\">$value</option>\n";
        }else{
            echo 
    "\t\t<option value=\"$key\">$value</option>\n";
        }
    }
    echo 
    "\t</select>\n\t<br /><br />\n";

    //Seconda SELECT (riferimento a box B)
    echo "\t<select name=\"b\">\n";
    //Visualizzo le OPTION
    foreach($myBox['b'] as $key => $value){
        
    //Rendo selezionata l'OPTION passata come POST
        
    if(@$_POST['b'] == $key){
            echo 
    "\t\t<option value=\"$key\" selected=\"select\">$value</option>\n";
        }else{
            echo 
    "\t\t<option value=\"$key\">$value</option>\n";
        }
    }
    echo 
    "\t</select>\n\t<br /><br />\n";

    //Seconda SELECT (riferimento a box C)
    echo "\t<select name=\"c\">\n";
    //Visualizzo le OPTION
    foreach($myBox['c'] as $key => $value){
        
    //Rendo selezionata l'OPTION passata come POST
        
    if(@$_POST['c'] == $key){
            echo 
    "\t\t<option value=\"$key\" selected=\"select\">$value</option>\n";
        }else{
            echo 
    "\t\t<option value=\"$key\">$value</option>\n";
        }
    }
    echo 
    "\t</select>\n\t<br /><br />\n";

    //Seconda SELECT (riferimento a box D)
    echo "\t<select name=\"d\">\n";
    //Visualizzo le OPTION
    foreach($myBox['d'] as $key => $value){
        
    //Rendo selezionata l'OPTION passata come POST
        
    if(@$_POST['d'] == $key){
            echo 
    "\t\t<option value=\"$key\" selected=\"select\">$value</option>\n";
        }else{
            echo 
    "\t\t<option value=\"$key\">$value</option>\n";
        }
    }
    echo 
    "\t</select>\n\t<br /><br />\n";

    //Visualizzo il pulsante SUBMIT
    echo "\t<input type=\"submit\" value=\"Invia la FORM\" />\n";

    //Chiudo la form
    echo "</form>\n";
    ?>
    Come puoi notare e' molto semplice, non ho fatto ricorso a funzioni per la generazione delle SELECT e non ho utilizzato tecniche alternative per la dichirazione degli array, ho "semplicemente" scritto le basi del codice. Adesso e' compito tuo adattarlo alle tue esigenze.

    A presto,
    Giuseppe Leone

  7. #7
    sivodave non è in linea Scolaretto
    Luogo
    Italy
    Post
    84
    però!!! sei un proprio un professionista....li ho dato una rapida occhiata e penso di aver capito la logica...questa sera a casa proverò ad adattarla...grazie ancora...ti farò sapere comè andata

  8. #8
    sivodave non è in linea Scolaretto
    Luogo
    Italy
    Post
    84
    Ciao Master85!! anche se un po' in ritardo rispetto alla tabella di marcia, volevo ringraziarti per il prezioso aiuto che mi hai dato...il codice funziona benissimo e lo adattato alle mie esigenze...tuttavia volevo chiederti ancora una cosetta...come faccio a far in modo tale che per ogni data selectlist posso avere un determinato valore selezionato di default anzicchè, come avviene adesso, essere selezionato sempre il primo membro della lista? grazie e buona serata

  9. #9
    sivodave non è in linea Scolaretto
    Luogo
    Italy
    Post
    84
    ehm sono di nuovo io....nonostante l'ora tarda son ancora qua a finire la mia applicazione...a parte il problemino di cui al post di sopra (mi son spremuto abbastanza il cervello ma non riesco ancora a venirne a capo, per cui spero che anche in questo caso mi potrai essere d'aiuto), ho anche questo altro grattacapo: la pagina su cui ho le mie varie select list si aggiorna in automatico ogni tot secondi....per farlo uso un tag META. Come ti dicevo qualche post fa, la mia applicazione prende i dati da un file di testo formattato in forma tabellare...in base al valore che scelgo in ogni select list mi vengono mostrati i relativi dati di competenza...il fatto è che ad ogni refresh le impostazioni tornano ai valori selezionati di default nella select list!!

    non capisco perchè visto che ogni volta che faccio l'aggiorna, cliccando sull'apposito pulsante nella finestra del browser, questo problema non mi si presenta affatto!!


    Grazie ancora e buona notte...anzi giornata e settimana

  10. #10
    Post
    4,744
    Blogs
    12
    Ciao Sivodave,
    riguardo il primo problema che hai segnalato:

    Quote Originariamente inviato da sivodave
    come faccio a far in modo tale che per ogni data selectlist posso avere un determinato valore selezionato di default anzicch&#232;, come avviene adesso, essere selezionato sempre il primo membro della lista?
    Al momento non posso fornirti alcun esempio, "il tempo e' tiranno", cerchero' di esserti d'aiuto in serata.

    Invece, per quanto riguarda il refresh della pagina, hai affermato di utilizzare dei META TAG, giusto ? Perfetto, nessuno ti vieta di inviare tramite il refresh, le variabili che recuperi tramite POST:

    Codice PHP:
    <meta http-equiv="refresh" content="5;url=secondaPagina.php?myVar=<?php echo $myVar?>&amp;myVar2=<?php echo $myVar2?>" />
    A questo punto non ti resta che fare una piccola modifica nel recupero delle variabili. Quindi, accertarti che le variabili POST siano settate, quindi le recuperi, altrimenti recuperi i valori inviati tramite GET:

    Esempio banale:

    Codice PHP:
    <?php
    if(isset($_POST)){
       
    //Recupero le POST
    }else{
       
    //Recupero le GET
    }
    ?>
    Tutto qui,
    a presto,
    Giuseppe Leone

+ Rispondi al Thread
Pagina 1 di 2 12 ultimoultimo

Discussioni simili

  1. Passare una variabile x da un form all'altro
    Da BeroMD nel forum Microsoft Office, Access, VBA
    Risposte: 2
    Ultimo Post: 27-06-2006, 19:16
  2. Info Parent e Child Form
    Da Rocco nel forum Visual Basic .Net
    Risposte: 2
    Ultimo Post: 12-06-2006, 10:36
  3. [C#] creare nuove form
    Da Zigo nel forum Visual C#
    Risposte: 2
    Ultimo Post: 10-10-2005, 20:34

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi