Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2011
    Messaggi
    7

    Form creato da variabili di sistema

    Salve a tutti.
    Sto programmando un sistema che deve permettere di creare dinamicamente dei form di iscrizione a degli eventi.

    Mi spiego meglio. L'utente crea l'evento -> l'utente crea il modulo di iscrizione per questo evento.
    Di base ci sono dei campi che potranno essere presenti in tutti i moduli di iscrizione, ma ci sono molti campi che in alcuni moduli di iscrizione possono non esserci o altri che vanno aggiunti.

    Ho pensato quindi di fare un pannello di sistema in cui l'utente può creare delle variabili (che saranno i campi) e cancellarle.
    Ora, quando l'utente vuole creare un modulo di iscrizione, si ritroverà proposti i campi che sono presenti nel pannello sopra descritto ed avrà la possibilità di spuntare i campi che vorrà per quel specifico modulo e despuntare quelli che non vuole.

    La soluzione che avevo pensato:
    Il database ha una tabella in cui ci saranno le variabili che crea l'utente (e che può anche cancellare), una tabella con il modulo di iscrizione (dove verranno salvati quali variabili il modulo di iscrizione deve usare).
    Il problema è la tabella delle iscrizioni.
    Visto che non so quanti campi avrà la form non posso impostare a priori il numero delle colonne per gli iscritti.
    Fare un alter table per ogni modifica che fa l'utente alle variabili del sistema mi sembra una soluzione assurda visto che avendo la possibilità di cancellarle si eliminerebbero delle intere colonne della tabella iscrizioni.
    Avevo pensato quindi di inserire i dati in un unica colonna con una stringa e poi di fare l'explode con PHP. La stringa sarà del tipo (nomecampo__valore||nomecampo__valore etc...) -> esempio (nome__Franco||citta__Milano ......)
    Volevo chiedervi se ci sono soluzioni più eleganti per affrontare questo tipo di problema e se quella che propongo può essere un ostacolo in termini di prestazioni (ci potrebbero essere anche una 30ina di campi in un modulo di iscrizione).

    Grazie in anticipo

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2011
    Messaggi
    7
    Up

  3. #3
    al volo una soluzione di questo tipo?

    Tabella campo (id_campo, nome_campo, ecc.)

    Tabella form(id_form, id_utente, id_campo,ecc.)

    Tabella iscrizione (id_iscrizione, id_form)

    EDIT: se la vuoi più complessa puoi anche fare:

    Tabella campo (id_campo, id_utente, nome_campo, ecc.) dove ad esempio l'utente 0 è l'admin

    Tabella form(id_form, id_utente, id_campo,ecc.)

    Tabella iscrizione (id_iscrizione, id_form)

  4. #4
    Allora...

    codice:
    
    form_fields table:
    
    id, person_id, field_name, field_label, field_default_value, field_type (text/password/select/etcs), ...
    
    
    events table:
    
    id, form_event_id, ...
    
    
    form_events table:
    
    id, person_id, ...
    
    
    form_event_fields table:
    
    id, form_event_id, form_field_id
    
    
    subscriptions table:
    
    id, event_id, form_event_id, person_id (?), ...
    
    
    subscription_fields table:
    
    id, subscription_id, form_field_id, inserted_value

    Dove:

    la tabella events serve per inserire gli eventi che l'utente crea ( i ... significano "altri campi d'interesse")

    ad ogni events viene associato un form_event

    ogni form_event è composto da tanti form_field (il campo person_id è per segnare il riferimento all'utente che ha creato il form_event/form_field. Opzionale)

    Quando un utente si iscrive, viene creato un record in subscriptions e per ogni field del form viene aggiunto un record in subscription_fields.

    nella tabella subscriptions person_id si riferisce all'utente che si iscrive all'evento in caso l'utente sia un utente registrato nel sistema.

    questa è giusto un'idea buttata giù in un paio di secondi
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2011
    Messaggi
    7
    Grazie per le risposte.
    Quindi meglio creare una tabelle in più piuttosto che inserire un array in formato stringa e poi elaborarlo in PHP, giusto?

  6. #6
    Originariamente inviato da Forgo piuttosto che inserire un array in formato stringa e poi elaborarlo in PHP, giusto?
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2011
    Messaggi
    7
    LOL intendevo una stringa per poi fare l'explode con PHP come avevo scritto nel primo post.

  8. #8
    Originariamente inviato da Forgo
    LOL intendevo una stringa per poi fare l'explode con PHP come avevo scritto nel primo post.


    si avevo capito, ma la faccina non cambia...salvare l'array potrebbe essere anche un modo, dipende molto da cosa ti serve... io personalmente è una scelta che non adotterei mai e poi mai, le poche volte che ho fatto cose simili "per fretta" mi sono sempre ritrovato a dover cambiare il sistema perchè aumentate le esigenze
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2011
    Messaggi
    7
    Ok, quindi era un'idea proprio assurda.

    L'unico problema è che se in form_fields l'utente cancella un campo, poi nelle altre tabelle non si trova più il riferimento a quel campo. Quindi dovrei salvare non l'ID del campo ma tutte le altre informazioni(field_name, field_value etc...).
    Ma poi non c'è troppa ridondanza?

  10. #10
    Originariamente inviato da Forgo
    Ok, quindi era un'idea proprio assurda.

    L'unico problema è che se in form_fields l'utente cancella un campo, poi nelle altre tabelle non si trova più il riferimento a quel campo. Quindi dovrei salvare non l'ID del campo ma tutte le altre informazioni(field_name, field_value etc...).
    Ma poi non c'è troppa ridondanza?

    nell'esempio che ti ho postato io, se l'utente cancella un form_field, se metti le FK correttamente, in automatico si cancella anche la entry da subscrition_fields.

    Va da se che se per un evento generi un form, non è che mentre la gente lo usa tu ti metti a cambiare i campi o cancellarli....cioè, se lo facesse, chi gestisce il form si dovrà aspettare incongruenze o perdite di informazioni precedentemente inserite da parte degli utenti... poi se non ti serve questa referenzazione, in subscription_fields ci puoi mettere solo field_name/field_value, così se il tizio cancella i field, non si perdono quelli precedentemente inseriti
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

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.