Inserire immagini in un database

Area dedicata al linguaggio HTML. Nozioni di base,esempi,script,programmazione
Rispondi
Avatar utente
eniac
PhpBB Expert
PhpBB Expert
Messaggi: 712
Iscritto il: 18/07/2013, 19:14
Link del Forum: Http://www.cesimmunizioni.eu/forum
Località: Abruzzo
Contatta:

Inserire immagini in un database

Messaggio da eniac »

Visto che non trovo un'area adatta ho deciso di postare qui, se ho sbagliato o se sono offtopic su questo forum prego gli amministratori di non farsi scrupoli ed eliminare il post.

Vediamo se potete aiutarmi, sto facendo un portale per il mio forum , ed avrei deciso di inserirci una pagina con un database, quindi sono andato su phpmyadmin, ho creato il database ed una tabella con dentro i 10 campi di cui avrei bisogno, tre di questi campi contengono foto, il resto sono tutti campi numerici o di testo . Ora il mio problema riguarda le foto , avevo pensato di inserirle nel database usando BLOB ma poi leggendo in giro vedo che è sconsigliato da tutti per il fatto che il database diventerebbe troppo "pesante" e quindi difficile da gestire , continuando a leggere vedo che è possibile inserire le foto in una cartella e inserire nelle relative tabelle il nome ed il path delle foto relative al record , ovviando cosi di far diventare il database stesso troppo grande, le letture che ho però partono tutte dal presupposto che il lettore abbia discreta manovrabilità di database mysql che purtroppo io non ho ancora acquisito, ora il mio problema è capire come definire questi campi con le immagini, ad esempio immagino di dover impostare il "TIPO" in varchar ma non so che lunghezza/valori dargli , inoltre non ho capito dove andare ad inserire nome e path delle foto , non so se sono stato abbastanza chiaro, qualcuno riesce a darmi qualche input a riguardo ?


phpBB version : 3.3.3
php version : 7.4.28
Avatar utente
Micogian
Globalmod
Globalmod
Messaggi: 551
Iscritto il: 17/03/2016, 17:53
Link del Forum: https://www.actaplantarum.org

Re: Inserire immagini in un database

Messaggio da Micogian »

Le immagini le puoi mettere in una cartella, nel database ci metti il nome del file se le immagini sono tutte inserite nella stessa cartella, se sono in cartelle diverse si puoi mettere il percorso.
Il problema è un altro, chi carica le immagini ? Perchè dovresti anche stabilire una dimensione standard, sia in pixel che in Kb.
Si tratta poi di creare una query che seleziona le immagini da visualizzare.
Una soluzione potrebbe essere che visualizzi le immagini ridotte che si possono ingrandire cliccandoci sopra. potresti usare Highslide che è free su siti non commerciali.
Un esempio potrebbe essere quello che io uso nel sito di Acta Plantarum per la Galleria della Fauna, ma non solo. https://www.actaplantarum.org/galleria_ ... allery.php
Anche nel mio sito personale utilizzo immagini che illustrano i miei viaggi, https://www.giannidose.altervista.org/gallery.php?aid=3
Prova a dare un'occhiata al sito di http://highslide.com/, ci sono degli esempi per creare degli Albums.
Avatar utente
eniac
PhpBB Expert
PhpBB Expert
Messaggi: 712
Iscritto il: 18/07/2013, 19:14
Link del Forum: Http://www.cesimmunizioni.eu/forum
Località: Abruzzo
Contatta:

Re: Inserire immagini in un database

Messaggio da eniac »

Grazie mille per la risposta :clapi: Sono intanto riuscito a configurare il database ed ho inserito 2 record di prova, spero di aver fatto bene, ti metto uno screen se vuoi dargli un'occhiata e dirmi se va bene, il problema ora è che non riesco a far andare lo script per far visualizzare i dati estratti dalla tabella,

Codice: Seleziona tutto

<?php
$DBhost = "localhost";
$DBuser = "root";
$DBpass = "";
$DBName = "archivio";

/* specifichiamo il nome della nostra tabella */
$table = "munizioni";

/* Connettiamoci al database */
mysqli_connect($DBhost,$DBuser,$DBpass) or die("Impossibile collegarsi al server");
@mysqli_select_db("$DBName") or die("Impossibile connettersi al database $DBName");

$query = mysqli_query("SELECT * FROM munizioni");
while($cicle=mysqli_fetch_array($query)){
    echo " 
         <tr>
                <td>".$cicle['N.r']."</td>
                <td> - </td> 
                <td>".$cicle['Calibro']."</td> 
                <td> - </td> 
              <td>".$cicle['nazione']."</td>
                <td> - </td> 
                <td>".$cicle['produttore']."</td> 
                <td> - </td> 
                <td>".$cicle['anno']."</td>
                <td> - </td> 
                <td>".$cicle['tipo']."</td>
                <td> - </td> 
                <td>".$cicle['fondello']."</td> 
                <td> - </td> 
                <td>".$cicle['cartuccia']."</td>
          </tr>";
         }
?>
</table>

mi restituisce sempre un errore

Codice: Seleziona tutto

Fatal error: Uncaught ArgumentCountError: mysqli_select_db() expects exactly 2 arguments, 1 given in C:\xampp\htdocs\web\indice.php:12 Stack trace: #0 C:\xampp\htdocs\web\indice.php(12): mysqli_select_db('archivio') #1 {main} thrown in C:\xampp\htdocs\web\indice.php on line 12
e non ne vengo fuori...penserò dopo a sistemare il tutto come si deve in una pagina, per ora vado per gradi.
Cattura.PNG
Non hai i permessi necessari per visualizzare i file allegati in questo messaggio.
phpBB version : 3.3.3
php version : 7.4.28
Avatar utente
Micogian
Globalmod
Globalmod
Messaggi: 551
Iscritto il: 17/03/2016, 17:53
Link del Forum: https://www.actaplantarum.org

Re: Inserire immagini in un database

Messaggio da Micogian »

Prova così:

Codice: Seleziona tutto

<?php
$DBhost = "localhost";
$DBuser = "root";
$DBpass = "";
$DBName = "archivio";

/* specifichiamo il nome della nostra tabella */
$table = "munizioni";

/* Connettiamoci al database */
$link = mysqli_init();
if (!$link) exit('<p>Impossibile connettersi al server del database in questo momento.</p>');
if (!mysqli_real_connect($link, $DBhost,$DBuser,$DBpass)) exit('<p>Impossibile connettersi al server del database in questo momento.</p>');

mysqli_select_db($link, $DBName);

$result = mysqli_query($link, "SET NAMES 'utf8'");
if (!$result) exit('<p>error performing query</p>');

//  Query
$query = mysqli_query("SELECT * FROM munizioni");
while($cicle=mysqli_fetch_array($query)){
    echo "<table>
         <tr>
                <td>".$cicle['N.r']."</td>
                <td> - </td> 
                <td>".$cicle['Calibro']."</td> 
                <td> - </td> 
              <td>".$cicle['nazione']."</td>
                <td> - </td> 
                <td>".$cicle['produttore']."</td> 
                <td> - </td> 
                <td>".$cicle['anno']."</td>
                <td> - </td> 
                <td>".$cicle['tipo']."</td>
                <td> - </td> 
                <td>".$cicle['fondello']."</td> 
                <td> - </td> 
                <td>".$cicle['cartuccia']."</td>
          </tr>";
         }
			echo "</table>";
mysqli_close($link);			
?>
Avatar utente
eniac
PhpBB Expert
PhpBB Expert
Messaggi: 712
Iscritto il: 18/07/2013, 19:14
Link del Forum: Http://www.cesimmunizioni.eu/forum
Località: Abruzzo
Contatta:

Re: Inserire immagini in un database

Messaggio da eniac »

Superato lo scoglio di connettersi al database, un pochetto va avanti , ma poi mi da questo errore..

Codice: Seleziona tutto

Fatal error: Uncaught ArgumentCountError: mysqli_query() expects at least 2 arguments, 1 given in C:\xampp\htdocs\web\indice.php:21 Stack trace: #0 C:\xampp\htdocs\web\indice.php(21): mysqli_query('SELECT * FROM m...') #1 {main} thrown in C:\xampp\htdocs\web\indice.php on line 21
In verità per evitare tutto questo sbattimento avevo cercato qualcosa online di bello e pronto, ho trovato basebear che è esattamente rispondente a quello che devo fare...purtroppo i prezzi sono improponibili e la versione free offre poco di spazio e gestione utenti, mica conosci qualcosa di analogo che sia un po' più di manica larga ?
phpBB version : 3.3.3
php version : 7.4.28
Avatar utente
Micogian
Globalmod
Globalmod
Messaggi: 551
Iscritto il: 17/03/2016, 17:53
Link del Forum: https://www.actaplantarum.org

Re: Inserire immagini in un database

Messaggio da Micogian »

Ma hai provato con il mio codice ?
Non saprei indicarti niente, io ho sempre usato php e html. Ho sempre trovato ottime guide su html.it
Ma io prima estrarrei i dati e poi, nel body farei la tabella utilizzando le variabili ricavate dalla query.
Avatar utente
eniac
PhpBB Expert
PhpBB Expert
Messaggi: 712
Iscritto il: 18/07/2013, 19:14
Link del Forum: Http://www.cesimmunizioni.eu/forum
Località: Abruzzo
Contatta:

Re: Inserire immagini in un database

Messaggio da eniac »

Si, quello che ho indicato è esattamente il risultato del codice che hai gentilmente postato più sopra...
phpBB version : 3.3.3
php version : 7.4.28
Avatar utente
Micogian
Globalmod
Globalmod
Messaggi: 551
Iscritto il: 17/03/2016, 17:53
Link del Forum: https://www.actaplantarum.org

Re: Inserire immagini in un database

Messaggio da Micogian »

Scusa, ho sbagliato io, non avevo guardato la query, avevo visto solo la connessione.
la query va fatta così:

Codice: Seleziona tutto

$query = mysqli_query("SELECT * FROM munizioni");
$result = mysqli_query($link, $query);
$i = 0;
while($row=mysqli_fetch_array($result))
{
	$Nr[$i]       		=  $row['Calibro'] ;
	$nazione[$i]      	=  $row['nazione'] ;
	$produttore[$i]     	=  $row['produttore'] ;
	$anno[$i]      		=  $row['anno'] ;
	$tipo[$i]      		=  $row['tipo'] ;
	$nazione[$i]     		=  $row['fondello'] ;
	$nazione[$i]     		=  $row['cartuccia'] ;
	echo "Risultati= " . $Nr[$i] . " - " . $Calibro[$i] . " - " . $nazione[$i] . " - " . $produttore[$i] . " - " . $anno[$i] . "<br>";
	++$i
}
mysqli_close($link);

Se funziona poi commenti la riga "echo" e usi le variabili nel table che farai nel body.
Avatar utente
eniac
PhpBB Expert
PhpBB Expert
Messaggi: 712
Iscritto il: 18/07/2013, 19:14
Link del Forum: Http://www.cesimmunizioni.eu/forum
Località: Abruzzo
Contatta:

Re: Inserire immagini in un database

Messaggio da eniac »

purtroppo mi da ancora errore

Codice: Seleziona tutto

Parse error: syntax error, unexpected token "}" in C:\xampp\htdocs\web\new.php on line 35
per sicurezza metto tutto il file qua sotto...non vorrei aver sbagliato ad attaccare i due codici

Codice: Seleziona tutto

<?php
$DBhost = "localhost";
$DBuser = "root";
$DBpass = "";
$DBName = "archivio";

/* specifichiamo il nome della nostra tabella */
$table = "munizioni";

/* Connettiamoci al database */
$link = mysqli_init();
if (!$link) exit('<p>Impossibile connettersi al server del database in questo momento.</p>');
if (!mysqli_real_connect($link, $DBhost,$DBuser,$DBpass)) exit('<p>Impossibile connettersi al server del database in questo momento.</p>');

mysqli_select_db($link, $DBName);

$result = mysqli_query($link, "SET NAMES 'utf8'");
if (!$result) exit('<p>error performing query</p>');

//  Query
$query = mysqli_query("SELECT * FROM munizioni");
$result = mysqli_query($link, $query);
$i = 0;
while($row=mysqli_fetch_array($result))
{
	$Nr[$i]       		=  $row['Calibro'] ;
	$nazione[$i]      	=  $row['nazione'] ;
	$produttore[$i]     	=  $row['produttore'] ;
	$anno[$i]      		=  $row['anno'] ;
	$tipo[$i]      		=  $row['tipo'] ;
	$nazione[$i]     		=  $row['fondello'] ;
	$nazione[$i]     		=  $row['cartuccia'] ;
	echo "Risultati= " . $Nr[$i] . " - " . $Calibro[$i] . " - " . $nazione[$i] . " - " . $produttore[$i] . " - " . $anno[$i] . "<br>";
	++$i
}
mysqli_close($link);
?>
Qui sopra non appare ma ho corretto un po nell'ultima parte che riguarda le variabili

Codice: Seleziona tutto

	$Nr[$i]       		=  $row['N.r'] ;
	$nazione[$i]      	=  $row['nazione'] ;
	$produttore[$i]     =  $row['produttore'] ;
	$anno[$i]      		=  $row['anno'] ;
	$tipo[$i]      		=  $row['tipo'] ;
	$fondello[$i]     	=  $row['fondello'] ;
	$cartuccia[$i]     	=  $row['cartuccia'] ;
phpBB version : 3.3.3
php version : 7.4.28
Avatar utente
Micogian
Globalmod
Globalmod
Messaggi: 551
Iscritto il: 17/03/2016, 17:53
Link del Forum: https://www.actaplantarum.org

Re: Inserire immagini in un database

Messaggio da Micogian »

Qual'è la riga 35 ?

Avevo fatto copia-incolla e non avevo sostituito i nomi delle variabili. E' che il codice io non l'ho provato ma mi sembra corretto.

Commenta la query e vedi se la connessione funziona.

Codice: Seleziona tutto

<?php
$DBhost = "localhost";
$DBuser = "root";
$DBpass = "";
$DBName = "archivio";

/* specifichiamo il nome della nostra tabella */
$table = "munizioni";

/* Connettiamoci al database */
$link = mysqli_init();
if (!$link) exit('<p>Impossibile connettersi al server del database in questo momento.</p>');
if (!mysqli_real_connect($link, $DBhost,$DBuser,$DBpass)) exit('<p>Impossibile connettersi al server del database in questo momento.</p>');

mysqli_select_db($link, $DBName);

$result = mysqli_query($link, "SET NAMES 'utf8'");
if (!$result) exit('<p>error performing query</p>');

/*
//  Query
$query = mysqli_query("SELECT * FROM munizioni");
$result = mysqli_query($link, $query);
$i = 0;
while($row=mysqli_fetch_array($result))
{
	$Nr[$i]       		=  $row['Calibro'] ;
	$nazione[$i]      	=  $row['nazione'] ;
	$produttore[$i]     	=  $row['produttore'] ;
	$anno[$i]      		=  $row['anno'] ;
	$tipo[$i]      		=  $row['tipo'] ;
	$fondello[$i]     	=  $row['fondello'] ;
	$cartuccia[$i]     	=  $row['cartuccia'] ;
	echo "Risultati= " . $Nr[$i] . " - " . $Calibro[$i] . " - " . $nazione[$i] . " - " . $produttore[$i] . " - " . $anno[$i] . "<br>";
	++$i
}
mysqli_close($link);
*/
?>
Rispondi