Array di blob ???

Salve, dovrei realizzare uno script per l'inserimento di dati in mysql, la struttura della tabella è:

titolo = testo

corpo testo = testo

immagine/i = blob (è possibile un array di blob)

Ho l'esigenza di inserire più immagini, devo realizzare una pagina di index dove comparirà solo il titolo e la tumbnail della prima foto, a seguito cliccando dovrò ottenere la pagina completa in cui compare titolo, testo, e le tumbnails delle foto, i modo da cliccarvi sopra e farle aprire un una fiestra di pop-up. E' possibile creare un campo per la tabella del tipo array di blob oppure è possibile creare un campo che in realta è una nuova tabella (quindi una tabella nidificata nella prima) in cui sono presenti tutti campi blob che mi servono per le foto? In oltre se devo ottenere le tumbnail cosa devo inseriree nel database la foto originaria ? oppure devo inserire già la tumbnails ? o ancora è possibile inserire la foto originaria e convertirla al momento opportuno in tumbnail ? e se così fosse dopo come faccio ad aprire la foto originaria (quella grande), forse riutilizzando le query per l'accesso ed il prelievo del dato ? vi ringrazio. P.S.: Spero di essere stato chiaro.

inviato 11 anni fa
gohan079
X 0 X

Nei database non esistono campi che fungono da array ma si ottiene lo stesso risultato impiegando 2 tabelle

Nel tuo caso le tabelle potrebbero essere:

Tabella principale:

ID_principale = int (chiave primaria autoincrement)

titolo = testo

corpo testo = testo

Tabella delle immagini:

ID_immagine = int (chiave primaria autoincrement)

ID_principale = int

thumbnail = blob

immagine = blob

Come puoi vedere, con la seconda tabella hai la possibilità di associare più immagini per un stesso ID_principale, ovvero per un unico record della tabella principale.

Avrai notato che nella tabella delle immagini ho inserito un campo "thumbnail". Questo perché ritengo che creare la miniatura solo una volta, durante la memorizzazione della pagina, possa garantire prestazioni migliori.

Per visualizzare le immagini in versione originale basta che le miniature abbiano un tag <a> che punti al relativo record della tabella delle immagini, facendo uso quindi del campo ID_immagine

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

grazie gianni, vorrei sapere però anche come realizzo praticamente l'unione, cioè le linee di codice che mi creano l'unione perhcè non ho capito bene il JOIN e non ho capito come relazionare un campo della tabella principale con la taBELLA SECONDARIA, CIOè NON SO SE SONO STATO CHIARO MA NON è CHIARO PER ME quale è il codice che crea il collegamento logico tra la prima e la seconda tabella. Poi vorrei sapere se le tumbnail mi conviene realizzarle tramite script php, tu cosa mi consigli ?

risposto 11 anni fa
gohan079
modificato 11 anni fa
X 0 X

Il collegamento logico tra le due tabelle si crea nonappena inizi ad inserire dati nelle due tabelle. La procedura dovrebbe essere questa:

1) inserisci un record nella prima tabella

2) recupera l'ID_principale automaticamente inserito da MySQL per questo record (mysql_insert_id)

3) inserisci le immagini nella seconda tabella settando l'ID_principale con il numero ottenuto

Le JOIN ti servono se con un'unica query vuoi ottenere sia i dati di un record della prima tabella che tutte le immagini associate ad esso

La query è del tipo

SELECT * FROM tabella_principale LEFT JOIN tabella_immagini
ON tabella_principale.ID_principale = tabella_immagini.ID_principale
WHERE tabella_principale.ID_principale = 1234

Ovviamente 1234 è un ID inventato che corrisponderà ad un record della prima tabella.

Ho usato un LEFT JOIN per ottenere record della prima tabella anche se non hanno immagini (record associati della seconda tabella)

Come puoi vedere quindi non è necessario fare nessuna operazione particolare sulle tabelle. Queste sono "logicamente" associate. Inotre la query con il JOIN è solo un modo sbrigativo di accedervi.

Se realizzi le thumbnail con il PHP potresti automatizzare le opzioni di inserimento dei dati nel DB

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Gianni scusami  :-[, potresti digitarmi le righe di codice che creano le due tabelle, vorrei cercare di analizzare la sintassi del codice se mi aiuti e se ne hai voglia, ho qualche problema nella comprensioe di tale processo, forse mi mancano delle info di base.

risposto 11 anni fa
gohan079
X 0 X

Scusa ma se non sai come creare le due tabelle come pensi di mettere in piedi tutto il sistema?  ???

 :dunno:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

La creazione di una tabella singola la so fare, è la creazione di due tabelle innestate che non credo o forse non mi è chiaro, fare

risposto 11 anni fa
gohan079
X 0 X

Vediamo se così va bene:

"Ovviamente i dati di connessione sono inventati"

<?php
//Parametri di connessione
$db_host = "localhost";
$db_user = "root";
$db_password = "rubber";
$db_name = "wood";
?>

questo è il file che crea le tabelle:

<?php
include("config.inc.php");
$db = mysql_connect($db_host, $db_user, $db_password);
if($db == FALSE)
die("Errore nella connessione. Verificare i parametri nel file config.inc.php");

mysql_select_db($db_name, $db)
or die ("Errore nella selezione del database. Verificare i parametri nel file config.inc.php");

$Tb_testo = "CREATE TABLE testo(id_principale INT (5) UNSIGNED not null AUTO_INCREMENT, titolo VARCHAR(255) not null,
         testo TEXT not null, image BLOB not null, PRIMARY KEY (id_principale))";
$Tb_Image = "CREATE TABLE immagini (id_immagine INT (5) UNSIGNED not null AUTO_INCREMENT, id_principale INT (5), 
         thumb BLOB not null, image BLOB not null, PRIMARY KEY (id_principale))";
         
if(mysql_query($Tb_testo, $db) AND mysql_query($Tb_Image, $db))
echo"L'installazione è stata eseguita correttamente";
else echo "Errore durante l'installazione:<br>" .mysql_error();

mysql_close($db);
?>

Ottengo come errore:

Incorrect table definition; there can be only one auto column and it must be defined as a key

Ho ottenuto solo la creazione della tabella testo

risposto 11 anni fa
gohan079
modificato 11 anni fa
X 0 X

2 considerazioni:

1) la PRIMARY KEY della seconda tabella non è id_principale ma id_immagine

2) non ha molto senso costruire le tabelle usando PHP. Poiché infatti questa è un'operazione che si svolge una volta sola non vale la pena scrivere appositamente uno script. In generale si usa phpMyAdmin o qualche altro programma.

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Ciao Gianni, ho problemi ora con l'inserimento dei dati, prima di tutto vorrei precisare che ho seguito lo schema che mi hai postato in precedenza:

Tabella principale:

ID_principale = int (chiave primaria autoincrement)

titolo = testo

corpo testo = testo

Tabella delle immagini:

ID_immagine = int (chiave primaria autoincrement)

ID_principale = int

thumbnail = blob

immagine = blob

solo che ora non so che valori inserire in alcuni punti, come : image nella tabella principale, id_principale nella tabella secondaria, vorrei anche sapere cosa devo inserire nei campi tumbnail e immagine (forse il path del file ? se si, vuol dire che nel form devo inserire due campi testo dai quali prelievo la stringa che indica il percorso ?).

<?php
include("top_foot.inc.php");
include("config.inc.php");
top();
if (trim($titolo) == "" OR trim($testo) == ""):
echo "I campi Titolo e Testo devono essere riempiti!";
else:
$titolo = addslashes(stripslashes($titolo));
$autore = addslashes(stripslashes($autore));
$mail = addslashes(stripslashes($mail));
$testo = addslashes(stripslashes($testo));
$titolo = str_replace("<", "&lt;", $titolo);
$titolo = str_replace(">", "&gt;", $titolo);
$autore = str_replace("<", "&lt;", $autore);
$autore = str_replace(">", "&gt;", $autore);
$testo = str_replace("<", "&lt;", $testo);
$testo = str_replace(">", "&gt;", $testo);
$testo = nl2br($testo);

$db = mysql_connect($db_host, $db_user, $db_password);
if ($db == FALSE)
die ("Errore nella connessione. Verificare i parametri nel file config.inc.php");
mysql_select_db($db_name, $db)
or die ("Errore nella selezione del database. Verificare i parametri nel file config.inc.php");

//Qui ho problemi con l'inserimento dei dati
$Tb_testo = "INSERT INTO testo (titolo, testo, image) VALUES ($_POST['$titolo'], $_POST['$testo'], $_POST['$image'])";
$Tb_Image = "INSERT INTO immagini ("

if (mysql_query($Tb_testo, $db) AND mysql_query($Tb_Image, &db))
echo "L'articolo è stato inserito correttamente";
else
echo "Erorre durante l'inserimento";
mysql_close($db); endif;
foot();
?>

questo è il form

<?php
include ("config.inc.php");
include ("top_foot.inc.php");

//intestazione
top();
?>
<form method=post action=save.php>

<table width="881" border="0" align="center">
  <tr>
    <td width="511" rowspan="4"><p>Titolo:
          <input type=text size=40 name=titolo>
 </p>
      <p>Testo: 
        <textarea cols=80 rows=40 name=testo></textarea>
      </p>      </td>
    <td width="354">Path Tumbnail
      <input type=password size=40 name=pass></td>
  </tr>
  <tr>
    <td>Path Immagine
      <input type=password size=40 name=pass2></td>
  </tr>
  <tr>
    <td><input name="submit" type=submit value=Invia></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td colspan="2">&nbsp;</td>
    </tr>
</table>
</form>
<?php
// chiusura pagina
foot();
?>
risposto 11 anni fa
gohan079
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda