• User Newbie

    immagini in php

    Dopo aver creato una tabella con la seguente query:

    create table file_upload (id int(11) UNSIGNED NOT NULL auto_increment, bin_data blob, filename varchar(150) default NULL
    , filesize varchar(50) default NULL, filetype varchar(50) default NULL, width int(4) default NULL,
    height int(4) default NULL , thumb mediumblob NOT NULL, PRIMARY KEY (id)) TYPE=MyISAM;

    Immetto in essa le immagini e le relative informazioni richieste dai campi con i seguenti due script:

    upload.htm

    <html>
    <head>
    <title>PHP Professionale</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>
    <body>
    <form name="formUpload" enctype="multipart/form-data" method="post" action="upload02.php">
    <p>
    <input name="fileUP" type="file" id="fileUP">
    </p>
    <p>
    <input type="submit" name="Submit" value="Invia">
    </p>
    </form>
    </body>
    </html>

    il quale una volta immesso l'indirizzo dell' immagine e cliccato sul pulsante invia mi mostra in una nuova pagina chiamata upload2.php l'anteprima dell'immagine e carica i dati sul DB :

    upload02.php :

    <?php
    // se riceviamo i dati dal form
    if ($_SERVER['REQUEST_METHOD'] == 'POST' && $_FILES['fileUP'] > 0 )
    $fileName = $_FILES['fileUP']['name'];
    $tmpName = $_FILES['fileUP']['tmp_name'];
    $fileSize = $_FILES['fileUP'];
    $fileMimeSize = $_FILES['fileUP']['type'];
    // Ricaviamo le informazioni sull'immagine
    list($width,$height,$type,$attr) = getimagesize( $_FILES['fileUP']['tmp_name']);
    // controlliamo che il lato maggiore dell'immagine non superi i 640 pixel
    if(($width > 640 ) || ($height > 640))
    {$msg = "<p>Immagine di dimensione superiori al consentito&lt</p>";}
    // in base al tipo di immagine creiamo un tipo temporanea del tipo corretto
    switch ($type){
    case 1: // gif
    $img_in=imagecreatefromgif($tmpName) or die ("impossibile creare l'immagine");
    if(!isset($extension))
    {$extension = "jpg";}
    break;
    case 2: // jpg
    $img_in=imagecreatefromjpeg($tmpName) or die ("impossibile creare l'immagine");
    if(!isset($extension))
    {$extension = "jpg";}
    break;
    case 3: // png
    $img_in=imagecreatefrompng($tmpName) or die ("impossibile creare l'immagine");
    if(!isset($extension))
    {$extension = "png";}
    break;
    default:
    die("impossibile creare l'immagine");
    }
    // Calcoliamo la percentuale di ridimensionamento in base alle dimensioni finali desederate
    $thumb_max_width = 100;
    $thumb_max_height = 100;
    $percentuale = ($width > $height) ? $thumb_max_width / $width: $thumb_max_height / $height;
    $th_width = $width * $percentuale;
    $th_height = $height * $percentuale;
    $img_new = imagecreatetruecolor($th_width,$th_height);
    imagecopyresampled($img_new,$img_in,0,0,0,0,$th_width,$th_height,$width,$height);
    if($fileSize > 64000) {
    die ("dimensione in KB dell'immagine superiore al consentito.");
    }
    // prepariamo i dati per l'inserimento in MYSQL
    ob_start();
    // creiamo il thumbnail in formato in jpeg
    imagejpeg($img_new);
    $thumbTemp = ob_get_contents();
    $thumbnail = addslashes($thumbTemp);
    ob_end_clean();
    $immagine = addslashes(fread(fopen($tmpName, "r"), $fileSize));
    // apriamo la connessione al database
    $db_host ="";
    $db_user = "";
    $db_name = "";
    $db_password = "";
    $connection = mysql_connect($db_host,$db_user,$db_password) or die ("Impossibile connettersi al server MySQL.\n");
    mysql_select_db($db_name,$connection) or die ("Impossibile aprire il database.\n");
    // inseriamo i dati nella tabella
    $sql = "INSERT INTO file_upload (bin_data, filename , filesize , filetype, width , height , thumb) VALUES ('$immagine' , '$fileName' , '$fileSize' , '$extension' , $width , $height ,'$thumbnail')";

    $sql_result = mysql_query($sql,$connection) or die (mysql_error());
    $id = mysql_insert_id();
    // chiudiamo la commessione
    mysql_close($connection);

    // a seconda del tipo di immagine inviamo al browser l'header corretto
    switch($extension) {
    case "gif":
    header("content-type:image/gif");
    imagejpeg($img_new);
    exit;
    case "jpg":
    header("content_type:image/jpeg");
    imagejpeg($img_new);
    exit;
    case "png":
    header("content_type:image/png");
    imagepng($img_new);
    exit;
    default:
    die ("impossibile visualizzare l'immagine");
    }

    ?>

    fino a qui tutto bene, i dolori incominciano ora, perchè quando clicco sul file visualizza.php mi compare una tabellina di sfondo grigio chiaro che dovrebbe mostrarmi le immagini in miniatura e una volta cliccato sulle immagini in miniatura dovrebbero apparire le immagini in una finestra di grandezza preimpostate, ma invece mi compare solo la tabellina con al posto delle immagini delle x e quando clicco su di esse si apre una finestra nera di dimensioni preimpostate ma con al posto della immagine grande una x nell'angolo superiore sinistro:

    visualizza.php:

    <html>
    <head>
    <title></title>
    <script language="JavaScript">
    /* funzione javascript per aprire le immagini in una nuova finestra di dimensione prefissata */
    function openImg(id,imgW,imgH) {

    var winWidth = eval(imgW) + 20;
    var winHeight = eval(imgH) + 20;
    var features = "width=" + winWidth + ",height=" + winHeight+"";
    copWindow = window.open("","PHP",features);
    copWindow.document.write("<html>\n<head><title>PHP professionale </title></head>\n");
    copWindow.document.write("<body bgcolor='#000000'>\n");
    copWindow.document.write("<a href='javascript:window.close();'>");
    copWindow.document.write("<img src='/immagine.php?id="+id+"'width='"+imgW+"'height='"+imgH+"' border='0' title='clicca per chiudere'></a>\n");
    copWindow.document.write("</body>\n</html>");
    }
    </script>
    </head>
    <body>
    <?php
    // connessione al database
    $db_host = "";
    $db_user = "";
    $db_password = "";
    $db_name = "";
    $connection = mysql_connect($db_host,$db_user,$db_password) or die ("Impossibile connettersi al server Mysql.\n");
    mysql_select_db($db_name,$connection) or die ("Impossibile aprire il database.\n");
    $sql = "SELECT id,filename,filetype,width,height FROM file_upload ORDER BY id";
    $sql_result = mysql_query($sql,$connection) or die (mysql_error());
    $tot = mysql_num_rows($sql_result);
    print "<p> </p><table border='0' align='center' cellpadding='5' cellspacing='1' bgcolor='#CCCCCC'>\n";
    $i=0;
    while($ValoriRiga=mysql_fetch_array($sql_result)) {
    $id=$ValoriRiga["id"];
    $filename=$ValoriRiga["filename"];
    $width=$ValoriRiga["width"];
    $height=$ValoriRiga["height"];

    if($i==0 || $i%4 ==0)
    {
    echo "</tr valign="top">\n";
    }

    print "<td align='center' valign='middle'> <a href="javascript:openImg('$id','$width','$height')"> <img src='thumb.php?id=$id' title='clicca per ingrancire' border='0'> </a></td>\n";

    if($i > 0 && $i % 4 == 3){
    echo "</tr>\n";
    }

    $i++;
    }
    for($j=0 ; $j < $tot % 4; $j++){
    echo " <td> </td>\n";
    }

    if($tot-4 >0 ){
    echo "</tr>\n";
    }

    print "</table>";

    mysql_free_result($sql_result);
    mysql_close($connection);
    ?>

    i seguenti file thumb.php e immagine.php servono a visualizza per visualizzare prima le anteprime nella tabella (thumb.php) e poi l'immagine nella finestra di dimensioni preimpostate (immagine.php)

    thumb.php:

    <?php
    $db_host ="";
    $db_user ="";
    $db_password ="";
    $db_name ="";
    $connection = mysql_connect($db_host,$db_user,$db_password) or die ("Impossibile connettersi al server Mysql.\n");
    mysql_select_db($db_name,$connection) or die ("Impossibile aprire il database.\n");
    // dopo essersi connessi al database, recupera i dati del thumbnail dell'immagine identificata dall'id passato come parametro nell'URL
    $sql="SELECT thumb FROM file_upload WHERE id=".$_GET['id']."";
    $result=mysql_query($sql) or die ("Error " . mysql_errno() . " : " . mysql_error());
    mysql_close($connection);
    $riga=mysql_fetch_row($result);
    // il thumbnail è salvato in formato JPEG , quindi impostiamo il content/type appropriato nell'header della risposta HTTP
    header("Content-type:image/jpeg");
    print $riga[0];
    exit;
    ?>

    immagine.php:

    <?php
    $db_host = "";
    $db_user = "";
    $db_password = "";
    $db_name = "";
    $connection=mysql_connect($db_host,$db_user,$db_password) or die ("Impossibile connettersi al server Mysql.\n");
    mysql_select_db($db_name,$connection) or die ("Impossibile aprire il database.\n");
    // dopo essersi connessi al database, recupera i dati del thumbnail dell'immagine identificata dall'id passato come parametro nell'URL
    $sql="SELECT bin_data , filename, filetype FROM file_upload WHERE id=". $_GET['id'] . "";
    $result=mysql_query($sql) or die ("Error " . mysql_errno() . " : " . mysql_error());
    mysql_close($connection);
    $riga=mysql_fetch_row($result);
    // a seconda del tipo di immagine impostiamo il content type

    switch ($riga[2]) {
    case "gif":
    header("Content-type:image/gif");
    // con questa istruzione impostiamo il nome del file
    header("Content-Disposition: inline; filename=$riga[1];");
    print $riga[0];
    exit;
    case "jpg":
    header("Content-type:image/jpeg");
    header("Content-Disposition: inline; filename=$riga[1];");
    print $riga[0];
    exit;
    case "png":
    header("Content-type:image/png");
    header("Content-Disposition: inline; filename=$riga[1];");
    print $riga[0];
    exit;
    default:
    die ("Impossibile visualizzare l'immagine");
    }
    ?>

    c'e qualcuno che puo aiutarmi a visualizzare queste benedette immagini , sono giorni che cerco una soluzione , credo che l'errore sia in questa riga di codice del file Visualizza.php:

    print "<td align='center' valign='middle'> <a href="javascript:openImg('$id','$width','$height')"> <img src='thumb.php?id=$id' title='clicca per ingrancire' border='0'> </a></td>\n";

    grazie in anticipo per qualsiasi suggerimento.


  • Super User

    Controlla nelle proprietò dell'immagine l'indirizzo url di questa e postalo,indicando l'indirizzo come dovrebbe essere se corretto.