Inserimento dati a cascata

Alex_70

Utente Attivo
13 Nov 2018
371
14
18
HELL
marino51 comunque grazie per il tuo grande aiuto, se non vuoi continuare ti capisco, e stato tutto molto difficile (anche se tu hai scritto all'inizio che era facile), figuriamoci farlo io.

Spero che altri utenti che ne capiscano piu' di me mi aiutano a completare lo script che al momento risulta essere incompleto e non e' quello che avevo richiesto :confused:, anzi.

Cerchero' di ragionare su come costruire il nuovo codice che ricordo dovrebbe funzionare cosi

1) Inserimento film in form 1
2) dopo l'inserimento
3 passare al codice 2 per collegare film, film_actor, actor (tutto nella stessa pagina)
4) la form 2 dovrebbe mostrarmi i dati compilati precedentemente,

film_id,
movie_title

io devo inserire solo
actor,
genre
e
credited


questa e' la struttura semplificata del database

Tabella: actor
Tabella: film_actor <------------ questa e' relezionata con actor e film
Tabella: film

0.png
 
Ultima modifica:

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
per favore, il codice che segue eliminalo, memorizzandolo in un file chiamato "archivioFilm.include"
aggiorna i parametri per la connessione, il file non verrà più modificato salvo per mali estremi
ed i parametri di connessione non sono all'interno del nostro script

PHP:
    $servername = "localhost";
    $username   = "exadmin";
    $password   = "expass";
    $dbname     = "xxx";
    $conn = new mysqli($servername, $username, $password, $dbname);
    if ($conn->connect_errno) { $message = "ERRORE : connessione al db fallita, " . $conn->connect_error; return; }

al suo posto metti la riga che segue, che importa nello script il codice per la connessione al db

PHP:
    require_once 'archivioFilm.include';

poi prova l'allegato, ci sono i bottoni di conferma

ps, puoi disabilitare il log, modificando in "false" (senzavirgolette)
PHP:
$set['log']        = true;
 

Allegati

  • archivioFilm.zip
    3 KB · Visite: 296

Alex_70

Utente Attivo
13 Nov 2018
371
14
18
HELL
buongiorno marino51 :)

dunque o fatto cosi

scaricato archivioFilm.zip

rinominato quello vecchio (per backup) e messo questo nuovo

inserito questo in archivioFilm.php

PHP:
<?php

require_once 'archivioFilm.include';  //// questo codice NEW

$set['script']     = $_SERVER['PHP_SELF'];


/* ---------------------------------------------------------------- */

creato un file rinominaldolo in archivioFilm.include

PHP:
<?php

    $servername = "localhost";
    $username   = "exadmin";
    $password   = "expass";
    $dbname     = "xxx";
    $conn = new mysqli($servername, $username, $password, $dbname);
    if ($conn->connect_errno) { $message = "ERRORE : connessione al db fallita, " . $conn->connect_error; return; }

?>

RISULTATO se inserisco ID e clicco cerca :(

PHP:
Fatal error: Call to a member function query() on null in E:\OSPanel\domains\localhost\cinema\archivioFilm.php on line 181

line 181

PHP:
$result = $conn->query($sql);
 

Alex_70

Utente Attivo
13 Nov 2018
371
14
18
HELL
caspita, mi sono accorto che

PHP:
require_once 'archivioFilm.include';


e' gia presente nel file, eliminato quello inserito ma il risultato non cambia

ps: ma require_once non viene inserito all'inizio del codice?
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
e' gia presente nel file, eliminato quello inserito ma il risultato non cambia
non capisco cosa vuoi dire,
ti ho chiesto di mettere quel codice in un file nuovo, con il nome e l'estensione indicati

ed esattamente in sostiruzione del codice rimosso, inserire la riga singola

lo scopo é di avere un codice quasi identico tra noi, perché abbiamo db diversi ed é necessario inserire tutti i tuoi parametri e togliere i miei quando ti passo lo script modificato

tutto ciò fatto sullo script già in tuo possesso, serve solo a capire se hai fatto le modifiche giuste e quindi proseguire con lo script ultimo che ti ho inviato e che si appoggia già al file esterno

ps: ma require_once non viene inserito all'inizio del codice?
assolutamente no, lo si mette dove serve in funzione del codice contenuto

ps, se fai diversamente a modo tuo, rispetto a quanto suggerito, gli errori sono possibili
 

Alex_70

Utente Attivo
13 Nov 2018
371
14
18
HELL
I parametri di connessione li ho messi nel file archivioFilm.include

quello che avevo aggiunto in piu' in archivioFilm e' questa riga, ma poi mi sono accorto che era gia' presente (quindi lo tolta)

PHP:
require_once 'archivioFilm.include';

il codice adesso e' uguale al tuo

Risolto: avevo scambiato i file in localhost :eek:
 
Ultima modifica:

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
fammi sapere, mancano solo i controlli sulla presenza e congruità dei dati inseriti, ma é già predisposto
vedi allegato
 

Allegati

  • archivioFilm.zip
    3,1 KB · Visite: 206

Alex_70

Utente Attivo
13 Nov 2018
371
14
18
HELL
perfetto, funziona, anche per unique key ;)

funziona anche CKEDITOR sul campo synopsis (cosa e' cambiato? :rolleyes:)

aggiungerei una variabile (movie_title, anno) nell'echo che visualizza questo dopo inserimento/cancellazione/modifica

esempio

Congratulazioni, The Exorcist (1973) é stato aggiornato nel database

ho provato a farlo io ma sono tutte $row :rolleyes:

passeremo alla fase 2 adesso?

ps: cosa ti ha fatto cambiare idea nel continuare? ieri avevi abbandonato :)

sshot_codice14.png
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
devi sostituire interamente la "function aggiornaDB"
cancella tutta la funzione, (ti aiutano le righe di separazione, che ti consiglio di lasciare)
ed inserisci il nuovo codice in sostituzione, le modifiche sono marginali ma meglio trattare l'intero blocco
PHP:
function aggiornaDB($azione = "")
{
    global $conn, $set, $row, $message;

    if($set['log']) error_log("aggiornaDB  : ".$azione, 0);

    switch ($azione)
    {
        case "conferma ins":
            $sql = "INSERT INTO film(movie_title, also_known, year, minutes, distributor, studio, release_data, incollection, synopsis) VALUES ("
                 . "  '" . $row['movie_title']  . "'"
                 . ", '" . $row['also_known']   . "'"
                 . ", '" . $row['year']         . "'"
                 . ", '" . $row['minutes']      . "'"
                 . ", '" . $row['distributor']  . "'"
                 . ", '" . $row['studio']       . "'"
                 . ", '" . $row['release_data'] . "'"
                 . ", '" . $row['incollection'] . "'"
                 . ", '" . $row['synopsis']     . "'"
                 . "  )";
            $x = "inserito";
            break;

        case "conferma mod":
            $sql = "UPDATE film SET"
                 . "  movie_title='"   . $row['movie_title']  . "'"
                 . ", also_known='"    . $row['also_known']   . "'"
                 . ", year='"          . $row['year']         . "'"
                 . ", minutes='"       . $row['minutes']      . "'"
                 . ", distributor='"   . $row['distributor']  . "'"
                 . ", studio='"        . $row['studio']       . "'"
                 . ", release_data='"  . $row['release_data'] . "'"
                 . ", incollection='"  . $row['incollection'] . "'"
                 . ", synopsis='"      . $row['synopsis']     . "'"
                 . "  WHERE film_id='" . $row['film_id']      . "'";
            $x = "modificato";
            break;

        case "conferma elim":
            $sql = "DELETE FROM film"
                 . " WHERE film_id='" . $row['film_id']. "'";
            $x = "eliminato";
            break;

        case "cerca":
            $sql = "SELECT film_id, movie_title, also_known, year, minutes, distributor, studio, release_data, incollection, synopsis"
                 . " FROM film WHERE film_id='" . $row['film_id'] . "'";
            break;

        case "conta_id":
            $sql = "SELECT count(*) as counter FROM film WHERE film_id='" . $row['film_id'] . "'";
            break;

        case "conta_titolo":
            $sql = "SELECT count(*) as counter FROM film WHERE movie_title='" . $row['movie_title'] . "'";
            break;

        default:
            $message = "ERRORE : aggiornaDB, azione non riconosciuta";
            return;
            break;
    }
    if($set['log']) error_log("sql         : ".$sql, 0);



    $result = $conn->query($sql);
    if ( !$result ) { $message = "ERRORE : aggiornaDB, errore nella query, " . $conn->error; return; }

    if( in_array( $azione,
                  array("cerca", "conta_id", "conta_titolo") ) )
    {
        $dati = $result->fetch_assoc();  $result->free();
    }



    switch ($azione)
    {
        case "cerca":
            $row = $dati;
            break;

        case "conta_id":
        case "conta_titolo":
            return $dati['counter'];
            break;

        default:
            $message = "Congratulazioni, ".$row['movie_title']." (".$row['year'].") é stato ".$x." nel database.";
            inizializzaVariabili();
            break;
    }
}
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
fase 2, potresti usare questo codice per gestire gli attori, funziona uguale,
la logica é identica, cambiano solo le informazioni da trattare
ma come dici tu é sempre $row (per fare meno fatica e non perdere mai i dati, dico io)
potresti cominciare dal form, modificando blocchetto dopo blocchetto ....

poi potremmo passare alla fase 3, compito più arduo,
1) definire una logica di funzionamento
2) disegnare il form conseguente
 

Alex_70

Utente Attivo
13 Nov 2018
371
14
18
HELL
ok, ho cambiato la funzione function aggiornaDB, tutto a posto :)
adesso si capisce cosa e' stato modificato/inserito/eliminato
si puo visualizzare il message in alto? sopra il titolo
per gli attori sicuramente faro' il processo inverso, ma non adesso, quando lo script e' finito (se no :eek:)
il form che collega actor film_actor film e' gia' pronto e' funzionante (manca la ricerca), solo che si deve collegare con questo
avevo pensato cosi in caso dei film, lo script inserimento passa all'altro script l'id del film, poi io scelgo gli attori da collegare
che ne pensi?
di solito in altri siti funziona cosi: sei nella scheda attore e selezioni aggiungi film
oppure
sei nella scheda film e selezioni aggiungi attore

grazie
 
Ultima modifica:

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.449
338
83
@Alex_70
Che bisogno hai di scrivere i post saltando una riga ogni riga? In questo modo i post diventano lunghi e meno leggibili!!
 

Alex_70

Utente Attivo
13 Nov 2018
371
14
18
HELL
Max 1

scrivo cosi per rendere comprensibile il concetto, se non va bene posso scrivere standard :)
ho aggiustato il post sopra, va bene adesso?
 

Alex_70

Utente Attivo
13 Nov 2018
371
14
18
HELL
anche l'occhio vuole la sua parte :)

sshot_codice15.png


ho messo i messaggi sopra tramite una variabile nel blocco html, non ho capito come distanziare i bottoni, sono troppo vicini :rolleyes:
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
si puo visualizzare il message in alto? sopra il titolo
puoi spostare la riga del messaggio, sotto riportata, dove vuoi, con il limite che sia esterna al form
ovvero NON DEVE essere un campo compreso tra <form> e </form>
PHP:
  <div class='col-sm-10 col-sm-offset-2'><h2><?= $message; ?></h2></div>

solo che si deve collegare con questo
avevo pensato cosi in caso dei film, lo script inserimento passa all'altro script l'id del film, poi io scelgo gli attori da collegare
che ne pensi?
ho realizzato una cosa simile per le formule dei mangimi,
associando ad ogni formula (film) i componenti (attori) e le caratteristiche (?)
ma ti garantisco che é decisamente oneroso, perché si aggiunge la gestione di script e form diversi che é il massimo del caos

non sarebbe male fare una ricerca per attore (come hai suggerito) e agganciare il film
ma vorrei tenere limitato il numero dei film su cui operare la scelta, altrimenti si lavora di "scroll"

esempio, immagina
gli attori (formule) in una lista x confermare il prescelto

1588098028220.png


ed una equivalente lista di film (componenti) da cui scegliere quale associare

1588098276818.png


ma vorrei tenere queste liste molto corte per evitare lo "scoll" della pagina

suggerisci .....
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
sono troppo vicini

il metodo più semplice, metti uno <span> dopo ciascuno di loro, tipo
HTML:
    switch ($azione)
    {
        case "cerca":
            $readonly2 = "";
            $btn = "<input type='submit' name='submit' value='modifica' />"
                 . "<span style='padding-left: 30px;'></span>"
                 . "<input type='submit' name='submit' value='elimina' />";
            break;

        case "inserisci":
            $btn = "<input type='submit' name='submit' value='conferma ins' />";
            break;

        case "modifica":
            $btn = "<input type='submit' name='submit' value='conferma mod' />";
            break;

        case "elimina":
            $btn = "<input type='submit' name='submit' value='conferma elim' />";
            break;

        default:
            $readonly1 = "";
            $readonly2 = "";
            $btn = "<input type='submit' name='submit' value='inserisci' />"
                 . "<span style='padding-left: 30px;'></span>"
                 . "<input type='submit' name='submit' value='cerca' />";
            break;
    }
    $btn .= "<span style='padding-left: 30px;'></span>"
         .  "<input type='submit' name='submit' value='rinuncia' />";

SCUSA ho fatto un errore, ho corretto il blocco

sostituisci tutto il blocco
 
Ultima modifica:

Alex_70

Utente Attivo
13 Nov 2018
371
14
18
HELL
sono riuscito a distanziare solo un bottone ma l'altro no :rolleyes:

sshot_codice16.png


ho dovuto usare lo slash nel codice se no dava errore

PHP:
switch ($azione)
    {
        case "cerca":
            $readonly2 = "";
            $btn = "<input type='submit' name='submit' value='modifica' />"
                 . "<span style=\"padding-left: 30px;\"></span>"
                 . "<input type='submit' name='submit' value='elimina' />";
                   "<span style=\"padding-left: 30px;\"></span>";
            break;

        case "inserisci":
            $btn = "<input type='submit' name='submit' value='conferma ins' />";
                   "<span style=\"padding-left: 30px;\"></span>";
            break;

        case "modifica":
            $btn = "<input type='submit' name='submit' value='conferma mod' />";
                   "<span style=\"padding-left: 30px;\"></span>";
            break;

        case "elimina":
            $btn = "<input type='submit' name='submit' value='conferma elim' />";
                   "<span style=\"padding-left: 30px;\"></span>";
            break;

        default:
            $readonly1 = "";
            $readonly2 = "";
            $btn = "<input type='submit' name='submit' value='inserisci' />"
                 . "<span style=\"padding-left: 30px;\"></span>"
                 . "<input type='submit' name='submit' value='cerca' />";
                   "<span style=\"padding-left: 30px;\"></span>";
            break;
    }
  
  
    $btn .= "<input type='submit' name='submit' value='rinuncia' />";
                  "<span style=\"padding-left: 30px;\"></span>";


    // valorizza la select "incollection"

questo operatore dopo $btn e' normale che deve stare li? :rolleyes:

PHP:
$btn .= "<input type='submit' name='submit' value='rinuncia' />";

per il codice successivo ci sto pensando su come strutturarlo :rolleyes:
 
Ultima modifica:

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
sono riuscito a distanziare solo un bottone ma l'altro n
hai messo il codice un po' a "casaccio",
sostituisci tutto il blocco con quello che ti ho postato qui

1588146934253.png


per quanto riguarda il legame attore film, avrei una soluzione semplice, ma,
dipende da come é preferibile lavorare,
ho il film e lego gli attori, oppure
ho l'attore e lego i film ?

é importante sapendo quali dati hai a disposizione, lavori preferibilmente sugli attori o sui film ?

detto ciò, supponendo gli attori siano il punto di partenza,

si può creare un form per la (sola) ricerca dell'attore e conferma,
a cui far seguire un secondo form per la (sola) ricerca del film e conferma
ed infine un terzo form per la conferma della "congiunzione"

in questo modo lo script diventa lineare e facile

nel frattempo se puoi posta lo script con cui aggiorni gli attori e la struttura del db che stai usando
 

Alex_70

Utente Attivo
13 Nov 2018
371
14
18
HELL
Buongiorno a tutti :)

ciao marino51


per inserire i film e gli attori uso pypmyadmin, di solito aggiorno gli attori (la filmografia e' piu' complessa da gestire)
per modificare i film ho un form che abbiamo usato come base di partenza per fare questo che preleva 'id dell'attore
tramite $actor_id = $_GET["id"];
poi ho un'altro form che ho trovato inserito in un progetto film, lo modificato e funziona, questo serve per colllegare gli attori al film (ma non lo uso principalmente, per il motivo che ho scritto qui in questo topic)

struttura del database semplificata

sshot_codice17.png

Tabella actor
actor_id
nome
foto
eccc..

Tabella film_actor questa collega gli l'attore e il film
actor_id
film_id
credited
genre
last_update

Tabella film
film_id
movie_title
also_known
year
minutes

Importante: tutto il progetto iniziale e' partito dal database sakila, i campi principali e le tabelle sono uguali al mio,
il database con i doc e' liberamente scaricabile dal sito MySQL

sakila database sito

sakila database download

questo sono i form per modifica attore e per collegare film attore (in fase embrionale)


grazie
 
Ultima modifica:

Alex_70

Utente Attivo
13 Nov 2018
371
14
18
HELL
nel form addMovieActor che collega attori e film si potrebbe inserire una ricerca sia per gli attori che per i film con il preview di una cover (actor e film , se disponibile) , in questo modo si semplifica il processo
 
Discussioni simili
Autore Titolo Forum Risposte Data
L inserimento form dati multipli ? PHP 0
J Form inserimento dati in database Ajax 1
A Inserimento dati nel database tramite form + altre operazioni PHP 18
T Da xsd a xml ed inserimento dati in excel XML 0
S [PHP] email con inserimento dati nel database PHP 23
G [Javascript] Errore inserimento dati Backend Node.js e workbench Javascript 1
B [PHP] Creare PDF dopo inserimento dati form PHP 4
C [PHP] Form con Inserimento dati dalla maschera e un menù a discesa che prende i dati dal db PHP 1
E Inserimento dati da PHP in tabella MySQL PHP 5
E Form inserimento dati con JavaScript Javascript 0
K [PHP] Inserimento dati database con postgres PHP 2
K [PHP + MYSQL ] Inserimento dati in database da form dinamico PHP 13
M Inserimento dati checkbox multipli in db da ajax a php PHP 1
M [PHP] errore in semplie form inserimento dati PHP 7
S [PHP] Inserimento dati su tabelle collegate 1-m PHP 17
M [PHP] controllo inserimento dati un un form PHP 4
cris8380 [PHP] Generare file pdf con inserimento dati PHP 34
cris8380 Inserimento dei dati automatici mediante numero di tessera. PHP 21
G mysql - problemi inserimento dati nel database, consigli. MySQL 3
J Inserimento dati in db da due o più form PHP 0
P problemi inserimento dati PHP 1
S Trigger con inserimento dati preesistenti MySQL 0
G Estrazioni dati dal database e inserimento nella pagina html Database 11
A Aiuto form inserimento dati PHP 3
T Problema inserimento dati in phpmyadmin PHP 2
P scritta di avviso inserimento dati corretti che non vuole scendere verso il basso PHP 4
D Verifica inserimento dati form PHP 12
M Problema inserimento dati in sqlite Sviluppo app per Android 1
L Cerco lavoro retribuito,mi offro come articolista,inserimento dati,promozione siti,blog,forum Offerte e Richieste di Lavoro e/o Collaborazione 1
M Problema con modulo registrazione e inserimento dati in database PHP 8
otto9due Piccolo problemino su inserimento dati db da form PHP 5
M chiusura colorbox dopo inserimento dati in un database tramite form PHP 0
S Inserimento dati in colonna mysql PHP 10
N Inserimento dati in db che avviene due volte PHP 1
K Controllo esistenza dati e inserimento in db ASP.NET 2
B Problema inserimento dati con apostrofo MySQL 1
M [RISOLTO] inserimento dati db PHP 22
L Inserimento dati nel database. PHP 3
M Inserimento dati in db mysql dopo aver confermato e-mail PHP 7
D tabelle e inserimento dati nel database PHP 2
P Inserimento in tabella da select + altri dati MySQL 2
G Arresto dello script per inserimento dati. PHP 4
P Problemi inserimento dati con checkbox multiplo PHP 17
P Problemi inserimento dati database tramite form PHP 12
P Controllo inserimento dati Javascript 6
Z Aiuto! problemi di inserimento dati da form PHP 9
lab php e html - inserimento di dati in database e aggiornamento della pagina html PHP 2
EffeElle Php problema su inserimento dati mysql PHP 47
V (cerco retribuito lavoro) - inserimento dati/data entry lavoro a cottimo Offerte e Richieste di Lavoro e/o Collaborazione 0
zerobit Velocizzare inserimento dati nel DB MySQL 2

Discussioni simili