Inserimento dati a cascata

  • Creatore Discussione Creatore Discussione Alex_70
  • Data di inizio Data di inizio

Alex_70

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

questo codice che vorrei ottimizzare e' molto complicato,

questa e' la struttura semplificata del database

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


0Ldtpcd.png


in pratica dovrebbe funzionare cosi

1) Inserimento film nel codice 1 (questo serve per inserimento film, capito la logica posso invertire per actor)
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

tipo questo

form1.png

io devo inserire
actor,
genre
e
credited


spero ho spiegato bene
 
Ultima modifica:
Ciao Tommy03 :)

io inserisco attualmente i dati direttamete in pypmyadmin (perche' dalla form e' complicato e i dati non sono collegati)

quindi prima vado nella tabella film e inserisco il film

poi devo collegare il film ad actor

vado in film_actor inserisco film_id e actor_id (piu' altri 2 dati se sono diponibili)

fatto, adesso nella scheda attore visualizzo il film collegato al suo id





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

0Ldtpcd.png



questo vorrei farlo nella form

1) Inserimento film nel codice 1 (questo serve per inserimento film, capito la logica posso invertire per actor)
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

form1.png


io devo inserire
actor,
genre
e
credited
 
questo codice che vorrei ottimizzare e' molto complicato,
in realtà il codice é semplicissimo, ma la sua logica é un poco bizzarra,

parto dal presupposto che tu voglia imparare, non avere uno script funzionante, sviluppato da terzi,
(se mi sbaglio, scusa, mi ritiro e tu non leggere il testo che segue)

il primo script sembra essere stato realizzato per modificare i dati presenti nel db ma poi esegue una insert
é uno script che non lavora bene, ne per inserire ne per modificare i dati

potrei riscriverti lo script, ma se tu volessi provare a ragionare, mettendo in lista i passi da fare per inserire i dati,
ovvero come dovresti comportarti e di conseguenza cosa dovrebbe fare lo script
esempio,
1) visualizzare un form per inserire i dati,
2) controllare la loro validità, segnalando gli errori,
3) gestire la correzione degli errori
4) inserire i dati nel db quando sono stati risolti tutti gli eventuali errori
5) confermare l'inserimento e tornare al form per una nuova operazione
 
in realtà il codice é semplicissimo, ma la sua logica é un poco bizzarra,

parto dal presupposto che tu voglia imparare, non avere uno script funzionante, sviluppato da terzi,
(se mi sbaglio, scusa, mi ritiro e tu non leggere il testo che segue)

il primo script sembra essere stato realizzato per modificare i dati presenti nel db ma poi esegue una insert
é uno script che non lavora bene, ne per inserire ne per modificare i dati
.....

Ciao marino51,

1) se tu leggi sopra ho scritto "io inserisco attualmente i dati direttamete in pypmyadmin"

2) quindi la form non esiste, e' solo un abbozzo presa da un altro codice che ho provato a modificare

3) se io riuscivo a fare quello che tu hai scritto allora non venivo a chiedere aiuto qui

4) lo ripeto un'altra volta (lo scritto pure nel post di presentazione)
NON SONO UN PROGRAMMATORE,
sto imparando tutto da solo con i miei limiti
 
3) se io riuscivo a fare quello che tu hai scritto allora non venivo a chiedere aiuto qui
sto imparando tutto da solo con i miei limiti
credo di capire l'italiano, e mi cito,
parto dal presupposto che tu voglia imparare, non avere uno script funzionante, sviluppato da terzi,
spero che anche tu capisca l'italiano e possa fermarti a pesare le parole che una persona scrive
 
1) Inserimento film nel codice 1 (questo serve per inserimento film, capito la logica posso invertire per actor)
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,
Te vuoi fare questo giusto? Ma i codici che hai messo nel primo post funzionano? Io dovrei modificare quelli?
 
questa e' per inserire il film ho cambiato da modifica a inseririsci,

per modifica funziona, quindi anche per inserimento anche dovrebbe
 
Ultima modifica:
Intanto nel primo file l'INSERT non può avere un WHERE. Devi mettere
PHP:
 $db_query=mysql_query("INSERT INTO nome_tabella(campo1,campo2,...) VALUES('valore1','valore2',...)");
 
questo é lo script per l'inserimento,
deve essere completato
MA, prova ad eseguirlo e vedi come si comporta, LEGGI i messaggi che vengono visualizzati
poi leggi lo script, dovresti capirlo perché molto facile,

come noterai é impostato con delle funzioni ed i dati da gestire collezionati in un'array,
in questo modo il codice é facilmente riutilizzabile per gestire le modifiche dei film (per esempio)
ma potrebbe essere inserita anche una funzione di ricerca ecc.

se ti sembra la strada giusta, completa il form,
sistema la funzione "leggiPost" eliminando i valori fissi e i commenti in modo che tutti i dati del form siano gestiti
poi posta il codice

questo il mio codice
PHP:
<?php
$set['script']     = $_SERVER['PHP_SELF'];
$set['Title']      = "I miei film";
$set['FirstField'] = "onload='document.filmForm.movie_title.focus()'";

$message = "";

if (empty($_POST))
{
    echo "lo script é chiamato per un nuovo inserimento<br />";

    inizializzaVariabili();
}
else
{
    echo "lo script é chiamato dopo un submit<br />";

    leggiPost();

    validaForm();

    if ( empty($message) ) aggiornaDB();
}
displayForm();
die;

function inizializzaVariabili()
{
    global $row;

    $row['movie_title']  = "";
    $row['also_known']   = "";
    $row['year']         = "";
    $row['minutes']      = "";
    $row['distributor']  = "";
    $row['studio']       = "";
    $row['release_data'] = "";
    $row['incollection'] = "";
    $row['synopsis']     = "";
}

function leggiPost()
{
    global $row;

    $row['movie_title']  = addslashes($_POST['movie_title']);
    $row['also_known']   = "also_known";    //addslashes($_POST['also_known']);
    $row['year']         = "year";          //addslashes($_POST['year']);
    $row['minutes']      = "minutes";       //addslashes($_POST['minutes']);
    $row['distributor']  = "distributor";   //addslashes($_POST['distributor']);
    $row['studio']       = "studio";        //addslashes($_POST['studio']);
    $row['release_data'] = "release_data";  //addslashes($_POST['release_data']);
    $row['incollection'] = "incollection";  //addslashes($_POST['incollection']);
    $row['synopsis']     = "synopsis";      //addslashes($_POST['synopsis']);
}

function validaForm()
{
    global $row, $message;

    // qui vanno fatti i controlli dei dati inseriti
}

function aggiornaDB()
{
    global $row, $message;

    // qui si aggiorna il db,
    // 1) apre la connessione
    // 2) inserisce il nuovo film
    // 3) verifica che sia stato inserito il film
    // 4) chiude la connessione

    $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']      . "'"
         . "  )";
    echo $sql . "<br />";

    $query = 1;  //$query = mysql_query( $sql );

    if( $query )
    {
        inizializzaVariabili();

        $message = "Congratulazioni! Dati inseriti.";
    }
    else
    {
        $message = "Attenzione : Dati non inseriti!";
    }
}

function displayForm()
{
    global $row, $set, $message;

echo "
<!DOCTYPE html>
<html>
  <head>
    <meta charset='utf-8'>
    <meta http-equiv='X-UA-Compatible' content='IE=edge'>
    <meta name='viewport' content='width=device-width, initial-scale=1'>

    <title> " . $set['Title'] . "</title>
  </head>
  <body " . $set['FirstField'] . ">


<div class='form-group'>

  <center><h1><span class='infoblock-pagetype'>inserisci dati</span></h1></center>

  <form name='filmForm' method='POST' action='" . $set['script'] . "'>

    <table id='biographyTable' border='0' cellspacing='0' cellpadding='0' width='100%'>
      <tbody>
        <tr>
          <td class='paramname'>
            <b>Title:</b>
          </td>
          <td class='paramvalue'>
            <input type='text' name='movie_title' id='movie_title' size='100' value='" . $row['movie_title'] . "'>
          </td>
        </tr>

        <tr>
          <td class='paramvalue' colspan='2'>
qui continua il form
          </td>
        </tr>

        <tr>
          <td class='paramvalue-footer center' colspan='2'>
            <br />
            <input type='submit' name='inserisci' id='inserisci' value='inserisci'>
            &nbsp;<br />
            &nbsp;<br />
          </td>
        </tr>
      </tbody>
    </table>
  </form>
  <div class='col-sm-10 col-sm-offset-2'><h2>" . $message . "</h2></div>
</div>
</body>
</html>
";
}

questo é il risultato

1587851993543.png
 
Ciao
marino51


grazie per lo script, ma c'e' un problema, diciamo che e' un metodo nuovo per me questo,

nella form dato che la sequenza php continua sono costretto a cambiare " " con questi ' '

inoltre il codice dentro php si decolora e io non capisco dove sta lo sbaglio (se c'e')

preferirei il metodo tradizionale, codice php, per il form html

ho messo gli altri dati ma ricevo errore (giustamente)

Parse error: syntax error, unexpected '?> ' in E:\OSPanel\domains\localhost\cinema\00inserisci_film.php on line 107

line 107


?>

si puo' gestire il tutto tradizionalmente?

PHP:
<?php
$set['script']     = $_SERVER['PHP_SELF'];
$set['Title']      = "I miei film";
$set['FirstField'] = "onload='document.filmForm.movie_title.focus()'";

$message = "";

if (empty($_POST))
{
    echo "lo script é chiamato per un nuovo inserimento<br />";

    inizializzaVariabili();
}
else
{
    echo "lo script é chiamato dopo un submit<br />";

    leggiPost();

    validaForm();

    if ( empty($message) ) aggiornaDB();
}
displayForm();
die;

function inizializzaVariabili()
{
    global $row;

    $row['movie_title']  = "";
    $row['also_known']   = "";
    $row['year']         = "";
    $row['minutes']      = "";
    $row['distributor']  = "";
    $row['studio']       = "";
    $row['release_data'] = "";
    $row['incollection'] = "";
    $row['synopsis']     = "";
}

function leggiPost()
{
    global $row;

    $row['movie_title']  = addslashes($_POST['movie_title']);
    $row['also_known']   = "also_known";    //addslashes($_POST['also_known']);
    $row['year']         = "year";          //addslashes($_POST['year']);
    $row['minutes']      = "minutes";       //addslashes($_POST['minutes']);
    $row['distributor']  = "distributor";   //addslashes($_POST['distributor']);
    $row['studio']       = "studio";        //addslashes($_POST['studio']);
    $row['release_data'] = "release_data";  //addslashes($_POST['release_data']);
    $row['incollection'] = "incollection";  //addslashes($_POST['incollection']);
    $row['synopsis']     = "synopsis";      //addslashes($_POST['synopsis']);
}

function validaForm()
{
    global $row, $message;

    // qui vanno fatti i controlli dei dati inseriti
}

function aggiornaDB()
{
    global $row, $message;

    // qui si aggiorna il db,
    // 1) apre la connessione
    // 2) inserisce il nuovo film
    // 3) verifica che sia stato inserito il film
    // 4) chiude la connessione

    $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']      . "'"
         . "  )";
    echo $sql . "<br />";

    $query = 1;  //$query = mysql_query( $sql );

    if( $query )
    {
        inizializzaVariabili();

        $message = "Congratulazioni! Dati inseriti.";
    }
    else
    {
        $message = "Attenzione : Dati non inseriti!";
    }
}

function displayForm()
{
    global $row, $set, $message;

echo

?>


<!DOCTYPE html>
<html>
  <head>
    <meta charset='utf-8'>
    <meta http-equiv='X-UA-Compatible' content='IE=edge'>
    <meta name='viewport' content='width=device-width, initial-scale=1'>

    <title> <?php echo $set['Title'] ?></title>
  </head>
  <body <?php echo $set['FirstField'] ?>


<div class="form-group">
        <div class="col-sm-10 col-sm-offset-2">
            <?php echo $message; ?>  
        </div>
    </div>

<div id="BioData" style="overflow: hidden;">

<center><h1> <span class="infoblock-pagetype">inserisci dati</span></h1></center>

<form action="0inserisci_film.php" method="post">


<table id="biographyTable" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td class="paramname">
<b>Title:</b>
</td>
<td class="paramvalue">
<input name="movie_title" type="text" size="100" id="movie_title" >
</td>
</tr>
<tr>
<td class="paramname">
<b>Also Known As:</b>
</td>
<td class="paramvalue">
<textarea name="also_known" id="also_known" size="50"  style="width: 98%"></textarea>
</td>
</tr>
<tr>
<td class="paramname">
<b>Year: </b>
</td>
<td class="paramvalue">
<input name="year" type="text" size="10" id="year">
</td>
</tr>
<tr>
<tr>
<td class="paramname">
<b>Minutes: </b>
</td>
<td class="paramvalue">
<input name="minutes" type="text" size="10" id="minutes">
</td>
</tr>
<tr>
<td class="paramname">
<b>Distributor: </b>
</td>
<td class="paramvalue">
<input name="distributor" type="text" size="100" id="distributor">
</td>
</tr>
<tr>
<td class="paramname">
<b>Studio: </b>
</td>
<td class="paramvalue">
<input name="studio" type="text" size="100" id="studio" >
</td>
</tr>
<tr>
<td class="paramname">
<b>Release Date: </b>
</td>
<td class="paramvalue">
<input name="release_data" type="text" size="15" id="release_data">
</td>
</tr>
<tr>
<td class="paramname">
<b>In Collection: </b> (<b><font color="red">selezionare il valore</font></b>)
</td>
<td class="paramvalue">
<select name='incollection'>
<option selected value="<?php echo $incollection; ?>"><?php /* fix 2019.09.21 */ echo $incollection; ?>
<?php
        /* possible options for career status */
        $incollection=array(
            0=>'',
            1=>'Yes',
            2=>'No'
           
        );

        for( $i=0; $i < count( $incollection ); $i++ ){
            /* is this item selected? */
            $selected = $i==$incollection ? ' selected' : '';
            printf('
                <option value="%d"%s>%s',
                $i,
                $selected,
                $incollection[ $i ]
            );
        }

    ?>
    </option>
</select>
</td>
</tr>
<!-- TESTO DEL COMMENTO<tr>
<td class="paramname">
<b>Status:</b> (<b><font color="red">Active, Retired, Dead</font></b>)
</td>
<td class="paramvalue">
<input name="status" type="text" id="status" value="<?php// echo $status;?>">
</td>
</tr>
<tr> -->






<tr>
<td class="paramname">
<b>Synopsis: </b>
</td>
<td class="paramvalue">
<textarea cols="80" name="synopsis" id="editor1" rows="10"   ></textarea>
</td>
</tr>

<!-- ckeditor(se ne metti piu di uno cambia textarea type="text" id="xxxxxxx" e replace('xxxxxxx', ) -->

<script src="ckeditor/ckeditor.js"></script>


<script>
    CKEDITOR.replace('editor1', {
        extraPlugins: 'colorbutton,colordialog'
    });
</script>
<!-- ckeditor(se ne metti piu di uno cambia textarea type="text" id="xxxxxxx" e replace('xxxxxxx', ) -->






<tr>
        <td class="paramvalue-footer center" colspan="2">
            <br />
<input name="inserisci" type="submit" id="inserisci" value="inserisci">
&nbsp;<br />
            &nbsp;<br />
        </td>
    </tr>
</tbody>
</table>
</form>



  <div class='col-sm-10 col-sm-offset-2'><h2><?php echo $message; ?></h2></div>
</div>
</body>
</html>
 
diciamo che e' un metodo nuovo per me questo
a me sembra la stessa cosa, php e html sono il più distinti possibile, per evitare problemi
ho utilizzato echo per visualizzare il form solo perché lo preferisco, ma avrei potuto farne a meno
leggi lo script vedrai che é semplicissimo da comprendere
per quanto riguarda apici e virgolette, spesso si trova codice incasinato, se una persona deve apportare modifiche, deve sudare sette camicie per capire come inserire parti nuove,
nel mio codice trovi solo apici per html e virgolette per php é questione di "pulizia" del codice

inoltre il codice dentro php si decolora e io non capisco dove sta lo sbaglio (se c'e')
non abbiamo applicato nessun css che gestisce la "formattazione" della pagina, se puoi allegare ad un post il file ".css", lo applichiamo e vediamo l'effetto che fa

tornando al codice,

per provare la select "incollection" ho inserito 1 qui, inseriscilo anche tu, lo toglieremo alla fine
PHP:
    $row['release_data'] = "";
    $row['incollection'] = "1";
    $row['synopsis']     = "";

questa é la sola funzione che devi sostituire completamente, tutto il resto del codice rimane inalterato
PHP:
function displayForm()
{
    global $row, $set, $message;

    // valorizza la select "incollection"
    $opt = "";
    $incollection = array( 0 => '', 1 => 'Yes', 2 => 'No' );  // possible options for career status
    for( $i=0; $i < count($incollection); $i++ )
    {
        $selected = $i == $row['incollection'] ? ' selected' : '';
        $opt .= "<option" . $selected . " value='" . $i . "'>" . $incollection[$i] . "</option>";
    }

echo "
<!DOCTYPE html>
<html>
  <head>
    <meta charset='utf-8'>
    <meta http-equiv='X-UA-Compatible' content='IE=edge'>
    <meta name='viewport' content='width=device-width, initial-scale=1'>

    <title> " . $set['Title'] . "</title>
  </head>
  <body " . $set['FirstField'] . ">


<div class='form-group'>

  <center><h1><span class='infoblock-pagetype'>inserisci dati</span></h1></center>

  <form name='filmForm' method='POST' action='" . $set['script'] . "'>

    <table id='biographyTable' border='0' cellspacing='0' cellpadding='0' width='100%'>
      <tbody>
        <tr>
          <td class='paramname'>
            <b>Title:</b>
          </td>
          <td class='paramvalue'>
            <input type='text' name='movie_title' id='movie_title' size='100' value='" . $row['movie_title'] . "' />
          </td>
        </tr>
        <tr>
          <td class='paramname'>
            <b>Also Known As:</b>
          </td>
          <td class='paramvalue'>
            <textarea name='also_known' id='also_known' size='50'  style='width: 98%' value='" . $row['also_known'] . "'></textarea>
          </td>
        </tr>
        <tr>
          <td class='paramname'>
            <b>Year: </b>
          </td>
          <td class='paramvalue'>
            <input type='text' name='year' id='year' size='10' value='" . $row['year'] . "' />
          </td>
        </tr>
        <tr>
        <tr>
          <td class='paramname'>
            <b>Minutes: </b>
          </td>
          <td class='paramvalue'>
            <input type='text' name='minutes' id='minutes' size='10' value='" . $row['minutes'] . "' />
          </td>
        </tr>
        <tr>
          <td class='paramname'>
            <b>Distributor: </b>
          </td>
          <td class='paramvalue'>
            <input type='text' name='distributor' id='distributor' size='100' value='" . $row['distributor'] . "' />
          </td>
        </tr>
        <tr>
          <td class='paramname'>
            <b>Studio: </b>
          </td>
          <td class='paramvalue'>
            <input type='text' name='studio' id='studio' size='100' value='" . $row['studio'] . "' />
          </td>
        </tr>
        <tr>
          <td class='paramname'>
            <b>Release Date: </b>
          </td>
          <td class='paramvalue'>
            <input type='text' name='release_data' id='release_data' size='15' value='" . $row['release_data'] . "' />
          </td>
        </tr>
        <tr>
          <td class='paramname'>
            <b>In Collection: </b> (<b><font color='red'>selezionare il valore</font></b>)
          </td>
          <td class='paramvalue'>
            <select name='incollection', id='incollection'>" . $opt . "</select>
          </td>
        </tr>
        <tr>
          <td class='paramname'>
            <b>Synopsis: </b>
          </td>
          <td class='paramvalue'>
            <textarea name='synopsis' id='editor1' rows='10' cols='80' value='" . $row['synopsis'] . "'></textarea>
          </td>
        </tr>
<!--
        <tr>
          <td class='paramname'>
            <b>Status:</b> (<b><font color='red'>Active, Retired, Dead</font></b>)
          </td>
          <td class='paramvalue'>
            <input type='text' name='status' id='status' value='" . $row['status'] . "' />
          </td>
        </tr>
-->
        <tr>
          <td class='paramvalue-footer center' colspan='2'>
            <br />
            <input type='submit' name='inserisci' id='inserisci' value='inserisci'>
            &nbsp;<br />
            &nbsp;<br />
          </td>
        </tr>
      </tbody>
    </table>
  </form>
  <div class='col-sm-10 col-sm-offset-2'><h2>" . $message . "</h2></div>
</div>
</body>
</html>
";
}


questo il risultato, nota "YES" (1) selezionato

1587888854856.png
 
Alex_70 ha scritto:

inoltre il codice dentro php si decolora e io non capisco dove sta lo sbaglio (se c'e')
marino51

non abbiamo applicato nessun css che gestisce la "formattazione" della pagina, se puoi allegare ad un post il file ".css", lo applichiamo e vediamo l'effetto che fa

Ciao marino51, buongiorno :)

quando dicevo che si decolora il codice mi riferivo all'editor, io uso Notepad++ con i plugin e mi trovo molto bene,

inserendo l'echo dentro il form non riesco a vedere le differenze, e possibile che sbaglio

inoltre l'editor mi suggerisce anche il codice

ok, provo quest'altro e ti faccio sapere

poi bisogna collegare questo con l'altro codice che relaziona film e actor

grazie
 
poi bisogna collegare questo con l'altro codice che relaziona film e actor
un passo per volta, vorrei inserire le funzioni di ricerca e modifica dei film inseriti, se se d'accordo

ps, io utilizzo più banalmente "blocco note" di windows
per evitare l'echo bisona modificare "value"
 
e questo dove metterlo?

lo avevo inserito prima ma non lo vedo piu' :rolleyes:

PHP:
<!-- ckeditor(se ne metti piu di uno cambia textarea type="text" id="xxxxxxx" e replace('xxxxxxx', ) -->

<script src="ckeditor/ckeditor.js"></script>


<script>
    CKEDITOR.replace('editor0', {
        extraPlugins: 'colorbutton,colordialog'
    });
</script>
<!-- ckeditor(se ne metti piu di uno cambia textarea type="text" id="xxxxxxx" e replace('xxxxxxx', ) -->
 

Discussioni simili