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!
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!
Esattamente nel modo in cui l'hai descritto:
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.Codice PHP:
$url_immagine = "http://percorso-dell-immagine.jpg";
$query = "INSERT INTO tabella_immagine (url) VALUES('" . $url . "')";
Perche anch io avevo pensato di fare una cosa del genere pero non ero sicuro se funzionava...
Grazie comunque😉
Un ultima domanda...nel mio database le immagini hanno una struttura blob... funziona comunque?
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.
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);
Come fa a funzionare se non esegui la query?
mzanella guarda ho cominciato a imparare mysql da poco...come faccio ad eseguirla?
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:
Occhio agli errori di sintassi che possono sempre essere presenti.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);
Ultima modifica di mzanella : 13-06-2017 alle ore 20.48.46
intanto ti ringrazio.
Volevo chiederti cosa devo inserire al posto di url:
Codice PHP:
INSERT INTO test_image (url)
inoltre dove gli dico in quale campo inserire l'immagine?
Al posto di url ci va proprio il nome del campo in cui inserire il percorso dell'immagine .
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?
Sì, è una struttura ragionevole.
okay sto tentanto adesso di memmorizzare la riga URL della tabella in una variabile php:
per dopo visualizzarla attraverso un semplice link src: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);
ma il problema è che la variabile me la da come unknownCodice PHP:
<img alt='' src='<?php echo $image; ?>'
Non stai eseguendo nessuna query .
Cerca di tenere a mente i consigli precedenti:
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 .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.
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);
Si avevo anchio in mente di scrivere mysqli ma avevo paura che avessero sintassi diverse...solo per questo...comunque adesso provo😉
E dopo svariate modifiche finalmente funziona!
Ti ringrazio ancora!!!
Curiosità... a cosa serve: mysqli_free_result($result) ?
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.