insieriamo anche un immagine...

ciao ragazzi sono di nuovo qui, perchè quando ho voglia di confrontarmi so sempre che qui trovo tanta gente che me ne da l'opportunità!

vengo subito al dunque...

nella mia pagina "news" voglio che se l'autore ne ha voglia, possa pure inserire una immagine...Dunque per fare questo ho creato uno script che mi uploadi la foto in una cartella del sito...e scrivi nel database, il nome del file.

$uploaddir = '../uploads/';
$uploadfile = fspace($_FILES['file']['name']);
$upload = $uploaddir . $uploadfile;

//Controllo l' estensione del file
(fExt($uploadfile) == 'gif') or (fExt($uploadfile) == 'jpeg') or (fExt($uploadfile) == 'png') or (fExt($uploadfile) == 'jpg');
dir($uploaddir);
move_uploaded_file($_FILES['file']['tmp_name'], $upload);
$query="INSERT INTO news(titolo, news, immagine)VALUES('$titolo','$news', '$uploadfile')";

Ora...anzi tutto volevo sapere se anche voi avreste proceduto così per creare questo genere di script( se per una migliore comprensione avete bisogno di tutto lo script ditemelo che lo posto subito).

e in secondo luogo vorrei sapere come meglio procedere per visualizzare i dati: cioè dire allo script "se $row[immagine] contiene un dato, allora inserisci l'immagine...altrimenti non inserirla!

vi posto anche questa parte di codice...per farvi capire sia cosa intendo...sia cosa ho fatto io per provarci!

while($row = mysql_fetch_array($result)){
            echo "<div id='titolo'>$row[titolo]</div>";
            echo "<div id='testo'>";
            echo "<img src='uploads/$row[immagine]' align='left'>";
            echo "$row[news]</div>";
            echo "<div id='data'>news aggiunta il ";
            echo "$row[data]</div>";
            echo "<br>";
            }

A presto!  :bye:

inviato 10 anni fa
micdech
X 0 X

(fExt($uploadfile) == 'gif') or (fExt($uploadfile) == 'jpeg') or (fExt($uploadfile) == 'png') or (fExt($uploadfile) == 'jpg');

dir($uploaddir);

move_uploaded_file($_FILES['file']['tmp_name'], $upload);

$query="INSERT INTO news(titolo, news, immagine)VALUES('$titolo','$news', '$uploadfile')";

Ora...anzi tutto volevo sapere se anche voi avreste proceduto così per creare questo genere di script( se per una migliore comprensione avete bisogno di tutto lo script ditemelo che lo posto subito).

Magari avrei messo il controllo sull'upload del file, esempio:

if(move_uploaded_file($_FILES['file']['tmp_name'], $upload))
{
 $query="INSERT INTO news(titolo, news, immagine)VALUES('$titolo','$news', '$uploadfile')";
 if(mysql_query($query) )
  echo "Record inserito";
 else
  echo "errore inserimento record nel DB";
}
else
 echo "Errore nell' upload del file";

e in secondo luogo vorrei sapere come meglio procedere per visualizzare i dati: cioè dire allo script "se $row[immagine] contiene un dato, allora inserisci l'immagine...altrimenti non inserirla!

vi posto anche questa parte di codice...per farvi capire sia cosa intendo...sia cosa ho fatto io per provarci!

while($row = mysql_fetch_array($result)){
echo "<div id='titolo'>$row[titolo]</div>";
echo "<div id='testo'>";
if(!empty($row['immagine']))
    echo "<img src='uploads/$row[immagine]' align='left'>";
echo "$row[news]</div>";
echo "<div id='data'>news aggiunta il ";
echo "$row[data]</div>";
echo "<br>";

}

ciao

Lore

risposto 10 anni fa
Lore
Lore
1
X 0 X

grande lore!

questo mi serviva!

io al posto di fare !$empty avevo scritto: if ($row[immagine] !=0) echo "<img src='$row[immagine]">...etc etc...

solo che così mi dava parse error!

non ho messo il controllo dello script perchè non è importante che ad ogni news venga caricata l'immagine..per questo ho ritenuto non mi servisse...tutto qui....

Cmq...tu pensi sia il miglior approccio quello utilizzato? o tu avresti fatto diversamente?

come al solito gentilissimo...

Ciao ciao

 :bye:

risposto 10 anni fa
micdech
X 0 X

grande lore!

questo mi serviva!

io al posto di fare !$empty avevo scritto: if ($row[immagine] !=0) echo "<img src='$row[immagine]">...etc etc...

solo che così mi dava parse error!

non ho messo il controllo dello script perchè non è importante che ad ogni news venga caricata l'immagine..per questo ho ritenuto non mi servisse...tutto qui....

Cmq...tu pensi sia il miglior approccio quello utilizzato? o tu avresti fatto diversamente?

Se con 'controllo dello script' intendi il controllo sul move_uploaded_file(), secondo me è sempre bene metterlo, perchè poni caso che l'immagine non venga caricata, senza controllo, ti farebbe comunque l'inserimento nel DB del suo riferimento, ma se andrai ad estrarla ti farà vedere la x rossa...non so se mi sono spiegato...

Per il controllo sull'immagine, non so se sia corretto fare if ($row[immagine] !=0), nel senso che non so se sia corretto il confronto con lo '0', cmq mi sembra necessario il controllo sulla presenza del record nel Db, perchè se l'immagine non dovesse esserci, ossia: $row['immagine'] = "";

verrà visualizzato:

<img src=""> ossia nessuna immagine

Poi non so,dipende dal tuo script...

ciao

Lore

risposto 10 anni fa
Lore
Lore
1
X 0 X

intendevo controllo del move_uploaded_file---- ;D

in ogni caso...!empty mi sembra più corretto...anche perchè solo così va!!! :2funny:

Un'altra cosa...se l'immagine uploadata è troppo grande...mi storpia tutta la grafica del sito!

come faccio a fare in modo che se le dimensioni in lunghezza superano i 300px, lo script mi ridimensiona l'immagine(chiaramente mantenendo la proporzione)?

risposto 10 anni fa
micdech
X 0 X

Fai una ricerca nel forum, se n'è già parlato in passato.  :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

purtroppo già ho controllato tutto il forum...ma nn ho trovato niente che mi interessi...

ora proverò a fare da me...però se qualcuno ha qualche idea...me la sueggeriscaaaaaaaaaaaa!1111

risposto 10 anni fa
micdech
X 0 X

Oppure semplicemtne nell'html: <img src='....' style='width: 300px' /> così qualsiasi immagine che superi fisicamente quella dimensione, comunque verrà ridimensionata a video a partire da 300px, ovviamente siccome quelle di dimensione inferiore a 300 pixel verrebbero ingrandite, prima fai un controllo sulla loro dimensione col php, per esempio: list($width, $height, $type, $attr) = getimagesize($immagine);

Se width supera 300 allora fai come sopra se no no, basta una condizione.

Ovviamente puoi ridimensionare l'immagine in modo che oltretutto risparmi spazio sul server, ma siccome per poter fare una cosa del genere servono le librerie grafiche, non è detto che puoi farlo, dipende tutto dal server di hosting.

Oppure vai qui: http://it2.php.net/manual/it/function.getimagesize.php e guardi cosa hanno inviato gli utenti a fondo pagina, il manuale online del php è favoloso per questo.

Altra cosa è la sicurezza, senza entrare nei limiti estremi (tipo xss e csrf) se non controlli esattamente cosa un utente ti carica su, rischi di ritrovarti tanta bella porcheria anche pericolosa.

risposto 10 anni fa
Marco Grazia
modificato 10 anni fa
X 0 X

infatti...è un problema di librerie...le ho tutte...perchè il server è il mio...e le posso caricare le GD...ma io non ne ho voglia!

nel senso che voglio che il sistema sia facilissimo...per vari motivi...senza usare alcuna libreria ne altro linguaggio al di fuori del php...

in ogni caso basti sapere che mi piacerebbe ridimensionare le immagini direttamente nell'upload...anche per occupare meno spazio sul server!

Ciao! :bye:

risposto 10 anni fa
micdech
X 0 X

Le GD sono diffusissime, non credo sia il caso di preoccuparsi troppo.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X
infatti...è un problema di librerie...le ho tutte...perchè il server è il mio...e le posso caricare le GD...ma io non ne ho voglia!

Be, se non hai voglia di farlo tu ...

risposto 10 anni fa
Marco Grazia
X 0 X

non è che non ne ho voglia...le GD sono già caricate...

il fatto è che vorrei evitare di usare estensioni del php...in modo da rendere il sistemino il più compatibile possibile...

risposto 10 anni fa
micdech
X 0 X

raga...scusatemi! ma è normale che ridimensionando le immagini perdono anche una cifra in colore?

risposto 10 anni fa
micdech
X 0 X

sostituito imagecreate con imagecreatetruecolor...

mitico...

risposto 10 anni fa
micdech
X 0 X

cercasi compagno per chiacchiera sul php disperatamente...anche sul messenger!

risposto 10 anni fa
micdech
X 0 X
cercasi compagno per chiacchiera sul php disperatamente...anche sul messenger!

 :police:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

perchè mi vuoi arrestare Gianni ?

hai ragione...è meglio parlarne sul forum...sono d'accordissimo...il fatto è che vorrei una persona da spremere al 100% per un paio d'orette(detto questo scapperanno tutti...)...purtroppo il forum è in differita...e io ho subito voglia  di risposte...

pensa che oramai leggo solo manuali e appunti...e trascuro sia i libri di studio che quelli per le letture...

risposto 10 anni fa
micdech
X 0 X

posto qui tutta una parte di codice...per uploadare un immagine...modificarla nelle dimensioni e inserire il nome della foto nel database...

<?php
function fSpace($string)
{
   return str_replace(" ", "_", $string);
};
//Funzione per ricavare l' estensione di un File
function fExt($string)
{ 
   //Controllo il file
   $trova_punto = explode(".", $string);
   $estensione = $trova_punto[count($trova_punto) - 1];
   $estensione = strtolower($estensione);
   
   // Se non ci sono estensioni
   if (isset($trova_punto[1]) == FALSE)
   {
      return '';
   }
   //Ritorno il valore dell' estensione
   return $estensione;
}
$uploaddir = '../immagini/';
$uploadfile = fspace($_FILES['file']['name']);
$upload = $uploaddir . $uploadfile;
(fExt($uploadfile) == 'gif') or (fExt($uploadfile) == 'jpeg') or (fExt($uploadfile) == 'png') or (fExt($uploadfile) == 'jpg');
dir($uploaddir);
move_uploaded_file($_FILES['file']['tmp_name'], $upload);
$nomeimage = $uploadfile;
$size = getimagesize($upload);
$width = $size[0];
$height = $size[1];
if ($width > 320){
   $new_width=320;
   $new_height=240;
    $source_path = $uploaddir;
    $destination_path = $uploaddir;
      global $source_path;
      global $destination_path;
      global $new_width;
      global $new_height;
      $destimg=imagecreatetruecolor($new_width,$new_height) or die("Problemi nelle creazioni dell'immagine");
      $srcimg=imagecreatefromjpeg($source_path.$nomeimage) or die("Problemi nell'aprire l'immagine");
      imagecopyresampled($destimg,$srcimg,0,0,0,0,$new_width,$new_height,ImageSX($srcimg),ImageSY($srcimg)) or die("Problemi");
      ImageJPEG($destimg,$destination_path.$nomeimage) or die("Problemi nel salvataggio");}elseif ($width < 320){
     $new_width=$width;
   $new_height=$height;
    $source_path = $uploaddir;
    $destination_path = $uploaddir;
      global $source_path;
      global $destination_path;
      global $new_width;
      global $new_height;
      $destimg=imagecreatetruecolor($new_width,$new_height) or die("Problemi nelle creazioni dell'immagine");
      $srcimg=imagecreatefromjpeg($source_path.$nomeimage) or die("Problemi nell'aprire l'immagine");
      imagecopyresampled($destimg,$srcimg,0,0,0,0,$new_width,$new_height,ImageSX($srcimg),ImageSY($srcimg)) or die("Problemi nel ridimensionamento");
      ImageJPEG($destimg,$destination_path.$nomeimage) or die("Problemi nel salvataggio");
     };
?>

Dunque...la prima parte come capirete sicuramente bene leva gli spazi nel nome...cerca le estensioni e uploada un file nella cartella desiderata.

La seconda parte invece controlla le immagini (solo jpeg) e controlla le dimensioni: se sono maggiori in larghezza ai 320 px ridimensiona la foto uploadata a tali dimensioni...altrimenti le lascia alle dimensioni originali...

varie domande sono d'obbligo   ;D

come vi pare il codice? na schifezza?

come fare per fare in modo che si possano uploadare solo immagini?

secondo voi è conveniente dare ampio margine di scelta nella scelta dell'estensione delle immagini...o si deve dare l'opportunità di uploadare solo jpeg?

come fare per lasciare le dimensioni dell'altezza in proporzione, senza specificare di quanto deve essere?

infine...ma non meno importante...posso evitare di uploadare il file ma creare direttamente il file?

Nel senso che vorrei evitare il passaggio dell'upload e fare direttamente l'imagecreate...è possibile?

ultima cosa...ma voi preferite l'upload in una cartella...o l'inserimento del file nel DB?

A presto!

risposto 10 anni fa
micdech
X 0 X

Alcune considerazioni:

Per trovare l'estensione di un file ci sono metodi più efficaci:

http://www.phpnews.it/forum/index.php?topic=846.msg5412#msg5412

La riga:

(fExt($uploadfile) == 'gif') or (fExt($uploadfile) == 'jpeg') or (fExt($uploadfile) == 'png') or (fExt($uploadfile) == 'jpg');

non esegue alcuna operazione. Forse volevi mettere un IF?

La riga:

dir($uploaddir);

non ha alcuno scopo nel tuo codice. Perché l'hai messa?

Tutti i global non servono, vedi qui (fine pagina) quando e come usarli:

http://www.phpnews.it/content/view/255/107/

Per ridimensionare un'immagine rispettando le proporzioni vedi la funzione "crea_anteprima" riportata nel primo script di questo messaggio:

http://www.phpnews.it/forum/index.php?topic=619.msg4148#msg4148

Dal tuo codice sembra che il ridimensionamento lo fai 2 volte. Perchè?

Se non fai l'upload allora cosa vuoi ridimensionare?

Se non hai particolari esigenze allora non conviene inserire le immagini nel DB.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

ok bene!...ora rifaccio un pò tutto il codice e vedo!

l'fext trova le estensioni...pensavo così andasse bene...cmq ora usarò i metodi suggeriti...

$uploaddir stabilisce la cartella dove mettere le immagini...non capisco perchè non è necessaria...

non faccio il ridimensionamento due volte...ho cercato di fare una condizione...e solo così mi è riuscita...

ne deduco che un'immagine non può essere creata al volo...va prima uploadata...vero?

e infine che tipo di particolari esigenze?

risposto 10 anni fa
micdech
X 0 X

E' la funzione dir a non essere necessaria. Sai a cosa serve?

Non avevo visto l'elseif (l'hai nascosto bene  :)) Quell'elseif può essere sostituito da un semplice else. Ma se l'immagine non è troppo grande allora perché esegui tutte le operazioni per ricrearla, con le dimensioni originali? Praticamente ne fai una fotocopia.

Qui trovi alcune considerazioni sul perché inserire un file nel DB:

http://www.phpnews.it/content/view/213/80/

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

ho provato a fare lo script da capo!

questo è il mio risultato!

che ne pensate?

function fSpace($string)
{
   return str_replace(" ", "_", $string);
};
$estensioni = array('jpg', 'JPG','jpeg', 'JPEG'); //,'png','PNG','gif', 'GIF'
$uploaddir = '../immagini/';
$uploadfile = fspace($_FILES['file']['name']);
$upload = $uploaddir.$uploadfile ;
$path_parts = pathinfo($uploadfile);
if (!empty($uploadfile)){
if(in_array($path_parts['extension'],$estensioni)) {
  move_uploaded_file($_FILES['file']['tmp_name'], $upload);
  $size = getimagesize($upload);
  $width = $size[0];
  if ($width > 320) {
   $destimg = imagecreatetruecolor(320, 240);
   $srcimg = imagecreatefromjpeg($upload);
   imagecopyresampled ($destimg, $srcimg,0,0,0,0,320,240, imagesx($srcimg), imagesy($srcimg));
   imagejpeg ($destimg, $upload);
   }
   echo "<center><br><br>";
   echo "immagine inserita!";
 } else {
 echo "<center><br><br>";
 echo "attenzione: questa non è un'immagine o l'estensione della stessa non è supportata!";
 die; 
 }} else {
 echo "<center><br><br>";
 echo "campo immagine vuoto!"; 
 };

manca giusto una cosa...il ridimensionamento in proporzione...sto ancora cercando di capirlo...e gli esempi sul forum...non mi sono molto chiari...va bè...cmq continuo a provare!

aspetto vostre risposte! A presto!

risposto 10 anni fa
micdech
X 0 X

rispetta i tag che apri ::)

<center> non è un tag self close stile XML ma va chiuso sempre

quindi per ogni <center> deve trovarsi un corrispettivo </center>

con il <br> invece puoi fare così : <br /> visto che è self close ( anche <img src="http://lol.lol/img.png" alt="" width="10" height="10" /> )

die

supporta parametri come se fosse una funzione ( come exit; ) quindi al posto di fare un echo e poi un die; 

potresti fare così :

die("attenzione: questa non è un'immagine o l'estensione della stessa non è supportata!");
risposto 10 anni fa
Andrea Turso
Andrea Turso
86
modificato 10 anni fa
X 0 X

bene!

allora mo rivedo un pò tutto il codice...questi sono errori di sfaticatezza...hai ragione! ::) O0

A presto!

risposto 10 anni fa
micdech
X 0 X

ancora niente...il ridimensionamento immagine in proporzione ancora non riesco a farlo...chi mi viene in soccorso?

risposto 10 anni fa
micdech
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda