• User Attivo

    Query in codice

    Salve,

    ho trovato questo codice per caricare le immagini, funziona bene, sposta le foto in una e controlla se il file e' stato caricato precedentamente.
    Il problema e che e' senza la query per inserire i dati nel database,

    ho creato questa ma...non so la posizione esatta del codice dove inserirla:bho:

    questa e' la query

    [PHP]$sql = "INSERT INTO images (file, size) VALUES ('$filename', '$filenamesize')";[/PHP]

    grazie per eventuale aiuto

    questo e' il codice

    [PHP]
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
    <title>title</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="description" content="" />
    <meta name="keywords" content="" />
    <meta name="robots" content="index,follow" />
    <link rel="stylesheet" type="text/css" href="styles.css" />
    </head>

    <body>
    <form action="" enctype="multipart/form-data" method="post">
    <input id="file" name="file" type="file" />
    <input id="Submit" name="submit" type="submit" value="Submit" />
    </form>

    <?php

    // Upload and Rename File

    if (isset($_POST['submit']))
    {
    $filename = $_FILES["file"]["name"];
    $file_basename = substr($filename, 0, strripos($filename, '.')); // get file extention
    $file_ext = substr($filename, strripos($filename, '.')); // get file name
    $filesize = $_FILES["file"];
    $allowed_file_types = array('.doc','.docx','.rtf','.png','.jpg');

    if (in_array($file_ext,$allowed_file_types) && ($filesize < 2000000))
    {    
        // Rename file
        $newfilename = md5($file_basename) . $file_ext;
        if (file_exists("upload/" . $newfilename))
        {
            // file already exists error
            echo "<br>" .  "<b>" . "Attenzione! - Hai già caricato questo file." . "</b>";
        }
        else
        {        
            move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $newfilename);
            echo "<br>" .  "<b>" . "il file è stato caricato con successo.";        
        }
    }
    elseif (empty($file_basename))
    {    
        // file selection error
        echo "<br>" .  "<b>" . "Seleziona un file da caricare."   . "</b>";
    } 
    elseif ($filesize > 2000000)
    {    
        // file size error
        echo "<br>" .  "<b>" . "Il file che stai tentando di caricare è troppo grande."  . "</b>";
    }
    else
    {
        // file type error
        echo "<br>" .  "<b>" . "Solo questi tipi di file sono consentiti per il caricamento: "  . "</b>" . implode(', ',$allowed_file_types);
        unlink($_FILES["file"]["tmp_name"]);
    }
    

    }

    ?>

    </body>
    </html>

    [/PHP]


  • User Attivo

    [PHP]
    else
    {
    move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $newfilename);
    // QUI INSERISCI LA TUA QUERY
    echo "<br>" . "<b>" . "il file è stato caricato con successo.";
    }
    [/PHP]


  • User Attivo

    perfetto funziona 🙂 grazie flaviors200

    ho tolto md5 perche' me lo rinominava, questo pero' un codice per testare il funzionamento (test su un'altra tabella del database)

    adesso quello che vorrei fare e integrarlo nella pagina actor e da li caricare le foto,

    l'id lo prelevo con questo

    [PHP]
    require_once("connetti.php");

    $actor_id = $_GET["id"];
    //......id prlevato tramite get: $id=_GET['id'];
    $query = mysql_query("SELECT * FROM actor WHERE actor_id=" . (int)$actor_id) or die ("Error in query: " . mysql_error());
    $row = mysql_fetch_array ($query);

    [/PHP]

    ci sono problemi pero',

    quando carico il file con il form rimane il messagio sullo schermo

    **il file è stato caricato con successo.

    **e se ricarico la pagina mi ricarica il file (o tenta, dato che controlla se esiste)

    poi, integrare l'id nel codice?

    altro problema, le foto risiedono in questa cartella

    image_upload/actor/uploads

    per le gallery inviduali avrei pensato a questo

    image_upload/actor/uploads/Lind Blair/ ---------> creazione della cartella attore prelevato dal campo nome dell'attore

    il risultato dovrebbe essere questo

    image_upload/actor/uploads/Lind Blair/linda_blair_01.jpg
    image_upload/actor/uploads/Lind Blair/linda_blair_02.jpg

    quindi si dovrebbe prelevare il nome attore e creare la cartella, e poi inserirlo nella query

    come si ottiene questo?

    questa e la struttura gallery

    actor_id_fk e relazionato con actor_id in un'altra tabella

    image


  • User Attivo

    non capisco ho creato un nuovo campo info nel database, ma non lo inserisce :arrabbiato:

    [PHP]Info: <input id="info" name="info" type="text" /">[/PHP]

    [PHP]
    $filename = $_FILES["file"]["name"];
    $file_basename = substr($filename, 0, strripos($filename, '.')); // get file extention
    $file_ext = substr($filename, strripos($filename, '.')); // get file name
    $filesize = $_FILES["file"];
    $allowed_file_types = array('.doc','.docx','.rtf','.png','.jpg');
    $info = $_FILES["info"];
    [/PHP]

    [PHP]
    move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $newfilename);

            // QUI INSERISCI LA TUA QUERY
            $sql = "INSERT INTO images (file, size, info) VALUES ('$newfilename', '$filesize', '$info')"; 
             // execute query
              mysqli_query($db, $sql);
    

    [/PHP]


  • User Attivo

    @Alex_2019 said:

    non capisco ho creato un nuovo campo info nel database, ma non lo inserisce :arrabbiato:

    $_POST["info"] al posti di $_FILES["info"]

    Per quanto riguarda il discorso cartelle, in un'altra discussione ti era già stato suggerito di non utilizzare i nomi degli attori per nominare le cartelle, bensì l'id dell'attore.

    Ad esempio anziché

    image_upload/actor/uploads/Lind Blair/linda_blair_01.jpg

    potrebbe essere

    image_upload/actor/uploads/335/nome-immagine.jpg

    Ad ogni modo, se proprio vuoi usare il nome dell'attore/attrice come nome per la sottocartella, dovresti prima ottenere uno slug partendo dalla stringa di partenza.

    Dai un'occhiata a questo https://stackoverflow.com/questions/2955251/php-function-to-make-slug-url-string

    Ad esempio

    Linda Blair diventa linda-blair
    Gérard Depardieu diventa gerard-depardieu


  • User Attivo

    $_POST["info"] al posti di $_FILES["info"]

    😄 la soluzione semplice era davanti ai miei occhi

    per lo slug do una occhiata domani, con calma :gthi:

    resto il problema di come creare la cartella gallery per ogni attore :dull:

    suggerimenti sul codice o altro :bho:

    grazie flaviors200 per i tuoi consigli 🙂

    ho aggiustato il codice, perche' mi sono accorto che se ricaricavo la pagina mi usciva il messaggio che il file era doppio la query veniva egualmente eseguita

    da cosi

    [PHP]
    else
    {
    move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $newfilename);
    // QUI INSERISCI LA TUA QUERY
    echo "<br>" . "<b>" . "il file è stato caricato con successo.";
    }
    [/PHP]

    a cosi

    [PHP]
    else
    {

    // QUI INSERISCI LA TUA QUERY 
      
            $sql = "INSERT INTO images (file, size, info) VALUES ('$newfilename', '$filesize', '$info')"; 
             // execute query
              mysqli_query($db, $sql);
    
            
            move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $newfilename);
    

    [/PHP]


  • User Attivo

    Per creare le cartelle puoi usare la funzione mkdir() di PHP

    [PHP]
    <?php
    mkdir("/path/nome-cartella", 0755);
    [/PHP]

    Ricordati di indicare il path (percorso) relativo alla cartella.

    Sul discorso nome cartelle puoi anche utilizzare lo slug, ma devi salvartelo nel database, altrimenti non riesci ad associare l'attore alla sua specifica cartella.

    Come vedi è una soluzione più complessa e non esente da problemi. Che succede infatti nel caso di attori omonimi (ammesso che ce ne siano)? Avranno la stessa cartella!

    Senza dimenticare che devi aggiungerlo per ciascun attore già inserito. Ergo usa l'id attore 🙂


  • User Attivo

    Ciao flaviors200,

    per la questione director risolvo dopo, adesso sono cominciati i problemi,

    fino ad ora ho usato una tabella test, adesso ho apportato modifiche al codice per caricare le foto direttamente dalla scheda attore,

    ottengo l'id, la foto viene spostata nella cartella ma la query non viene effettuata (credo sia sbagliata)

    la struttura del database e cosi

    tabella actor
    collegata con
    tabella gallery

    actor_id (actor)
    image

    actor_id_fk (gallery)

    image

    tramite la relazione

    image

    questo e' il codice modificato, non capisco :bho:

    uploadfoto.php

    [PHP]<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
    <title>title</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="description" content="" />
    <meta name="keywords" content="" />
    <meta name="robots" content="index,follow" />
    <link rel="stylesheet" type="text/css" href="styles.css" />
    </head>

    <body>

    <?php
    // Create database connection
    require_once("connetti.php");

    $actor_id = $_GET["id"];
    //......id prelevato tramite get: $id=_GET['id'];
    $query = mysql_query("SELECT * FROM actor WHERE actor_id=" . (int)$actor_id) or die ("Error in query: " . mysql_error());
    $row = mysql_fetch_array ($query);

    ?>

    <form action="<?php echo $_SERVER['PHP_SELF'] . '?id=' . $actor_id; ?>" enctype="multipart/form-data" method="post">
    <input id="file" name="file" type="file" />
    Inserisci la descrizione: <input type="text" name="info" size="50" maxlength="100"><p>
    <input type="reset" value="Reset" class="button-reset"/>
    <input id="Submit" name="submit" type="submit" value="Submit" />
    </form>

    <?php

    // Upload and Rename File

    if (isset($_POST['submit']))
    {
    $filename = $_FILES["file"]["name"];
    $file_basename = substr($filename, 0, strripos($filename, '.')); // get file extention
    $file_ext = substr($filename, strripos($filename, '.')); // get file name
    $filesize = $_FILES["file"];
    $allowed_file_types = array('.doc','.docx','.rtf','.png','.jpg');
    $info = $_POST["info"];

    if (in_array($file_ext,$allowed_file_types) && ($filesize < 2000000))
    {    
        // Rename file
        // $newfilename = md5($file_basename) . $file_ext;  con md5 viene rinominato il file
        $newfilename = ($file_basename) . $file_ext;
        if (file_exists("upload/" . $newfilename))
        {
            // file already exists error
            echo "<br>" . "<font color='red'>" . "<b>" . "Attenzione! - Hai già caricato questo file." . "</font>" . "</b>";
        }
        else
        {        
    
    // QUI INSERISCI LA TUA QUERY fix by Alex inserire il codice prima di move_upload se no se si ricarica la pagina 
    // inserisce il record nel database ancora
            $query = mysql_query ("INSERT INTO gallery=file='".$_FILES['file']."', size='".$_FILES."', info='".$_POST['info']."' WHERE actor_id_fk=". $actor_id) ; 
             // execute query
              
    
            
            move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $newfilename);
            
            
            
            
            echo "<br>" .  "<font color='green'>" . "<b>" . "il file" . "&nbsp;" .$newfilename . "&nbsp;" ."è stato caricato con successo. " ."</font>";        
        }
    }
    elseif (empty($file_basename))
    {    
        // file selection error
        echo "<br>" .  "<b>" . "Seleziona un file da caricare."   . "</b>";
    } 
    elseif ($filesize > 2000000)
    {    
        // file size error
        echo "<br>" .  "<b>" . "Il file che stai tentando di caricare è troppo grande."  . "</b>";
    }
    else
    {
        // file type error
        echo "<br>" .  "<b>" . "Solo questi tipi di file sono consentiti per il caricamento: "  . "</b>" . implode(', ',$allowed_file_types);
        unlink($_FILES["file"]["tmp_name"]);
    }
    

    }

    print_r($_GET)

    ?>

    <?php echo "INSERT INTO gallery=file='".$_FILES['file']."', size='".$_FILES."', info='".$_POST['info']."' WHERE id=". $actor_id ?>

    </body>
    </html>
    [/PHP]


  • User Attivo

    :arrabbiato:
    non riesco a capire perche' non funziona

    [PHP]
    $query = mysql_query ("INSERT INTO gallery
    file='".$_FILES['file']."',
    size='".$_FILES."',
    info='".$_POST['info']."'
    WHERE actor_id_fk=". $actor_id) ;
    [/PHP]


  • User Attivo

    Ciao Alex,

    scusa ma fai veramente tanta confusione :mmm:

    Perché invece di buttarti alla cieca non cominci a studiare un pò le basi del linguaggio 🙂

    Ho capito che non è la tua professione e lo fai solo per puro hobby, ma imparando quantomeno i concetti basi di PHP eviti di fare esclusivamente copia e incolla e di impantanarti in sciocchezze che risolveresti in poco tempo.

    Nel codice che hai postato hai definito questa variabile

    [PHP]
    $filesize = $_FILES["file"];
    [/PHP]

    ma poi nella query scrivi questo

    [PHP]
    size='".$_FILES."'
    [/PHP]

    che è sbagliato. Il codice corretto è

    [PHP]
    size='".$_FILES["file"]."'
    [/PHP]

    oppure, dato che $_FILES["file"] lo hai già salvato nella variabile $filesize, puoi scrivere direttamente

    [PHP]
    size='".$filesize."'
    [/PHP]

    e così anche per gli altri campi.

    Considera che $_FILES è un array associativo, ossia un contenitore di variabili a cui puoi accedere tramite indici di tipo stringa e che contiene le informazioni sui file caricati tramite un form.

    Quindi, se ad esempio hai caricato il file tramite questo campo

    [HTML]
    <input id="file" name="file" type="file" />
    [/HTML]

    lato PHP potrai accedere alle informazioni di quel file tramite $_FILES['file']. Se nel <input> mettevi name="miofile", lato PHP avresti dovuto usare $_FILES['miofile'].

    Andando a vedere la documentazione di PHP https://www.php.net/manual/en/features.file-upload.post-method.php si scopre che puoi accedere alle seguenti informazioni

    [PHP]
    $_FILES['file']['name']
    $_FILES['file']['type']
    $_FILES['file']
    $_FILES['file']['tmp_name']
    $_FILES['file']['error']
    [/PHP]

    Devi quindi indicare sempre due indici, il primo rappresenta il name del tag HTML <input> da cui hai caricato il file e il secondo l'informazione a cui vuoi accedere (name, type, size, etc...).

    Se ti interessa ho pubblicato di recente un sito di nome Guida PHP, che raccoglie una serie di guide e tutorial sul PHP per principianti e non. Se ti va dacci un occhio 😉


  • User Attivo

    Ciao Flavio,
    e si, mi riesce meglio il mio lavoro, :fumato:

    ma il php e' diventato una fissa , ho ancora molto da imparare, sono un principante,

    dunque ho cambiato la query, risultato zero, non funziona

    [PHP]
    $query = mysql_query ("INSERT INTO gallery
    file='".$_FILES["file"]["name"]."',
    size='".$_FILES["file"]."',
    info='".$_POST['info']."'
    WHERE actor_id_fk=". $actor_id) ;

    [/PHP]

    graze per l'info del tuo sito


  • User Attivo

    qualcosa mi sfugge, non riesco a capire

    dopo l'esecuzione della query ricevo questo

    Attenzione! Dati non inseriti!

    **il file Blair, Linda (I)#[7].jpg è stato caricato con successo. **Array ( [id] => 54 ) INSERT INTO gallery=file='Array', size='', info='imdb' WHERE id=54

    provato con altra query semplficata, non funziona :bho:

    [PHP]
    $query = mysql_query ("INSERT INTO gallery
    name='".$filename."',
    size='".$filesize."',
    info='".$info."'
    WHERE actor_id_fk=". $actor_id) ;

    [/PHP]

    ho rinominato un campo nel database, da file a name per non confondermi

    image


  • User

    hai provato:

    
    
    'INSERT INTO `gallery`(name, size, info)....
    VALUES("'.$filename.'","'.$filesize.'","'.$info.'")....
    

  • User

    oppure

    'INSERT INTO `gallery`(name, size, info)....
    VALUES('.$filename.','.$filesize.','.$info.')....
    

  • User Attivo

    Ciao chiabgigi,

    ho provato ma non funziona, penso che l'errore sia qui 😞

    **Array ( [id] => 54 ) INSERT INTO gallery=file='Array', size='', info='imdb' WHERE id=54

    WHERE id=54**
    dovrebbe essere **
    WHERE actor_id_fk=54**


  • User Attivo

    Quando qualcosa non funziona, posta pure l'errore. Non quello dell'applicazione (Es. dati non inseriti) ma quello che ti segnala l'interprete PHP (Es. PHP Fatal error: o PHP Warning).

    Magari quando finisci quest'applicazione, prova a passare a MySQLi o meglio ancora a PDO per gestire le operazioni su database 😄

    Le funzioni native mysql_* sono morte e sepolte da tempo.


  • User

    ciao Alex
    quindi per facilitare il tuo lavoro e in nostro 'aiuto' dovresti anche pubblicare il motivo del malfunzionamento.
    Una cosa tipo.....
    https://drive.google.com/file/d/1uhUrxoW8EY685SHK-oBotQJ_S2u6DN90/view?usp=sharing


  • User Attivo

    flaviors200

    Ciao,
    non visualizzo nessen errore, semplicemente la query non viene eseguita, ma le foto vengono spostate nella cartella preimpostata,
    quando ho incominciato il mio progetto sono partito con il MySQL, passare a MySQLi significa controllare e modificare tutto il codice, un'impresa per me,
    ripeto non sono un programmatore , il mio lavoro e tutta'altro (li sono professionale) solo hobby e voglia d'imparare, questo progetto non sara' mai messo online, solo per uso personale, quindi non mi pongo il problema sulla sicurezza, login ecc..
    Forse in futuro quando saro' abbastanza bravo provero' con il MySQLi e il PDO.

    chiabgigi

    Ciao, leggi sopra

    ps: mi dovro' rassegnare e inserire i dati da phpmyadmin 😞


  • User

    @Alex
    per favore mi dici quali programmi stai usando?


  • User Attivo

    @chiabgigi said:

    @Alex
    per favore mi dici quali programmi stai usando?

    per il codice o il server?