Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    72

    select a cascata all'interno di un ciclo while php

    Ciao a tutti,

    Vi spiego il problema: ho un form chiamato 'apri pratica', dove l'utente dalla sua area privata apre la sua 'pratica' che verr� assegnata ad un moderatore o superuser. Questa tabella possiede diversi campi, tra i quali 3 campi select a cascata. Pertanto tramite js se seleziono un'opzione dal primo select nel secondo avro le opzione correlate alla scelta fatta e cosi anche nel terzo campo. I valori selezionati da questo select a cascata vengono inviati al db.

    Il problema sta nella pagina creata per il superuser nella quale vengono visualizzate attraverso un ciclo while e sempre sotto forma di tabella, tutte le pratiche create dagli utenti. Ovviamente riesco a stampare i valori della select a cascata, ma solo sotto forma di input o textarea! Perch� se le inserisco sotto forma di select, solo la prima tabella del ciclo while viene popolata correttamente.

    Siccome il moderatore deve poter procedere alla modifica dei dati inseriti nelle pratiche, avrei bisogno di inserire al posto delle 3 textarea, una select a cascata con id univoco composta da 3 campi nella quale ovviamente io possa richiamare i dati precedentemente inseriti.

    Come posso fare? Qualche idea? Grazie mille in anticipo.

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,691
    Ciao, non mi è chiara la tua situazione e non capisco il reale problema.

    Questa tabella possiede diversi campi, tra i quali 3 campi select a cascata. Pertanto tramite js se seleziono un'opzione dal primo select nel secondo avro le opzione correlate alla scelta fatta e cosi anche nel terzo campo.
    Come gestisci questa creazione dei tre select?
    Suppongo siano popolati dinamicamente, magari attraverso delle chiamate AJAX. No?
    In genere i value delle varie option rappresentano degli id che si riferiscono a relativi record di un qualche database.
    La tua situazione è questa?

    I valori selezionati da questo select a cascata vengono inviati al db.
    Da quale select? Solo dall'ultimo della cascata oppure prelevi comunque tutti e tre i valori dei relativi select?

    Ovviamente riesco a stampare i valori della select a cascata, ma solo sotto forma di input o textarea! Perch� se le inserisco sotto forma di select, solo la prima tabella del ciclo while viene popolata correttamente.
    In che senso "solo la prima tabella"?
    Se hai i tre valori distinti, dei tre relativi select, non dovresti avere problemi nel ricreare la stessa situazione prodotta all'atto della compilazione. Più o meno andrai ad interrogare il db così come dovresti aver fatto per la creazione del frontend, sparando quindi i tre id delle varie scelte effettuate per ottenere i relativi dati che popolano i select.

    Sul db, per ogni tabella, dovrai avere comunque i riferimenti degli id relativi alle tabelle a monte.

    Qui un articolo su come impostare la cosa.

    Potrai poi gestire la possibilità di modificare i dati usando lo stesso sistema adoperato per il frontend.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    72
    Quote Originariamente inviata da KillerWorm Visualizza il messaggio
    Ciao, non mi � chiara la tua situazione e non capisco il reale problema.


    Come gestisci questa creazione dei tre select?
    Suppongo siano popolati dinamicamente, magari attraverso delle chiamate AJAX. No?
    In genere i value delle varie option rappresentano degli id che si riferiscono a relativi record di un qualche database.
    La tua situazione � questa?
    Ciao killerworm, grazie per avermi risposto. Allora, lo script per creare la select l'ho preso qui: http://www.html.it/script/select-concatenate/#d

    Tutti e tre i campi pigliano i valori dal database. Questi valori vengono popolati nel database dall'utente, quando compila il suo form.

    Da quale select? Solo dall'ultimo della cascata oppure prelevi comunque tutti e tre i valori dei relativi select?
    Quindi come detto, li prelevo da tutti e tre i select

    In che senso "solo la prima tabella"?
    Se hai i tre valori distinti, dei tre relativi select, non dovresti avere problemi nel ricreare la stessa situazione prodotta all'atto della compilazione. Pi� o meno andrai ad interrogare il db cos� come dovresti aver fatto per la creazione del frontend, sparando quindi i tre id delle varie scelte effettuate per ottenere i relativi dati che popolano i select.
    Il problema � che lo script che uso interroga dei campi id delle select. Ora affinch� il ciclo while funzioni dovrei fare in modo che questi id siano univoci, in modo tale che ogni tabella richiami lo script stesso. Nel mio caso infatti, non riesco a capire come rendere questi id univoci, quindi solo la prima tabella passa correttamente lo script. Le altre tabelle non lo richiamano, ma richiamano solo i dati presenti nel database.

    Sul db, per ogni tabella, dovrai avere comunque i riferimenti degli id relativi alle tabelle a monte.
    Certo, questo funziona, ma come detto, solo la prima tabella del ciclo while riesce contemporaneamente a prelevare i dati dal database e concatenare le tre select.
    Le altre tabelle non concatenano.

    Qui un articolo su come impostare la cosa.
    Avevo gia letto l'articolo, ma non � esattamente il mio caso, perch� i dati presenti nelle tre select non sono prelevati a monte da un database, ma vengono prelevati dallo script e poi inviati dall'utente ad un database, quello relativo alle pratiche che il moderatore legge stampate a video sotto ciclo while e che se trova qualche errore deve poter modificare. Questo database contiene oltre ai tre campi select altri campi, per esempio data creazione pratica, numero pratica e cosi via...

    Potrai poi gestire la possibilit� di modificare i dati usando lo stesso sistema adoperato per il frontend.
    Cosa intendi per frontend?

    Ad ogni modo, la struttura della mia tabella sotto ciclo while �:

    Ciclo while{

    Table
    Form
    Td
    Td
    Td select 1
    Td select 2
    Td select 3
    Td
    Td
    Fine form
    Fine table
    }

    Ho semplificato perche sono al lavoro e sto usando il cellullare.

    Spero tu possa aiutarmi. Se hai bisogno stasera posso postare il codice.

    Ciao e grazie ancora

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    72
    Ps il campo id si chiama combo, nel form per la prima select è combo_1, per la seconda select è combo_2 e per la terza è combo_3. Sono statici, io dovrei renderli dinamici e univoci, altrimenti non passano il ciclo while, quindi dovrebbero essere qualcosa come id="combo_1'.row_ciclo_while['select1'].'".

  5. #5
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,691
    Ok, ancora mi sfugge qualcosa ma il quadro della situazione è comunque più chiaro.
    lo script per creare la select l'ho preso qui:
    Ho visto lo script e, per quanto possa funzionare, (a mio parere) lo trovo comunque statico e poco pratico rispetto a quanto si possa fare con le tecnologie disponibili attualmente... in poche parole "sa di stantio" (ma è chiaramente un mio parere personale).

    Personalmente non ho da darti soluzioni "pronte all'uso" ma posso giusto cercare di indirizzarti per ottenere un possibile risultato.

    L'attuale sistema che stai usando non è del tutto dinamico; nel senso che i dati (che popoleranno le option) sono tutti già definiti e disponibili sulla pagina lato client. Ora, non so quale sia l'entità di dati da gestire, ma personalmente avrei optato per un sistema più dinamico con AJAX, in modo da popolare gli elementi select e quindi richiamare i dati, solo quando necessario; eseguendo runtime le opportune richieste al db.

    Ad ogni modo, all'apertura della pagina, potresti creare già i select (da PHP) popolati in base alle scelte effettuate e salvate su db. Una soluzione può essere quindi questa.

    Ora, non so come gestisci questi dati da PHP (cioè i valori che vanno nelle option) e come li fai arrivare a JavaScript; se tali dati sono comunque tutti su un db (mi pare di capire sia così) e se questo passaggio lo crei dinamicamente attraverso l'interrogazione di tale db, potresti creare gli elementi select già popolati ed inserisci l'attributo checked sulle relative option (in base alle scelte effettuate, recuperate da db). Il JavaScript, che stai utilizzando, dovrebbe comunque funzionare.
    All'apertura della pagina (lato moderatore) avresti quindi i select popolati e con l'opzione selezionata.
    Ora affinch� il ciclo while funzioni dovrei fare in modo che questi id siano univoci, in modo tale che ogni tabella richiami lo script stesso. Nel mio caso infatti, non riesco a capire come rendere questi id univoci, quindi solo la prima tabella passa correttamente lo script. Le altre tabelle non lo richiamano, ma richiamano solo i dati presenti nel database.
    In effetti non capisco come vai a costruire questi select. Sull'esempio del JavaScript da te utilizzato, i select sono chiaramente statici e hanno di fatto degli id univoci. Ma non sapendo come tu vada a costruire il tutto, non saprei cosa dirti .. forse mi sto perdendo io qualche passaggio...
    Ad ogni modo questa parte credo riguardi più che altro PHP e non Javascript.

    Cosa intendi per frontend?
    Scusa, mi riferivo alla pagina lato utente.

    Un altro sistema potrebbe comunque essere quello di modificare opportunamente il JavaScript in modo che, all'apertura della pagina, vada a forzare l'aggiornamento degli elementi select, in base ai dati prelevati dal db, magari usando una qualche variabile che sia quindi letta dallo script. Evitando a questo punto di popolare preventivamente i select. In tal caso bisognerebbe capire se è possibile, e come, intervenire.

    O, ancora, sicuramente si potrebbe realizzare qualcosa di più ottimale utilizzando jQuery/AJAX.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    72
    Quote Originariamente inviata da KillerWorm Visualizza il messaggio
    Ok, ancora mi sfugge qualcosa ma il quadro della situazione � comunque pi� chiaro.

    Ho visto lo script e, per quanto possa funzionare, (a mio parere) lo trovo comunque statico e poco pratico rispetto a quanto si possa fare con le tecnologie disponibili attualmente... in poche parole "sa di stantio" (ma � chiaramente un mio parere personale).

    Personalmente non ho da darti soluzioni "pronte all'uso" ma posso giusto cercare di indirizzarti per ottenere un possibile risultato.

    L'attuale sistema che stai usando non � del tutto dinamico; nel senso che i dati (che popoleranno le option) sono tutti gi� definiti e disponibili sulla pagina lato client. Ora, non so quale sia l'entit� di dati da gestire, ma personalmente avrei optato per un sistema pi� dinamico con AJAX, in modo da popolare gli elementi select e quindi richiamare i dati, solo quando necessario; eseguendo runtime le opportune richieste al db.

    Ad ogni modo, all'apertura della pagina, potresti creare gi� i select (da PHP) popolati in base alle scelte effettuate e salvate su db. Una soluzione pu� essere quindi questa.

    Ora, non so come gestisci questi dati da PHP (cio� i valori che vanno nelle option) e come li fai arrivare a JavaScript; se tali dati sono comunque tutti su un db (mi pare di capire sia cos�) e se questo passaggio lo crei dinamicamente attraverso l'interrogazione di tale db, potresti creare gli elementi select gi� popolati ed inserisci l'attributo checked sulle relative option (in base alle scelte effettuate, recuperate da db). Il JavaScript, che stai utilizzando, dovrebbe comunque funzionare.
    All'apertura della pagina (lato moderatore) avresti quindi i select popolati e con l'opzione selezionata.

    In effetti non capisco come vai a costruire questi select. Sull'esempio del JavaScript da te utilizzato, i select sono chiaramente statici e hanno di fatto degli id univoci. Ma non sapendo come tu vada a costruire il tutto, non saprei cosa dirti .. forse mi sto perdendo io qualche passaggio...
    Ad ogni modo questa parte credo riguardi pi� che altro PHP e non Javascript.


    Scusa, mi riferivo alla pagina lato utente.

    Un altro sistema potrebbe comunque essere quello di modificare opportunamente il JavaScript in modo che, all'apertura della pagina, vada a forzare l'aggiornamento degli elementi select, in base ai dati prelevati dal db, magari usando una qualche variabile che sia quindi letta dallo script. Evitando a questo punto di popolare preventivamente i select. In tal caso bisognerebbe capire se � possibile, e come, intervenire.

    O, ancora, sicuramente si potrebbe realizzare qualcosa di pi� ottimale utilizzando jQuery/AJAX.

    ciao Killerworm, ti ringrazio tantissimo per l'aiuto che mi stai dando. purtroppo essendo padre di famiglia, riesco a risponderti molto lentamente... ho letto e riletto quello che mi hai scritto
    ti posto un po' di codice form html, cos� forse riesco a spiegarmi meglio (tralascio lo script js, in quanto lo hai gi� visto dal link che ho postato ieri):


    codice:
    while($row_gest_prc = mysql_fetch_array($result_gest_prc) 
    {
    
    echo '
    <table border="1" width="1550px" style="font-size:12px" id="mytable'.$row_gest_prc['id_prat'].'">
    
    
    <form method="post" name="modulo">';
    
    
    echo '
    <td>dati a</td>
    
    <td>dati b</td>
    
    // inizio delle 3 select
    
    echo '<td>
    <select name="tipo_richiesta" id="combo_0" onChange="change(this);" 
    onfocus="if(this.value==\'tipo_richiesta\') this.value=\'\';" style="width:100%; height:100%">
        <option value=""></option>
        <option value="caf">caf</option>
        <option value="pat">patronato</option>
        <option value="ser">servizi</option>
    </select></td>';
    
    
    echo '<td>
    <select name="caso1" id="combo_1" onChange="change(this)"
    onfocus="if(this.value==\'caso1\') this.value=\'\';" style="width:100%; height:100%">
        <option value="value1"></option>
    </select></td>';
    
    
    
    
    echo '<td>
    <select name="caso2" id="combo_2" onChange="change(this);"
    onfocus="if(this.value==\'caso2\') this.value=\'\';" style="width:100%; height:100%">
        <option value="value1"></option>
    </select></td>';
    
    
    // fine delle 3 select
    
    </tr>
    </form>
    </table>
    ';

    cos� facendo:
    riesco a popolare il campo della seconda select in base al contenuto della prima, a popolare il campo della terza select in base al contenuto della seconda; non ho per� impostato nessun richiamo al database dove stanno i dati tipo_richiesta, caso1 e caso2 inseriti dall'utente. la seconda tabella del ciclo while non funziona!.

    quindi ho pensato di modificare cos� il codice delle select nel form html:

    codice:
    echo '<td>
    <select name="tipo_richiesta" id="combo_0" onChange="change(this);" 
    onfocus="if(this.value==\'tipo_richiesta\') this.value=\'\';" style="width:100%; height:100%">';
    if ($row_gest_prc['tipo_richiesta'] == 'caf')    {
        echo '
        <option value=""></option>
        <option value="caf" selected="selected">caf</option>
        <option value="pat">pat</option>
    <option value="ser">ser</option></select></td>';}
        
    if ($row_gest_prc['tipo_richiesta'] == 'pat')    {
        echo '
        <option value=""></option>
        <option value="caf">caf</option>
        <option value="pat" selected="selected">pat</option>
    <option value="ser">ser</option></select></td>';}    
        
    if ($row_gest_prc['tipo_richiesta'] == 'ser')    {
        echo '
        <option value=""></option>
        <option value="caf">caf</option>
        <option value="pat">pat</option>
    <option value="ser" selected="selected">ser</option></select></td>';}    
        
    
    
    echo '<td>
    <select name="caso1" id="combo_1" onChange="change(this)"
    onfocus="if(this.value==\'caso1\') this.value=\'\';" style="width:100%; height:100%">
        <option value="value1"></option>
    </select></td>';
    
    
    
    
    echo '<td>
    <select name="caso2" id="combo_2" onChange="change(this);"
    onfocus="if(this.value==\'caso2\') this.value=\'\';" style="width:100%; height:100%">
        <option value="value1"></option>
    </select></td>';


    in questo modo le select della prima tabella del ciclo while si concatenato, ho riportato i dati dei rispettivi campi contenuti nella tabella del database, ma le select delle altre tabelle del ciclo while non funzionano...

    il problema sulle id del ciclo while, ovvero combo_0, combo_1 e combo_2. lo stesso problema lo avevo avuto poco tempo fa e lo avevo postato qui:

    http://forum.html.it/forum/showthrea...readid=2944848

    autsel mi aveva infatti specificato che una delle regole principali sull'assegnazione degli id � che
    NON ci devono essere duplicati, per cui devi assegnare id diversi ad ogni tabella.
    Lo puoi fare con un contatore php, incrementandolo ongli cliclo per assegnare id diversi
    pertanto avevo impostato gli id cosi: id="mytable'.$row_gest_prc['id_prat'].'", dove .$row_gest_prc['id_prat'] ripesca appunto dalla chiave primaria...

    quindi, prima di dover rifare tutto, come dici tu, creando una nuova tabella nel database per ripescare i dati e utilizzare una chiamata ajax per concatenare le select, vorrei capire se c'� modo di variare quel benedetto id=combo_0 e successivi aggiungendo il richiamo alla chiave primaria!!

    Ad ogni modo questa parte credo riguardi pi� che altro PHP e non Javascript.
    a livello php so cosa dovrei fare, quello che non so fare � richiamare l'ipotetico
    codice:
    id="combo_0'.$row_gest_prc['id_prat'].'",
    nello script che ti ho postato. credo che se ci riuscissi, il mio modertore riuscirebbe a vedere i dati postati dall'utente nelle tre select e a modificarli, e javascript farebbe in modo di far rispettare la giusta concatenazione.


  7. #7
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,691
    ciao Killerworm, ti ringrazio tantissimo per l'aiuto che mi stai dando. purtroppo essendo padre di famiglia, riesco a risponderti molto lentamente
    Figurati, ci mancherebbe.

    Ho letto più volte anch'io l'intera discussione che mi sembrava stesse diventando dispersiva non riuscendo a capire il filo del discorso e l'effettivo problema. In effetti mi sono accorto che mi stavo perdendo qualche passaggio.

    Non mi era chiaro il fatto che sulla stessa pagina hai più tabelle e quindi più gruppi di select che si ripetono, e per questo motivo ti serve "distinguere" gli id per ciascun gruppo composto dai tre select, che tra loro (i tre select) hanno già id differenti ma non distinti per ogni gruppo e quindi non univoci all'interno della stessa pagina.

    Perdonami ma nonostante tu lo abbia accennato fin dall'inizio, non avevo inquadrato questo punto;
    mi ero convinto tu avessi solo quei tre select sulla pagina.... la vecchiaia

    Quindi il punto principale è questo:
    vorrei capire se c'� modo di variare quel benedetto id=combo_0 e successivi aggiungendo il richiamo alla chiave primaria!!
    La logica è giusta ma non può funzionare se applicata a quel JavaScript. Facendo giusto due prove, mi pare di capire che il sistema funzioni proprio in base a quel numero sequenziale applicato agli id dei vari select. Se agiungi dei valori agli id, come servirebbe a te, bisognerebbe adeguare opportunamente tutto lo script... personalmente credo non valga la pena mettere mano su una roba vecchia (IMHO) ma sarebbe più semplice creare un sistema da zero.

    Se ti interessa, potrei provare a mettere giù qualcosa sulla falsariga dello script in questione, ma cercando di fare qualcosa di più versatile e utilizzabile per il tuo scopo.
    Mi serve però sapere se sulla tua pagina utilizzi per caso jQuery? In tal caso mi semplificherebbe lo sviluppo, anche se non è strettamente necessario.

    Fammi sapere.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    72
    Quote Originariamente inviata da KillerWorm Visualizza il messaggio
    Figurati, ci mancherebbe.

    Ho letto più volte anch'io l'intera discussione che mi sembrava stesse diventando dispersiva non riuscendo a capire il filo del discorso e l'effettivo problema. In effetti mi sono accorto che mi stavo perdendo qualche passaggio.

    Non mi era chiaro il fatto che sulla stessa pagina hai più tabelle e quindi più gruppi di select che si ripetono, e per questo motivo ti serve "distinguere" gli id per ciascun gruppo composto dai tre select, che tra loro (i tre select) hanno già id differenti ma non distinti per ogni gruppo e quindi non univoci all'interno della stessa pagina.

    Perdonami ma nonostante tu lo abbia accennato fin dall'inizio, non avevo inquadrato questo punto;
    mi ero convinto tu avessi solo quei tre select sulla pagina.... la vecchiaia

    Quindi il punto principale è questo:

    La logica è giusta ma non può funzionare se applicata a quel JavaScript. Facendo giusto due prove, mi pare di capire che il sistema funzioni proprio in base a quel numero sequenziale applicato agli id dei vari select. Se agiungi dei valori agli id, come servirebbe a te, bisognerebbe adeguare opportunamente tutto lo script... personalmente credo non valga la pena mettere mano su una roba vecchia (IMHO) ma sarebbe più semplice creare un sistema da zero.

    Se ti interessa, potrei provare a mettere giù qualcosa sulla falsariga dello script in questione, ma cercando di fare qualcosa di più versatile e utilizzabile per il tuo scopo.
    Mi serve però sapere se sulla tua pagina utilizzi per caso jQuery? In tal caso mi semplificherebbe lo sviluppo, anche se non è strettamente necessario.

    Fammi sapere.
    ciao Killerworm,
    allora ti rispondo subito.

    uso già jquery per poter espandere o nascondere il tbody delle tabelle sotto ciclo while per mezzo di due buttoni, ecco il codice:

    <script type="text/javascript" src="http://code.jquery.com/jquery-1.5.2.js"></script>
    <style type="text/css">

    </style>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.9/jquery-ui.js"></script>


    <script Language="javascript">
    function espandi(id) {
    $("#mytable"+id+" tbody").show("fast");
    }


    function riduci(id) {
    $("#mytable"+id+" tbody").hide("fast");
    }

    }
    </script>



    se riesci a buttare già qualcosa mi faresti un piacere grande grande. io ho provato a scrivere del codice, ma avendo scarse conoscenze di js non ho risolto nulla!!

    grazie mille dell'aiuto Killerworm, sei veramente gentile!

  9. #9
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,691
    Perfetto, chiaramente non ti garantisco nulla ma nel weekend provo a preparare qualcosa in jQuery.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    72
    Quote Originariamente inviata da KillerWorm Visualizza il messaggio
    Perfetto, chiaramente non ti garantisco nulla ma nel weekend provo a preparare qualcosa in jQuery.

    Killerworm, non preoccuparti e non impazzire. goditi il week end!!!
    se hai bisogno di informazioni contattami pure, anche in privato.


    avevo tentato anch'io di buttare giù uno script partendo da quello di autsel, quindi lavorando sulle casistiche e sul display none e block: se seleziono il valore frutta nella prima query, nascondi i valori cacciavite e quaderno...

    ma funzionava solo a tratti...

    ad ogni modo se hai bisogno di informazioni, contattami pure! poi quando passi a Bologna ritieniti invitato per una scorpacciata di lasagne, salumi e tortellini in brodo!!!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.