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 confusioneCome 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.