Insert di immagini e array in un database

mediasteno

Utente Attivo
25 Gen 2010
120
0
0
Ho realizzato uno script che mi permette di inserire in un database i dati di strutture ricettive recuperate da un form. In allegato l'intero script. In questo script ho alcuni problemi:
1. riguarda le immagini.
La parte di codice è:
if(!is_uploaded_file($img))
{echo "Non &egrave; stata inserita nessuna immagine<br />";}
else { if($size > $max_size) {echo "Il file &egrave; troppo grande";}
else { list($width, $height, $type, $attr) = getimagesize($img); //recupero le dimensioni dell'immagine originale
$thumb = imagecreatetruecolor(120, 90) or die("Impossibile creare la miniatura"); //creo la versione 120x90 dell'immagine
$source = @imagecreatefromjpeg ($img) or die ("L'immagine deve essere in jpeg ".mysql_error());
imagecopyresized($thumb, $source, 0, 0, 0, 0, 120, 90, $width, $height) or die("Impossibile ridimensionare l'immagine");
$img_min = imagejpeg($thumb, $img, 75);
}
}

Recupero l'immagine allegata dall'utente. controllo se è stato effettuato l'upload, se non è stata allegata l'immagine ho il messaggio: "Non è stata inserita nessuna immagine" e fin qui tutto ok. Il problema nasce quando l'immagine c'è ma è di grosse dimensioni. In tal caso voglio che verifichi che l'immagine è più grande e mi stampa il messaggio "Il file è troppo grande". Ma non lo fa, semplicemente mi dà il messaggio "Non è stata inserita nessuna immagine" e a questo punto credo che si blocca perchè non mi inserisce la struttura nel database.

2. Il secondo problema riguarda l'ultima parte del codice. Dopo che ho inserito la struttura ricettiva nella tabella del database delle strutture ho necessità di recuperare l'id dell'ultima struttura inserita, recuperare le categorie selezionate nel form tramite checkbox ed inserire questi valori, tramite INSERT, nella tabella categorie_strutture. (devono essere inserite tante righe quante sono le categorie selezionate)
Da tutorial cercati in rete sono riuscita a costruire la seguente parte del codice:
$sql_strcat = "INSERT INTO categorie_strutture (id_strutture, categoria) VALUES ";

foreach ($categoria as $value) {
$sql_strcat .= "('$id_struttura', '$value') ,";
}

if (strlen($sql_strcat)>0) { // E' necessario eliminare l'ultima virgola inserita nel FOREACH
$sql_strcat = substr($sql_strcat , 0, strlen($sql_strcat )-1);
}

ma non ottengo alcun risultato, ossia non sono inserite le categorie con l'id nel database.

Sono alle prime armi con il php posso anche aver fatto degli errori banali.:D
Spero che qualcuno mi illumini :book:
 
Ultima modifica:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao,
intanto per l'if.
prova con l'elseif:

PHP:
if(!is_uploaded_file($img)){
	echo "Non &egrave; stata inserita nessuna immagine<br />";
}elseif($size > $max_size){echo "Il file &egrave; troppo grande";
}else{
	list($width, $height, $type, $attr) = getimagesize($img); //recupero le dimensioni dell'immagine originale
	$thumb = imagecreatetruecolor(120, 90) or die("Impossibile creare la miniatura"); //creo la versione 120x90 dell'immagine
	$source = @imagecreatefromjpeg ($img) or die ("L'immagine deve essere in jpeg ".mysql_error());
	imagecopyresized($thumb, $source, 0, 0, 0, 0, 120, 90, $width, $height) or die("Impossibile ridimensionare l'immagine");
	$img_min = imagejpeg($thumb, $img, 75);
}
per il 2° problema guardo e poi posto, però dovresti specificare meglio
 

mediasteno

Utente Attivo
25 Gen 2010
120
0
0
Ho inserito in allegato l'intero script (prima avevo dimenticato di farlo). Per quanto riguarda la prima parte del problema ho inserito elseif al posto di if ma non mi risolve la cosa. L'unica differenza è che questa volta la struttura la inserisce nel database ma senza immagine. Ho pensato di impostare che anche quando l'immagine è grande, la ridimensiona e poi la inserisce nel database. E ho modificato la parte di script in questo modo:
if(is_uploaded_file($img)) {list($width, $height, $type, $attr) = getimagesize($img); //recupero le dimensioni dell'immagine originale
$thumb = imagecreatetruecolor(120, 90) or die("Impossibile creare la miniatura"); //creo la versione 120x90 dell'immagine
$source = @imagecreatefromjpeg ($img) or die ("L'immagine deve essere in jpeg ".mysql_error());
imagecopyresized($thumb, $source, 0, 0, 0, 0, 120, 90, $width, $height) or die("Impossibile ridimensionare l'immagine");
$img_min = imagejpeg($thumb, $img, 75);
}else {echo "Non &egrave; stata inserita nessuna immagine<br />";}

ma anche in questo caso quando l'immagine è grande non mi inserisce l'immagine.

Per quanto riguarda il secondo problema. C'è un modulo che l'utente deve compilare per inserire la struttura e per quanto riguarda le categorie ha delle checkbox da selezionare

<label for="categoria">scegli la categoria di appartenenza</label><br />
albergo <input type="checkbox" name="categoria[]" value="albergo" />
agriturismo <input type="checkbox" name="categoria[]" value="agriturismo" />
bed &amp; breakfast <input type="checkbox" name="categoria[]" value="bedbreakfast" />
ristorante <input type="checkbox" name="categoria[]" value="ristorante" />
trattoria <input type="checkbox" name="categoria[]" value="trattoria" />
pizzeria <input type="checkbox" name="categoria[]" value="pizzeria" />
pub <input type="checkbox" name="categoria[]" value="pub" />
discoteca <input type="checkbox" name="categoria[]" value="discoteca" />
campeggio <input type="checkbox" name="categoria[]" value="campeggio" />
villaggio <input type="checkbox" name="categoria[]" value="villaggio" />
casa vacanza <input type="checkbox" name="categoria[]" value="casavacanza" />

Le categorie vanno inserite in una tabella diversa legata all'id della struttura. Per fare ciò ho bisogno di recuperare l'id della struttura inserita, che recupero tramite
$id_struttura=mysql_insert_id();
e devo recuperare le varie categorie selezionate di modo tale che inserisco nella tabella categorie_strutture tanti record che abbiano l'id della ultima struttura inserita associate alle categorie selezionate, esempio:
001 albergo
001 ristorante
001 pizzeria
Il mio problema è come faccio a creare questi record?
 

Allegati

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it

mediasteno

Utente Attivo
25 Gen 2010
120
0
0
Per quanto riguarda le foto, ho trovato dove era l'inghippo. Era nel form avevo inserito
<input type="hidden" name="MAX_FILE_SIZE" value="300000" />
probabilmente mi limitava la grandezza dell'immagine. Tolto questo ho quello che desideravo. Il problema ora sta nell'estrarre l'immagine dal database. Ora do un'occhiata in giro e cerco di risolvermi la questione. Vedo anche i link da te segnalati. Grazie
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
dimmi se ho capito bene
tu vuoi fare una tabella categoria_strutture in cui (per es) l'albergo Pinco ecc.. con id_strutture = 727
ha selezionato: albergo ristorante e pizzeria
risulti
nel campo id_strutture 727
e nel campo categora albergo ristorante pizzeria (a dopo il separatore)

è giusto?

p.s.
inserisci le immagini nel db con un campo blob?
se sono tante (e grandi) è meglio inserire le immagini in una cartella e nel db mettere il nome
 

mediasteno

Utente Attivo
25 Gen 2010
120
0
0
Non esattamente io pensavo a crearmi tre record
id_struttura categoria
1 727 albergo
2 727 pizzeria
3 727 ristorante

dato che successivamente devo realizzare delle pagine che permettano di visualizzare solo tutti gli alberghi, solo tutte le pizzerie, solo tutti i ristoranti.
Comunque è possibile anche la tua soluzione, successivamente posso fare una ricerca o usando %% o con una ricerca fulltext. Un problema alla volta.

Per le immagini per ora, seguendo uno degli articoli indicati, mi sto creando una tabella a parte per le immagini, e le collego tramite l'id alla struttura. Per ora seguo questa via, se ho problemi vedo la soluzione alternativa.
 
Ultima modifica:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
se vuoi crerti tre record devi fare tre insert e quindi correggere lo script in questa maniera

PHP:
//........
foreach ($categoria as $value) {
//e metteri anche in sovrappiù questo controll
//può non servire, ma non si sa mai
	if($value != ""){
	 	$sql_strcat = "INSERT INTO categorie_strutture (id_strutture, categoria) VALUES ('$id_struttura', '$value') ";
	 	mysql_query($sql_strcat);
	 }
}
//......
in qusto modo ottieni 3 record
1 727 albergo
2 727 pizzeria
3 727 ristorante
c'è solo un problema, se l'utente rientra e sbaglia puo trovarti
1 727 albergo
2 727 pizzeria
3 727 ristorante
...........
10 727 ristorante
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao sono sempre io
rispetto a quel problema che ti avevo accennato un metodo per risolverlo potrebbe essere questo

PHP:
//........ 
foreach ($categoria as $value) { 
//e metteri anche in sovrappiù questo controll 
//può non servire, ma non si sa mai 
    if($value != ""){
		$cerca=mysql_query("SELECT * FROM categorie_strutture WHERE id_strutture='$id_struttura' AND categoria='$value'");
		if(mysql_num_rows($cerca)==0){//guardo se esiste o no, se 0 non esiste
        	$sql_strcat = "INSERT INTO categorie_strutture (id_strutture, categoria) VALUES ('$id_struttura', '$value') "; 
        	mysql_query($sql_strcat);
		}//fine if esiste
     } //fine if non vuoto
}//fine foreach
//......
in questo modo non ti inserisce un doppione