• 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
    

  • User

    Esattamente, proprio questo! Deriva dal pezzo di codice in commit.php dove hai la query di inserimento: INSERT INTO ecc...


  • User Attivo

    in alto c'e' il codice di **commit.php
    ho controllato, sembra tutto a tosto :bho:
    **


  • Moderatore

    Ciao Alex, prova a riscrivere la query, come te la ho scritta io.

    [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]


  • User Attivo

    Grazie Stefano 🙂
    provo

    ps: ricordo che questo e' un codice di test per testare le funzionalita', il database originale ha altri campi e altre relazioni, da riscrivere le query


  • User Attivo

    non funziona se si lasciano campi vuoti, restituisce questo errore (il solito)

    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

    line 8
    $query = 'SELECT

    se si inseriscono tutti i dati nei campi tutto procede bene senza errori

    :rollo:


  • User Attivo

    ok, lasciamo perdere il codice sopra, e' sbagliata la struttura

    sto sperimentando un'altro codice, questo e per UPDATE (poi cambio il parametro in INSERT, DELETE)

    qualcosa e' sbagliato, mi restituisce la query nella pagina, ma nel database effettua l'update correttamente

    ps: ho aggiunto un'altra query per role, ma non sono sicuro se e' strutturata giusta

    [PHP]<div>
    <label for="credited">Credited</label>
    <input type="text" class="textBox" placeholder="Text input" name="credited">
    </div><br>

        <div>
            <label for="role">Role</label>
            <input type="text" class="textBox" placeholder="Text input" name="role">
        </div><br>
        
        <div>
        
        
        <button type="submit" class="button">Add!</button></div><br>
    
        </form>
        <?php
            if (isset($_GET['movieid'])) {
                $movieid = $_GET['movieid'];
                $actorid = $_GET['actorid'];
                $credited = $_GET['credited'];
                $role = $_GET['role'];
                
                $sql = "UPDATE 
                film_actor 
                SET credited = '" . $credited . "' 
                , role = '" . $role . "' 
                WHERE film_actor.actor_id = '" . $actorid ."' 
                AND 
                film_actor.film_id = '" . $movieid ."'";
                
                echo $sql;
    
                $connection = new mysqli("localhost", "exadmin", "expass", "xxx");
                $result = $connection->query($sql);
                
            }
        ?>
    
    </div>[/PHP]
    

    image


  • Moderatore

    C'è un "echo $sql" nel codice, quindi ti stampa la query a video.
    Ti basta rimuoverla o commentarla


  • User Attivo

    ho risolto cosi 🙂

    [PHP]// esecuzione della query
    if (!$connection->query($sql)) {
    echo "Errore della query: " . $connection->error . ".";
    }else{
    echo "Dati <b> " . $credited . " " . $role . " </b> inseriti correttamente nel database."; $sql;[/PHP]

    grazie Stefano :smile5:

    mi aiuti a risolvere il mistero dell'altro thread

    http://www.giorgiotave.it/forum/php/260153-upload-foto-multiple-errore-nel-codice.html


  • User Attivo

    la query precedente funziona benissimo

    adesso mi serve una per inserire il titolo e collegarlo all'attore, ho fatto molti tentativi ma non riesco a risolvere :?:bho::rollo:

    Database struttura: 3 tabelle

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

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

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

    **questo e' il codice completo
    **
    [PHP]<!DOCTYPE html>
    <html>
    <head> <title> I4 - Add Movie to Actor Relation </title> </head>
    <link rel="stylesheet" href="S1.css">
    <body>

    <div align="center" style="margin-left: 18%; padding: 1px 15px;">
        <h1> Add Movie to Actor Relation</h1>
        
        <form method = 'GET' action='#'> <div class="form-group"><label for="movieid">Movie Title   </label><option value=NULL> </option>
        <div>
            <label for="movie_title">Movie Title</label>
            <input type="text" class="textBox" placeholder="Text input" name="movie_title">
        </div><br>
        
        
        <div>
            <label for="credited">Credited</label>
            <input type="text" class="textBox" placeholder="Text input" name="credited">
        </div><br>
        
        <div>
        
        
        <div>
            <label for="year">Year</label>
            <input type="text" class="textBox" placeholder="Text input" name="year">
        </div><br>
        
        <label for="actorid">Actor   </label><select class="form-control" name='actorid'><option value=NULL> </option> 
    
        <?php 
            $servername = "localhost";
            $username = "xxx";
            $password = "xxx";
            $dbname = "xxx";
            
            $connection = new mysqli($servername, $username, $password, $dbname);
            
            $dataCells = array();
    
            $sql = "select concat(actor_id,' ', nome, ' ', credited, ' ') , actor_id from actor;";
            
            $result = $connection->query($sql);
            while ($resultProperties = mysqli_fetch_field($result)) {
                $name = $resultProperties->name;
                array_push($dataCells, $name); 
            }
            
            $colIndex = 0;
            $actorName;
            while ($row = mysqli_fetch_array($result)) {
                foreach ($dataCells as $cell) {
                    if ($colIndex == 0){
                        $actorName = $row[$cell];
    
                    }
                    else if ($colIndex == 1) {
                        echo "<option value=" . $row[$cell] . ">" . $actorName;
                        echo "</option>";
                    }
    
                    $colIndex++;
                }
                $colIndex = 0;
            }
        ?>
        </select><br><br>
        
        <div>
        
        
        <button type="submit" class="button">Add!</button></div><br>
    
        </form>
    
        <?php
            if (isset($_GET['movieid'])) {
                $movieid = $_GET['movieid'];
                $movie_title = $_GET['movie_title'];
                $credited = $_GET['credited'];
                $year = $_GET['year'];
                $actorid = $_GET['actorid'];
                
                
                
                $sql = "insert into film values 
                movie_title = '". $movie_title . "'
                , credited = '" . credited . "'
                , year = '" . $year ."'
                WHERE actor.actor_id = '" . $actorid ."' 
                AND 
                film.film_id = '" . $movieid ."'";
                    //echo $sql;
                    $result = $connection->query($sql);
                
                
                $connection = new mysqli("localhost", "exadmin", "expass", "xxx");
                $result = $connection->query($sql);
                
                // esecuzione della query
    

    if (!$connection->query($sql)) {
    echo "Errore della query: " . $connection->error . ".";
    }else{
    echo "Dati <b> " . $movie_title . " " . $also_known . " </b> inseriti correttamente nel database."; $sql;
    }

            }
    

    ?>

    </div>
    

    </body>
    </html>

    [/PHP]


  • User

    Ciao Alex, scusa la domanda che mi viene spontanea, hai studiato un po' di database relazionali prima di creare le tre tabelle sopra?
    Hai ben capito cos'è una "relazione molti a molti" e come viene implementata con le tabelle in un DB?
    In caso, ti consiglio i tutorial di W3C, sono molto chiari su questo aspetto e potrebbero risolverti molti problemi.

    Anyway, la tabella film_actor si chiama "tabella di congiunzione" e serve appunto a tener traccia dei collegamenti dei vari attori all'interno di un film e dei vari film recitati da un attore (per l'appunto la relazione molti a molti)!
    Quindi, per riuscire a collegare un attore ad un film devi andare ad eseguire una insert nella tabella film_actor con i due ID, in questo modo:

    INSERT INTO film_actor VALUES (id_film_ricevuto, id_attore_ricevuto);

    Ovviamente devi ricevere gli ID del film e dei vari attori da collegare.
    Potresti ricevere gli ID degli attori al momento dell'inserimento di un nuovo film, oppure anche in una pagina successiva che andrai ad implementare dopo aver fatto inserire le informazioni essenziali del film.
    In caso ricevessi tutte le informazioni in un solo momento, prima dovresti lanciare una query per inserire un nuovo film, poi, attraverso l'apposita funzione php mysql_insert_id recuperi l'ID dell'ultimo inserimento (in questo caso il film) e procedi all'inserimento dei vari ID degli attori ricevuti nella tabella di congiunzione film_actor!

    Spero di essere stato chiaro!