• User Attivo

    Inserimento/delete/modifica dati da form con casella a discesa e id collegati

    Dopo il thread precedente proseguo con i miei quesiti,

    ho completato il codice all' 80%, adesso manca la cosa principale, inserire, cancellare, modifica dei dati da form.

    Ho gia' qualcosa pronto, ma quello che vorrei ottenere e' una cosa particolare
    ripropongo il mio database, semplificato, perche' ho aggiunto altri campi, ma quelli importanti sono qua

    Database struttura: 3 tabelle

    actor: <------Table
    actor_id
    foto
    nome

    film: <------Table
    film_id
    movie_title
    year

    film_actor: <------Table
    actor_id
    film_id

    faccio 1 esempio delle form che vorrei creare:

    **INSERIMENTO Film o Attori

    **voglio aggiungere un film e gli attori
    Dracula di Bram Stoker con Gary Oldman, Winona Ryder

    la cosa sarebbe semplice per il nome del film, ma io vorrei che i dati degli attori siano presi da una casella a discesa in cui e' visibile il nome (non l'id)
    per questo dovrei collegare la tabella fim_actor con una query per filtrare e visualizzare i datil, o stesso discorso per inserire un attore e un film,
    la domanda e', che query necessita per fare questo? (lo so, sono negato con le query, spero di imparare in futuro :gtsad:)

    :bho:

    grazie a tutti per le eventuali risposte, che mi aspetto siano tantissime :smile5:


  • User

    Ciao Alex, la domanda non è molto chiara. Cerco di interpretare e risponderti con varie soluzioni.

    Hai la tabella actor già completata (quindi sono già inseriti nel DB), infatti li vuoi selezionare con un <select> nell'interfaccia che andrai a creare.
    La query per selezionare l'intera lista degli attori dal DB è:
    SELECT * FROM actor;
    Poi nella select che andrai ad inserire nell'interfaccia grafica andrai ad inserire l'ID nelle value delle <option> e il nome all'interno, in questo modo:
    <select>
    <option value="ID">NOME</option>
    </select>

    Per quanto riguarda la tabella film_actor, è di congiunzione tra le due tabelle perché hanno una struttura molti a molti, quindi una volta inserito il nuovo film con una INSERT, dovrai prendere l'ID generato nella tabella actor ed inserirlo in film_actor con tutti gli ID degli attori selezionati.

    Ora, spero di aver risposto, almeno i parte alla tua domanda. Diversamente non esitare a chiedere ulteriori spiegazioni.

    P.S. Con cosa stai sviluppando? Stai usando un framework PHP?


  • User Attivo

    Ciao Federico :),

    ho del codice pronto preso da un ebook kindle, Sviluppo di siti Web con PHP 6, Apache, MySQL (2012),
    purtroppo ho dovuto trasciverlo tutto a mano in quanto il codice era non selezionabile, semplicemente delle foto, scansionate anche malissimo e a bassa risoluzione,
    roba da perdere la vista 😮
    inoltre la versione italiana e' incompleta e' piena di errori, devo trovare la versione inglese, che sembra migliore e senza il problema menzionato sopra.

    Come ho scritto vorrei adattarlo al mio database, ma ci sono errori che non riesco a risolvere

    C'e' un file **admin.php **che visualizza i film e gli attori,se clicco su Movies- People **ADD mi porta nella pagina Movie.php per i film e People.php **per le persone,
    ecco gli errori

    1. i campi sono ripetuti
    2. non e' possibile lasciare i campi vuoti (magari io voglio aggiungere solo un dato)

    altra cosa, vorrei visualizzare la foto degli attori e del film

    Come editor uso Notepad++, molto potente, mi colora il codice cosi capisco dove e' sbagliato, suggerimenti e altro (tramite plugin)

    ti spedisco i file completi di database cosi magari li controlli e vedi dove sta il problema,image e di cosa vorrei ottenere

    [https://yadi.sk/d/vpUDFGpA4GQAuw

    Grazie image
    ](https://yadi.sk/d/vpUDFGpA4GQAuw)


  • User

    Allora, da quel che capisco stai imparando ora a programmare WebApplication. Hai fatto bene ad acquistare un libro per apprendere le tecniche AMP.

    @Alex_2019 said:

    C'e' un file **admin.php **che visualizza i film e gli attori,se clicco su Movies- People **ADD mi porta nella pagina Movie.php per i film e People.php **per le persone,
    ecco gli errori

    1. i campi sono ripetuti
    2. non e' possibile lasciare i campi vuoti (magari io voglio aggiungere solo un dato)

    altra cosa, vorrei visualizzare la foto degli attori e del film

    Per quanto riguarda i file che mi stai citando, dovresti postare almeno qualche riga di codice e dirmi cosa non funziona. Altrimenti ti rifaccio l'intero progetto a mio piacimento ma non ti sarebbe utile per capire il libro! :bigsmile:
    Per quanto riguarda le immagini, invece, se sono salvate nel DB con un link, allora quando fai la query che ti restituisce tutti gli elementi del film (immagine compresa) basta inserirla in un tag html: vedi sotto l'esempio.

    QUERY: SELECT * FROM film WHERE film_id = 1;
    Questa ti restituisce tutti i campi del film con ID 1.

    Ora, tramite PHP (a seconda della versione che stai usando e del metodo che usi) puoi accedere a questi campi e li inserisci nel tuo HTML. Per farlo puoi usare la funzione echo di PHP.
    Otterrai una cosa del genere:
    <h2>FILM TITLE</h2>
    <h4>Film Description</h4>
    <img src="LINK SALVATO NEL DB" alt="descrizione immagine" />

    Abbastanza chiaro?
    Anyway, se vuoi postare qualche riga di codice sono lieto di esaminarle però se stai studiando in un libro del 2012 sicuramente starai utilizzando la versione 5 di PHP che aveva una serie di problematiche oltre al fatto che non era OOP.

    CONSIGLIO: Studiati PHP 7 (che è la versione attuale, più evoluta ed orientata ad oggetti). Puoi trovare dei corsi molto chiari su Udemy, anche in italiano (Ad esempio quelli dell'Ing. Hidran) sul PHP 7 e lo sviluppo di WebApp con AMP!
    Poi aggiornami sugli sviluppi!

    P.S. Trovi anche un bel corso su Laravel (il framework PHP) più utilizzato in circolazione. Questo potrebbe essere lo step successivo! :wink3:


  • User Attivo

    Ciao Federico,
    non devi farmi il progetto, poi lo adatto io, dovresti gentilmente cercare di fixare questi errori, io non so dove' il punto esatto del problema

    1. i campi sono ripetuti
    2. non e' possibile lasciare i campi vuoti (magari io voglio aggiungere solo un dato)

    guarda lo screenshot

    https://yadi.sk/i/0orIm93v9z9BpQ


  • User Attivo

    questo e' un pezzo di codice preso da movie.php

    [PHP]<td>Lead Actor</td>
    <td><select name="movie_leadactor">
    <?php
    // select actor records
    $query = 'SELECT
    people_id, people_fullname
    FROM
    people
    WHERE
    people_isactor = 1
    ORDER BY
    people_fullname';
    $result = mysql_query($query, $db) or die(mysql_error($db));

    // populate the select options with the results
    while ($row = mysql_fetch_assoc($result)) {
    foreach ($row as $value) {
    if ($row['people_id'] == $movie_leadactor) {
    echo '<option value="' . $row['people_id'] .
    '" selected="selected">';
    } else {
    echo '<option value="' . $row['people_id'] . '">';
    }
    echo $row['people_fullname'] . '</option>';
    }
    }
    ?>[/PHP]

    image
    i campi sono ripetuti e non c'e' lo spazio null


  • Moderatore

    Ciao Alex, come nei precedenti post, ti dico la mia. C'è un madornale errore di fondo.
    Le funzioni for, while, do while, foreach, servono ad ottenere informazioni contenute all'interno di array associativi o multidimensionali.
    In pratica cosa fanno? Queste funzioni mettono in circolo il raccoglitore (array) estraendo tutte le occorrenze al suo interno (una alla volta) fin tanto che ne esiste una.
    Partendo da questo presupposto, utilizzare:
    while(), con all'interno un foreach()
    non fa altro che prenderti il dato reale, per poi essere ciclato nuovamente, cosa inutile, con conseguente duplicazione di risultati.
    Ti consiglio di leggere:
    https://www.php.net/manual/en/language.types.array.php
    e le strutture di controllo: https://www.php.net/manual/en/language.control-structures.php
    dove all'interno trovi i cicli menzionati, ma anche altre nozioni utili quali le condizioni, dichiarazioni etc.
    Visto che vuoi imparare, iniziamo da qui. Magari trovi l'errore da solo e lo correggi.

    Ps. l'errore te l'ho scritto!


  • User Attivo

    Ciao Stefano 🙂
    il pezzo di codice che ho postato non lo scritto io, e trascritto a mano da me dal libro :D**
    PHP 6, Apache, MySQL: Sviluppo di siti Web (Linguaggi & programmazione) di Timothy Boronczyk

    quindi da come ho capito devo togliere foreach

    esatto?
    **


  • User Attivo

    Federico per il php 7 meglio aspettare, per adesso faccio scuola con il 5.6, poi magari in futuro ci faccio un pensiero 🙂


  • User Attivo

    con il consiglio di Ultima ho fixato il codice ;), adesso i valori non sono duplicati,
    solo che vorrei ottenere uno spazio vuoto per avere la possibilita' di non inserire nulla :mmm:

    [PHP]<?php
    // select actor records
    $query = 'SELECT
    people_id, people_fullname
    FROM
    people
    WHERE
    people_isactor = 1
    ORDER BY
    people_fullname';
    $result = mysql_query($query, $db) or die(mysql_error($db));

    // populate the select options with the results
    while ($row = mysql_fetch_assoc($result)) {
    {
    if ($row['people_id'] == $movie_leadactor) {
    echo '<option value="' . $row['people_id'] .
    '" selected="selected">';
    } else {
    echo '<option value="' . $row['people_id'] . '">';
    }
    echo $row['people_fullname'] . '</option>';
    }
    }
    ?>[/PHP]


  • Moderatore

    @Alex_2019 said:

    con il consiglio di Ultima ho fixato il codice ;), adesso i valori non sono duplicati,
    solo che vorrei ottenere uno spazio vuoto per avere la possibilita' di non inserire nulla :mmm:

    [PHP]<?php
    // select actor records
    $query = 'SELECT
    people_id, people_fullname
    FROM
    people
    WHERE
    people_isactor = 1
    ORDER BY
    people_fullname';
    $result = mysql_query($query, $db) or die(mysql_error($db));

    // populate the select options with the results
    while ($row = mysql_fetch_assoc($result)) {
    {
    if ($row['people_id'] == $movie_leadactor) {
    echo '<option value="' . $row['people_id'] .
    '" selected="selected">';
    } else {
    echo '<option value="' . $row['people_id'] . '">';
    }
    echo $row['people_fullname'] . '</option>';
    }
    }
    ?>[/PHP]
    Ottieni uno spazio vuoto in questo modo, applicando un echo con la option della select vuota prima del ciclo while
    [PHP]<?php
    // select actor records
    $query = 'SELECT
    people_id, people_fullname
    FROM
    people
    WHERE
    people_isactor = 1
    ORDER BY
    people_fullname';
    $result = mysql_query($query, $db) or die(mysql_error($db));
    // da qui
    echo '<option value="">Seleziona un attore..</option>';
    //
    // populate the select options with the results
    while ($row = mysql_fetch_assoc($result)) {
    {
    if ($row['people_id'] == $movie_leadactor) {
    echo '<option value="' . $row['people_id'] .
    '" selected="selected">';
    } else {
    echo '<option value="' . $row['people_id'] . '">';
    }
    echo $row['people_fullname'] . '</option>';
    }
    }
    ?>[/PHP]


  • User Attivo

    Benissimo,
    adesso adatto il codice al mio e vediamo cosa combino,
    spero che i precedenti attriti siano stati risolti e possiamo ricominciare da capo :smile5:
    Grazie a Ultima 🙂 e Federico 🙂 per il loro prezioso aiuto


  • User Attivo

    sto testando il codice nel database di prova e..ho un errore :arrabbiato:

    image

    [HTML]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' , )' at line 8[/HTML] :rollo:

    [PHP]<?php
    $db = mysql_connect('localhost', 'bp6am', 'bp6ampass') or
    die ('Unable to connect. Check your connection parameters.');
    mysql_select_db('moviesite', $db) or die(mysql_error($db));

    if ($_GET['action'] == 'edit') {
    //retrieve the record's information
    $query = 'SELECT
    movie_name, movie_type, movie_year, movie_leadactor, movie_director
    FROM
    movie
    WHERE
    movie_id = ' . $_GET['id'];
    $result = mysql_query($query, $db) or die(mysql_error($db));
    extract(mysql_fetch_assoc($result));
    } else {
    //set values to blank
    $movie_name = '';
    $movie_type = 0;
    $movie_year = date('Y');
    $movie_leadactor = 0;
    $movie_director = 0;
    }
    ?>[/PHP]

    line 8

    [HTML]$query = 'SELECT[/HTML]


  • Moderatore

    @Alex_2019 said:

    sto testando il codice nel database di prova e..ho un errore :arrabbiato:

    image

    [HTML]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' , )' at line 8[/HTML] :rollo:

    [PHP]<?php
    $db = mysql_connect('localhost', 'bp6am', 'bp6ampass') or
    die ('Unable to connect. Check your connection parameters.');
    mysql_select_db('moviesite', $db) or die(mysql_error($db));

    if ($_GET['action'] == 'edit') {
    //retrieve the record's information
    $query = 'SELECT
    movie_name, movie_type, movie_year, movie_leadactor, movie_director
    FROM
    movie
    WHERE
    movie_id = ' . $_GET['id'];
    $result = mysql_query($query, $db) or die(mysql_error($db));
    extract(mysql_fetch_assoc($result));
    } else {
    //set values to blank
    $movie_name = '';
    $movie_type = 0;
    $movie_year = date('Y');
    $movie_leadactor = 0;
    $movie_director = 0;
    }
    ?>[/PHP]

    line 8

    [HTML]$query = 'SELECT[/HTML]
    Sei proprio sicuro che sia questo il file e che sia esattamente questa la query? Te lo chiedo perchè in quella query non esite nessun dato indicato nell'errore **' , )'
    **Anche perchè, la query è scritta correttamente e non presenta nessun errore.


  • Moderatore

    Ti do una postilla, perchè o cercato è dato una letta rapida al libro che stai utilizzando. E' completamente, scritto con i piedi.
    Sul libro si fa riferimento a PHP6, ma nella pratica si ferma a PHP 5.3.
    Ci sono enormi lacune che spero siano derivate da traduzioni, perchè altrimenti sarebbe da ritirare dagli scaffali.
    Inoltre, oltre a problemi di battitura vari, il codice è sporco e spesso ridondante
    Ma cosa ben più grave, non vengono spiegate le funzioni di alcun tipo. Cosa grave per un libro di apprendimento, perchè presuppone una conoscenza già dei rispettivi linguaggi utilizzati, ma al contempo ha delle serie lacune.
    Ti do il mio parere professionale e magari se vuoi, ti indico anche dove e come apprendere sia il codice, che le tecniche, per imparare a realizzare un sito web. Ma devi essere disposto e riniziare, cosa che ti farebbe bene, perchè apprenderesti realmente qualcosa, invece di andare per tentativi.


  • User Attivo

    Si il libro fa pena, ma le versione italiana, mancano pezzi di codice e alcuni argomenti sono incompleti 😞 la versione inglese e' completa

    i dati puntano al file commit.php, li ci sono le query

    [PHP]<?php
    $db = mysql_connect('localhost', 'bp6am', 'bp6ampass') or
    die ('Unable to connect. Check your connection parameters.');
    mysql_select_db('moviesite', $db) or die(mysql_error($db));
    ?>
    <html>
    <head>
    <title>Commit</title>
    </head>
    <body>
    <?php
    switch ($_GET['action']) {
    case 'add':
    switch ($_GET['type']) {
    case 'movie':
    $query = 'INSERT INTO
    movie
    (movie_name, movie_year, movie_type, movie_leadactor,
    movie_director)
    VALUES
    ("' . $_POST['movie_name'] . '",
    ' . $_POST['movie_year'] . ',
    ' . $_POST['movie_type'] . ',
    ' . $_POST['movie_leadactor'] . ',
    ' . $_POST['movie_director'] . ')';
    break;
    }
    break;
    case 'edit':
    switch ($_GET['type']) {
    case 'movie':
    $query = 'UPDATE movie SET
    movie_name = "' . $_POST['movie_name'] . '",
    movie_year = ' . $_POST['movie_year'] . ',
    movie_type = ' . $_POST['movie_type'] . ',
    movie_leadactor = ' . $_POST['movie_leadactor'] . ',
    movie_director = ' . $_POST['movie_director'] . '
    WHERE
    movie_id = ' . $_POST['movie_id'];
    break;
    }
    break;
    }

    if (isset($query)) {
    $result = mysql_query($query, $db) or die(mysql_error($db));
    }
    ?>
    <p>Done!</p>
    </body>
    </html>[/PHP]

    accetto consigli :smile5:


  • User Attivo

    capito il problema, se riempio tutti i campi l'errore non viene visualizzato

    questo e' strano, nel database ho impostato tutti a Null, tranne movie_name

    image


  • User Attivo

    il codice funziona solo se compilo tutti i dati nella form, se lascio un campo/i vuoti genera errore :arrabbiato:


  • User

    L'errore a cui ti riferisci viene dal file commit.php nella parte in cui lanci la query di INSERT.
    Dovresti controllare cosa ricevi dal form in caso il campo non venga compilato. L'errore sta lì!


  • User Attivo

    @FedeMasiero said:

    L'errore a cui ti riferisci viene dal file commit.php nella parte in cui lanci la query di INSERT.
    Dovresti controllare cosa ricevi dal form in caso il campo non venga compilato. L'errore sta lì!

    questo

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' , )' at line 8