Visualizzazione risultati 1 fino 19 di 19

Discussione: inserire in un database un'immagine situata nel server web

  1. #1
    Guest

    Predefinito inserire in un database un'immagine situata nel server web

    buonasera a tutti!
    volevo chiedervi come da domanda un modo per inviare un'immagine a un database semplicemente "linkando" la posizione in cui si trova l'immagine sul server.
    Grazie mille in anticipo!

  2. #2
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Esattamente nel modo in cui l'hai descritto:
    Codice PHP:
    $url_immagine = "http://percorso-dell-immagine.jpg";
    $query = "INSERT INTO tabella_immagine (url) VALUES('" . $url . "')";
    nell'esempio la tabella_immagine ha (almeno) un campo url. Per rappresentare un URL puoi usare un qualunque tipo testuale, una scelta abbastanza comune è VARCHAR(512), ma anche TINYTEXT. Qualcuno preferisce permettere URL ancora più lunghi, ma non mi risulta esserci una misura standard.

  3. #3
    Guest

    Predefinito

    Perche anch io avevo pensato di fare una cosa del genere pero non ero sicuro se funzionava...
    Grazie comunque😉

  4. #4
    Guest

    Predefinito

    Un ultima domanda...nel mio database le immagini hanno una struttura blob... funziona comunque?

  5. #5
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Sì e no.

    No perché un BLOB è qualcosa di pensato per contenere file binari, quindi lo useresti per uno scopo che non è quello corretto.

    Sì perché, proprio perché BLOB è un contenitore generico, non c'è nessun impedimento materiale nell'inserirvi dentro una stringa.

    In sintesi: per funzionare funziona, ma sarebbe meglio utilizzare un tipo di campo più adatto.

  6. #6
    Guest

    Predefinito

    Ciao oggi ho provato ciò che mi hai suggerito ma non funziona.
    Ecco il codice:
    Codice PHP:
    // database connection
    mysql_connect(localhost, mondo999, inventore999) OR DIE (mysql_error());

    // select the db
    mysql_select_db (prova2) OR DIE ("Unable to select db".mysql_error());
    $url_immagine = "https://www.mondo-tech.it/images/foto_42218.jpg";
    $query = "INSERT INTO test_image (url) VALUES('" . $url . "')";
    mysqli_close(prova2);

  7. #7
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Come fa a funzionare se non esegui la query?

  8. #8
    Guest

    Predefinito

    mzanella guarda ho cominciato a imparare mysql da poco...come faccio ad eseguirla?

  9. #9
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Ok, niente paura .

    Come prima cosa lascia perdere le funzioni mysql_*, che sono deprecate e quindi presto non saranno più utilizzabili con le nuove versioni di PHP. L'alternativa più simile è mysqli.

    Secondo, quando usi un valore di tipo stringa, racchiudilo tra apici singoli o doppi.

    Terzo, controlla sempre i valori di ritorno delle funzioni, in modo da individuare eventuali errori.

    L'iter è sempre lo stesso: effettui la connessione, costruisci o prepari l'interrogazione, la esegui, e chiudi:
    Codice PHP:
    // Abilita la segnalazione di tutti gli errori avvenuti nello script
    error_reporting(E_ALL);

    // Si connette e seleziona la base di dati
    $link = mysqli_connect('localhost', 'mondo999', 'inventore999', 'prova2');
    if (
    mysqli_connect_errno()) {
    echo
    "Connect failed: " . mysqli_connect_error();
    exit();
    }

    // Prepara l'interrogazione
    $url_immagine = "https://www.mondo-tech.it/images/foto_42218.jpg";
    $query = "INSERT INTO test_image (url) VALUES('" . $url_immagine ."')";

    // Esegue l'interrogazione
    $result = mysqli_query($link, $query);
    if (
    $result === false) {
    echo
    "Errore nella query: " . mysqli_error($link);
    }

    // Chiude la connessione
    mysqli_close($link);
    Occhio agli errori di sintassi che possono sempre essere presenti.
    Ultima modifica di mzanella : 13-06-2017 alle ore 20.48.46

  10. #10
    Guest

    Predefinito

    intanto ti ringrazio.
    Volevo chiederti cosa devo inserire al posto di url:
    Codice PHP:
    INSERT INTO test_image (url)

  11. #11
    Guest

    Predefinito

    inoltre dove gli dico in quale campo inserire l'immagine?

  12. #12
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Al posto di url ci va proprio il nome del campo in cui inserire il percorso dell'immagine .

  13. #13
    Guest

    Predefinito

    allora il mio database è strutturato cosi:
    la tabella si chiama tabella_files;
    i campi sono 2: id_file (si incrementa ad ogni link che viene uploadato), url (formato tinytext)
    E giusto settato cosi?

  14. #14
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Sì, è una struttura ragionevole.

  15. #15
    Guest

    Predefinito

    okay sto tentanto adesso di memmorizzare la riga URL della tabella in una variabile php:
    Codice PHP:
    $link1 = mysql_connect(localhost,mondo999,inventore999) or die("Impossibile collegarsi al server");
    $db_selected1 = mysql_select_db('immagini', $link1);
    $result1 = "SELECT * FROM table_images WHERE id = '$id'";
    $row1 = mysql_fetch_assoc($result1);
    $image = $row['url'];

    mysql_close($link1);
    per dopo visualizzarla attraverso un semplice link src:
    Codice PHP:
    <img alt='' src='<?php echo $image; ?>'
    ma il problema è che la variabile me la da come unknown

  16. #16
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Non stai eseguendo nessuna query .

    Cerca di tenere a mente i consigli precedenti:
    Come prima cosa lascia perdere le funzioni mysql_*, che sono deprecate e quindi presto non saranno più utilizzabili con le nuove versioni di PHP. L'alternativa più simile è mysqli.

    Secondo, quando usi un valore di tipo stringa, racchiudilo tra apici singoli o doppi.

    Terzo, controlla sempre i valori di ritorno delle funzioni, in modo da individuare eventuali errori.
    A cui se ne aggiunge uno: chiama le cose con il loro nome. Se stai componendo la stringa di una query, chiamala $query, o $querystring, o qualcosa di analogo, non $result altrimenti è facile fare confusione .

    Il codice PHP è abbastanza simile a quello dell'inserimento:
    Codice PHP:
    // Abilita la segnalazione di tutti gli errori avvenuti nello script
    error_reporting(E_ALL);

    // Si connette e seleziona la base di dati
    $link = mysqli_connect('localhost', 'mondo999', 'inventore999', 'prova2');
    if (
    mysqli_connect_errno()) {
    echo
    "Connect failed: " . mysqli_connect_error();
    exit();
    }

    // Prepara l'interrogazione
    // NOTA: Si assume che la variabile $id sia stata preventivamente definita
    $query = "SELECT * FROM table_images WHERE id = $id";

    // Esegue l'interrogazione
    $result = mysqli_query($link, $query);
    if (
    $result === false) {
    echo
    "Errore nella query: " . mysqli_error($link);
    }

    // Recupera il risultato
    $row = mysqli_fetch_assoc($result);
    if (empty(
    $row)) {
    echo
    "Nessun file con l'id specificato";
    }
    mysqli_free_result($result);

    // A questo punto puoi usare il risultato
    $image = $row['url'];
    echo
    $image;

    // Chiude la connessione
    mysqli_close($link);

  17. #17
    Guest

    Predefinito

    Si avevo anchio in mente di scrivere mysqli ma avevo paura che avessero sintassi diverse...solo per questo...comunque adesso provo😉

  18. #18
    Guest

    Predefinito

    E dopo svariate modifiche finalmente funziona!
    Ti ringrazio ancora!!!
    Curiosità... a cosa serve: mysqli_free_result($result) ?

  19. #19
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Quando esegui un'interrogazione che restituisce dei record set (tipicamente una SELECT), avrai notato che il risultato che ti viene restituito non è un vettore già pronto che contiene tutti i dati estratti, bensì un qualche tipo di valore (chiamato $result) che potrai usare successivamente per leggere i dati, ad esempio tramite funzioni come mysqli_fetch_assoc. Il motivo è legato alle prestazioni, conviene fare così per velocizzare il procedimento.

    Più precisamente, ciò che succede è che PHP copia i dati recuperati dal database utilizzando una certa locazione della memoria a cui non puoi accedere direttamente, ma che è accessibile tramite quel $result (che, se non ricordo male, è un valore di tipo resource).

    Ovviamente, quando hai finito di leggere i dati che ti interessavano, quella porzione di memoria occupata non serve più a nulla e può essere liberata, ma PHP non può sapere da solo quando hai terminato di usarla, quindi devi indicarglielo tu tramite la funzione mysqli_free_result.

    È un po' la stessa cosa che accade quando scrivi in un file, con fopen ti viene restituito un handler che dovrai passare a fwrite ed fread e, quando finisci le operazioni, dovrai chiudere con fclose.

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •