Form per scrittura su diverese tabelle sql

di il
11 risposte

Form per scrittura su diverese tabelle sql

Salve a tutti.

Con l'aiuto di vari tutorial sono riuscito a creare un form che invia dati ad una pagina php la quale esegue una query insert into alla tabella del database nella quale quindi ad ogni invio dati  viene inserito  un record. 

Supponendo di avere diverse tabelle tutte uguali nella loro struttura ma ognuna è dedicata ad un soggetto, ad es ho 10 macchine in piazzale e ho una tabella per ogni macchina dove registro gli interventi di manutenzione e i ricambi sostituiti; ogni tabella come nome tabella ha la targa della macchina cui si riferisce.

A sto punto creo un form e lo chiamo registro-intervento.

Questo form quindi funge da maschera per scrivere  i dati al database. 

Fin ora sono riuscito a far funzionare il tutto, ma solo se specifico nella query in nome esatto della tabella. Cosi facendo però dovrei avere un form diverso e una pagina php diversa per ogni tabella su cui devo scrivere.

 Quindi il punto è: 

nel form posso inserire come primo campo (di tipo select) la lista delle targhe, e passare in un qualche modo alla pagina php il valore scelto che vada a differenziare quindi in quale tabelle deve essere scritto il record?

Io ci ho provato alla stessa stregua con la quale vengono scritti i valori nei vari campi della tabella  del db e sostituendo nella query il nome della tabella con la variabile che in teoria dovrebbe contenere il valore della targa scelta nel form che corrisponde al nome della tabella. 

Ma non funziona :-( . All'invio dei dati ottengo la pagina bianca senza nesssun errore ma il record nn risulta essere scritto…

Se invece della variabile, metto nella query il nome della tabella vero e proprio lo script funziona la pagina risponde “invio effettuato con successo” e il record viene scritto.

Il punto è che con un unico form vorrei poter differenziare quale tabella deve essere popolata e poi creaere un form per estrapolare i dati ma questo è un passaggio che risolverò dopo aver risolto questo.

Seguono i due blocchi di codice il primo funziona il secondo è pressoche identico ma non funziona….  cosa sbaglio o cosa manca?

Grazie a tutti per gli eventuali suggerimenti.

//questo script funziona
  <?php
  ....//blocco connessione al database
  
        //creazione variabili che ricevono i dati dai campi del form.
        $data_intervento = $_POST["data_intervento"];
        $Km = $_POST["Km"];
        $rimorchio = $_POST["rimorchio"];
        $luogo = $_POST["luogo"];
        $ricambi = $_POST["ricambi"];
        $descrizione = $_POST["descrizione"];
        
  $insert_sql = "INSERT INTO XX-000-XX (
                    DATA_INTERVENTO,
                    KM,
                    RIMORCHIO,
                    LUOGO,
                    RICAMBI,
                    DESCRIZIONE)
                    VALUES(
                    '$data_intervento',
                    '$Km',
                    '$rimorchio',
                    '$luogo',
                    '$ricambi',
                    '$descrizione');";		
                    
.....
 ?>               
                    
//questo non funziona
<?php
 ....//blocco connessione al database
 
        //creazione variabili che ricevono i dati dai campi del form.
        $targa = $_POST["seleziona_targa"]             //questo dovrebbe creare la variabile col nome della tabella in cui scrivere il record
        $data_intervento = $_POST["data_intervento"]; //seguono le variabili che portano i valori provenienti dal form per la scrittura del record
        $Km = $_POST["Km"];
        $rimorchio = $_POST["rimorchio"];
        $luogo = $_POST["luogo"];
        $ricambi = $_POST["ricambi"];
        $descrizione = $_POST["descrizione"];           
        
        
        $insert_sql = "INSERT INTO $targa (   //query con la variabile che dovrebbe contenere la targa scelta nella select del form
                    DATA_INTERVENTO,
                    KM,
                    RIMORCHIO,
                    LUOGO,
                    RICAMBI,
                    DESCRIZIONE)
                    VALUES(
                    '$data_intervento',
                    '$Km',
                    '$rimorchio',
                    '$luogo',
                    '$ricambi',
                    '$descrizione');";		
        
             
....
?>                        
                                   
                                            
                                                              

11 Risposte

  • Re: Form per scrittura su diverese tabelle sql

    18/11/2024 - Pierpippo73 ha scritto:


    ogni tabella come nome tabella ha la targa della macchina cui si riferisce.

    pessima idea….

    ne crei una sola e aggiungi il campo targa (che è unico)

    se vuoi vedere xx 123 yy basta fare 

    select * from automezzi where targa='xx 123 yy"

    li inserisci i dati degli automezzi

    su tabella manutenzioni metti id, la data, la targa e una descrizione dei lavori

    se vuoi il dettaglio crei lavorimanunenzione e metti id, e id(manutenzioni), descrizione (qui scrivi cosa hai fatto).

  • Re: Form per scrittura su diverese tabelle sql

    Le variabili sono riferite ai dati non a tabelle e campi.

    Non puoi esistere:

    Insert into $tabella ($campo) values ('ciao')

    Ma solo

    Insert into tabella (descrizione) values ($variabile)

    Se proprio vuoi proseguire in questo suicidio devi confrontare la variabile e accedere alla sql che ha come nome tabella il valore della variabile.

    Ma perché vi complicate la vita?

    Basta insert into veicoli (targa, data,…) values ($targa, $data,…)

    Vuoi 10 tabelle?

    Select * from veicoli as “xx 123 Yy” where targa-"xx 123 yy"

    Lo fai per tutte le targhe e hai le 10 tabelle…

    khaby lame ha trovato un altro spunto…

  • Re: Form per scrittura su diverese tabelle sql

    Ok. Grazie avevo il sospetto di aver avuto un approccio sbagliato alla soluzione della questione. 

    Cmq penso di aver capito.

    Tra l"altro la tabella anagrafica l'ho già fatta e posso sfruttare il campo targa per averle già in una select all'inizio del form.

    Indi modifico la tabella che avevo predisposto per le manutenzioni e ci aggiungo il campo targa (univoco) 

    Poi lavoro sul form da realizzare per estrapolare i dati.

    Mi ci vorrà tempo visto il poco tempo libero ma almeno so come procedere.

    A sto punto rinuncio al suicidio ;-) 

    Grazie.

  • Re: Form per scrittura su diverese tabelle sql

    18/11/2024 - Pierpippo73 ha scritto:


    Indi modifico la tabella che avevo predisposto per le manutenzioni e ci aggiungo il campo targa (univoco) 

    Non vorrei essermi spiegato male… su automezzi, dove hai l'elenco automezzi, puoi usare la targa come chiave, in manutenzioni non puoi metterlo univoco perché lo stesso mezzo entra più volte in manutenzione.

    Manutenzioni: id, datamanutenzione, targa, lavori, ecc…

    Se vuoi la storia clinica della vettura basta

    Select * from manutenzioni inner join automezzi on automezzi.targa=manutenzioni.targa where targa=[targadelmezzochestaiinterrogando]

    Order by datamanutenzione

  • Re: Form per scrittura su diverese tabelle sql

    18/11/2024 - Pierpippo73 ha scritto:


    Mi ci vorrà tempo visto il poco tempo libero ma almeno so come procedere.

    No, crei la tabella automezzi e inserisci i dati

    Poi dalle tabelle che hai creato fai una routine di insert su tabella targaa, poi su tabella targab ecc .  

    Per lavorare in attesa di normalizzare tutto, se hai codice che attinge a tabella targaxyz fai come ti ho scritto sopra

    Select…..as targaxyz

    Devi poi modificare le insert e le update utilizzando la tabella manutenzioni (id è autoincr. Quindi metti in più solo la targa, il resto è per cone lo avevi fatto).

    Invece di update targaxyz diventa update manutenzioni…

  • Re: Form per scrittura su diverese tabelle sql

    Vorrei condividere un paio di suggerimenti:

    1. Non inserire le variabili con i dati provenienti dal form direttamente nella formulazione della query, usa invece i prepared statements.
      Oltre alle implicazioni di sicurezza, al momento basta anche soltanto inviare un apostrofo in uno qualsiasi dei parametri che salvi sul db per “rompere” la query e non farla funzionare.
    2. Se utilizzi dei trattini nel nome di una tabella, devi contornarla col carattere backtick (questo: ` ), altrimenti la query va in errore.
      Ad esempio:  INSERT INTO `mia-tabella` (…etc 
  • Re: Form per scrittura su diverese tabelle sql

    Rispondendo a sihsandrea…

    L'ultima tua risposta mi ha un po' confuso…

    La tabella automezzi esiste già e si chiama anagrafica e in essa il campo targa è la chiave univoca. 

    Le tabelle separate per ogni macchina nn le faccio. Mi hai detto che sarebbe un errore e penso tu abbia ragione.

    Ne avrò una sola che si chiamerà manutenzioni alla quale devo aggiungere il campo targa rispetto a quella che avevo creato, e impostarla come chiave esterna diciamo, e che posso usare nelle join per avere un collegamento tra le due tabelle.

    Il form deve essere solo una maschera che serve all'addetto per registrare gli interventi senza fare casini quindi per evitare ad es che inserisca male la targa gli creo una select che preleva i valori delle targhe dalla tabella anagrafica, e poi aggiungo gli altri campi (data, ricambi, descrizione etc…)

    Infine crederò un altro form per estrapolare i dati … tipo inserisco una targa per averne gli ultimi interventi …. Oppure per sapere la scadenza delle prossima revisione etc… 

    Grazie.

    Filippo. 

  • Re: Form per scrittura su diverese tabelle sql

    18/11/2024 - Pierpippo73 ha scritto:


    Rispondendo a sihsandrea…

    L'ultima tua risposta mi ha un po' confuso…

    La tabella automezzi esiste già e si chiama anagrafica e in essa il campo targa è la chiave univoca. 

    Le tabelle separate per ogni macchina nn le faccio. Mi hai detto che sarebbe un errore e penso tu abbia ragione.

    Ne avrò una sola che si chiamerà manutenzioni alla quale devo aggiungere il campo targa rispetto a quella che avevo creato, e impostarla come chiave esterna diciamo, e che posso usare nelle join per avere un collegamento tra le due tabelle.

    Il form deve essere solo una maschera che serve all'addetto per registrare gli interventi senza fare casini quindi per evitare ad es che inserisca male la targa gli creo una select che preleva i valori delle targhe dalla tabella anagrafica, e poi aggiungo gli altri campi (data, ricambi, descrizione etc…)

    Infine crederò un altro form per estrapolare i dati … tipo inserisco una targa per averne gli ultimi interventi …. Oppure per sapere la scadenza delle prossima revisione etc… 

    Grazie.

    Filippo. 

    pensavo fosse un programma già in uso con dati già inseriti, ma forse è ancora in fase di realizzazione. 

    anagrafica mi fa pensare ad individui non a cose materiali, valuta di chiamarla automezzi rende subito l'idea di cosa contiene e con cosa va relazionata.

    un form per registrare eventi va bene ma la domanda riguarda un automatismo che puoi gestire in modo traparente all'utente (una sorta di ricezione massiva di fatture eletroniche, per capirci, attivabile da un menù a prescindere dall'apertura del form acquisti).

    “Infine crederò un altro form per estrapolare i dati … tipo inserisco una targa per averne gli ultimi interventi …”  

    non ti serve un altro form con altre query: alla voce manutenzioni apri il form in modo da fare le ricerche nello stesso form.

    select * from manutenzioni where (targa=$targa and targa<>'tutte')  (lo stesso puoi fare con le combo relative agli altri campi da filtrare come data, tipomanutenzione ordinaria/straordinaria, kilometraggio ecc… tutti dati che trovi nella fattura del meccanico o dell'elettrauto o del carrozziere)

    se nella combo selezioni “tutte” le vedi tutte altrimenti vedi quella selezionata con un pulsante reset imposti tutte le combo a “tutte” e rilanci la sql.

    col pulsante nuovo o modifica apri il form a parte (o una pagetab a parte).

    un'ultima raccomandazione: prima di importare verifica che non ci siano dati duplicati o che il file non sia già stato importato.

  • Re: Form per scrittura su diverese tabelle sql

    19/11/2024 - sihsandrea ha scritto:


    pensavo fosse un programma già in uso con dati già inseriti, ma forse è ancora in fase di realizzazione. 

    in effeti sto sia studiando php e sql che costruendo un progettino per avere un campo pratico con cui testare ciò che imparo. AL momento ho creato un “task manager” in un sito joomla in cui un utente (gruppo gestione) accede ad un form per inviare i servizi ad altri utenti (gruppo autisti tra cui il sottoscritto) ed essi consultano i servizi loro assegnati loggandonsi al sito e accedendo ad una pagina che viisualizza i servizi in base a chi è loggato.

    Ora sto cercando di ordinare la parte riguardante il parco macchine. 

    19/11/2024 - sihsandrea ha scritto:


    anagrafica mi fa pensare ad individui non a cose materiali, valuta di chiamarla automezzi rende subito l'idea di cosa contiene e con cosa va relazionata.

    Anagrafica come nome tabella in un database che si chiama parco_macchine mi pare esaustivo su ciò che contiene. Non sapevo che il termine anagrafica fosse attribuibile alle sole persone….. ora ho poco tempo ma approfondirò ;-)

    Infatti in questa tabella ci sono i dati identificativi e salienti di ogni macchina (targa, telaio, marca, modello, alimentazione, destinazione d'uso).

    Poi ho la tabella allestimento con chiave esterna (targa) e campi passegg seduti, passeg in piedi, cinture, bagno, vano_disabili.

    Ora mi sto occupando di sta benedetta tabella manutenzioni. 

    Ma mentre le prime due le posso compilare io direttamente da console,  su quest'ultima mi serve un form perchè i dati saranno inseriti da gente (meccanici) che non conoscono i comandi per usare direttamente la console sql appunto.

    Indi mi serve un form per l'inserimento dati di man in mano che viene eseguito un intervento e … per quanto ne posso sapere io…. un altro che interrogare il db nel caso sia necessario sapere cosa è stato fatto o meno su una macchina.

    Voi ora mi parlate di combo e che non serve avere form separati ma a sto punto chiedo scusa ma credo di non essere in grado al momento di comprenderVi viste le mie lacune…. non so infatti cosa sia una combo…. mi devo documentare ulteriormente, quando avrò tempo tra un servizio e l'altro o nel tempo libero. 

    In ogni caso vi ringrazio perché cmq ho capito meglio come vanno impostate le tabelle di un db.

    Filippo P.

  • Re: Form per scrittura su diverese tabelle sql

    Ok, dimentica quello che ho scritto…

    combo box conosciuto come menu a tendina…

    https://it.wikipedia.org/wiki/Combo_box

  • Re: Form per scrittura su diverese tabelle sql

    Assolutamente nn dimentico nulla prima o poi tornerà utile.

    Grazie di nuovo

    Filippo 

Devi accedere o registrarti per scrivere nel forum
11 risposte