Visualizzazione dei risultati da 1 a 2 su 2

Discussione: php e immagini

  1. #1

    php e immagini

    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">



    <input name="fileUP" type="file" id="fileUP">
    </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'] ['size'] > 0 )
    $fileName = $_FILES['fileUP']['name'];
    $tmpName = $_FILES['fileUP']['tmp_name'];
    $fileSize = $_FILES['fileUP']['size'];
    $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 = "

    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_wi dth,$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]/immagine.php?id="+id+"[/img]</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><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=\"javascriptpenImg('$id','$width','$height' )\"> [img]thumb.php?id=$id[/img] </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_pa ssword) 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=\"javascriptpenImg('$id','$width','$height' )\"> [img]thumb.php?id=$id[/img] </a></td>\n";


    grazie in anticipo per qualsiasi suggerimento.

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    241
    Io ho ripreso lo stesso esempio di PHP Professionale adattandolo alle mie esigenze e agli standard XHTML; a me funziona tutto bene, solamente non riesco a capire come mai la finestra pop-up mi segnala sempre processo in corso da terminare sebbene l'immagine viene subito caricata...

    Comunque ritornando ai tuoi problemi è il tipico caso in cui lo script non riesce a trovare le immagini perchè le cerca nel posto sbagliato!
    Beh, intanto, qui non ci va il meno:

    codice:
    copWindow.document.write("<a href='java-script:window.close();'>");
    non so se questo è un tuo errore di trascrizione, c'è uno spazio di troppo qui:

    codice:
    copWindow.document.write("[img]/immagine.php?id="+id+"[/img]</a>\n");
    Qui invece perchè hai assegnato NULL a tutte le variabili usate nell'apertura del database?
    Immagino che l'hai fatto per la privacy, comunque, in locale diventerebbe:

    codice:
    $db_host = "localhost";
    $db_user = "root";
    $db_password = "password";
    $db_name = "nome_database";
    pure qua ci sono degli errori, fai attenzione alla digitazione del codice:

    codice:
    print "<td align='center' valign='middle'> <a href=\"javascriptpenImg('$id','$width','$height' )\"> [img]thumb.php?id=$id[/img] </a></td>\n";
    N.B.: abituati ad usare i tag CODE per inserire il codice, come ho fatto io!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.