Avatar billede mstorgaard Praktikant
19. januar 2006 - 07:32 Der er 22 kommentarer og
1 løsning

Simpel billedupload med eksempel og fuld url

Der skal laves en uploadfunktion til billeder. Det skal bare være et tekstfelt og en Gennemse...-knap.

Den skal kunne uploade .gif, .jpg og .png. Når man har trykket på gennemse og har uploadet billedet skal den automatisk smide hele URL'en over i mit nuværende tekstfelt plus at den skal vise en lille version af billedet. Billedet behøver ikke være en thumbnail, men bare det fulde billede med fx en bredde på 110px.

Håber der er nogen der kan hjælpe...
Avatar billede dmdisco Nybegynder
19. januar 2006 - 08:54 #1
du kan kigge lidt på disse funktioner

// image_resize()
function image_resize($src,$dest,$maxWidth,$maxHeight,$quality=100) {
  if (file_exists($src)  && isset($dest)) {
      // path info
      $destInfo  = pathInfo($dest);
     
      // image src size
      $srcSize  = getImageSize($src);
     
      // image dest size $destSize[0] = width, $destSize[1] = height
      $srcRatio  = $srcSize[0]/$srcSize[1]; // width/height ratio
      $destRatio = $maxWidth/$maxHeight;
      if ($destRatio > $srcRatio) {
          $destSize[1] = $maxHeight;
          $destSize[0] = $maxHeight*$srcRatio;
      }
      else {
          $destSize[0] = $maxWidth;
          $destSize[1] = $maxWidth/$srcRatio;
      }
     
      // path rectification
      if ($destInfo['extension'] == "gif") {
          $dest = substr_replace($dest, 'jpg', -3);
      }
     
      // true color image, with anti-aliasing
      $destImage = imageCreateTrueColor($destSize[0],$destSize[1]);
     
      // src image
      switch ($srcSize[2]) {
          case 1: //GIF
          $srcImage = imageCreateFromGif($src);
          break;
         
          case 2: //JPEG
          $srcImage = imageCreateFromJpeg($src);
          break;
         
          case 3: //PNG
          $srcImage = imageCreateFromPng($src);
          break;
         
          default:
          return false;
          break;
      }
     
      // resampling
      imageCopyResampled($destImage, $srcImage, 0, 0, 0, 0,$destSize[0],$destSize[1],$srcSize[0],$srcSize[1]);
     
      // generating image
      switch ($srcSize[2]) {
          case 1:
          case 2:
          imageJpeg($destImage,$dest,$quality);
          break;
         
          case 3:
          imagePng($destImage,$dest);
          break;
      }
      return true;
  }
  else {
      return false;
  }
} // END af image_resize()

// Upload function
function upload_pic($src, $src_t, $src_name, $dest, $overwrite='false') {
   
    $filetypes = array("image/gif", "image/pjpeg", "image/png");

    $thumbdest = "$dest/thumb/$src_name";
   
    $dest = "$dest/$src_name";

    if (in_array("$src_t", $filetypes)) {
   
        if ($overwrite == "true") {
       
            if (file_exists($dest)) {
                unlink($dest);
            }
            move_uploaded_file($src, $dest);
            image_resize($dest,$dest,600,1000,100);
           
            if (file_exists($thumbdest)) {
                unlink($thumbdest);
            }
            copy($dest, $thumbdest);
            image_resize($thumbdest,$thumbdest,100,100,100);
            if ($src_t == "image/gif") {
                unlink($thumbdest);
            }
           
            return true;
           
        } else {
            if (!file_exists($dest) || !file_exists($thumbdest)) {
           
                move_uploaded_file($src, $dest);
                image_resize($dest,$dest,600,1000,100);
               
                copy($dest, $thumbdest);
                image_resize($thumbdest,$thumbdest,100,100,100);
               
                return true;
               
            } else {
                die("Filen eksistere allerede omdøb den venligst eller vælg overskriv <b>\"".$src_name."\"</b><br><a href=\"java script:history.back(-1)\">Tilbage</a>");
            }
           
        }
    } else {
        return false;
        die("Filen er ikke et gyldigt billedeformat <b>\"".$src_name."\"</b>");
    }
   
} // END af upload_pic()

// upload_pic($pic, $pic_type, $pic_name, "images/new", "true")
Avatar billede jakobdo Ekspert
19. januar 2006 - 09:47 #2
Du kunne også lave upload til en database i stil med dette:

<?php
//http://www.eksperten.dk/spm/680819

require("./connect.php");

function resize( $filename, $newfilename, $maxw, $maxh )
{
    $result = false;
    $srcim = imagecreatefromjpeg( $filename );
    $ow = imagesx( $srcim );
    $oh = imagesy( $srcim );
    $wscale = $maxw / $ow;
    $hscale = $maxh / $oh;
    $scale = ( $hscale < $wscale ? $hscale : $wscale );
    $nw = round( $ow * $scale, 0 );
    $nh = round( $oh * $scale, 0 );
    $dstim = imagecreatetruecolor( $nw, $nh );
    imagecopyresampled( $dstim, $srcim, 0, 0, 0, 0, $nw, $nh, $ow, $oh );
    $result = imagejpeg( $dstim, $newfilename, 85 );
    imagedestroy( $dstim );
    imagedestroy( $srcim );
    return $result;
}

$allowPics = array("jpg","jpeg","jpe","gif","png");
$errmsg = "";
$imgID = 0;

if(isset($_POST['uppic']))
{
    if($_FILES['imagefile']['size'] > 1024000)
    {
        $errmsg = "Too large!";
    }
    else
    {
        $extension = strtolower(end(explode(".",$_FILES['imagefile']['name'])));
        if(!in_array($extension,$allowPics))
        {
            $errmsg = "Wrong filetype!";
        }
        else
        {
            move_uploaded_file($_FILES['imagefile']['tmp_name'],"latest.img");
            $instr  = fopen("latest.img","rb");
            $image  = addslashes(fread($instr,filesize("latest.img")));
            fclose($instr);
           
            resize("latest.img","latest.img",110,110);
            $instr  = fopen("latest.img","rb");
            $resized = addslashes(fread($instr,filesize("latest.img")));
            fclose($instr);
           
            mysql_query ("INSERT INTO tbl_680819 (extension,smallimg,largeimg,datotid) VALUES ('".$extension."','".$resized."','".$image."',now())") or die(mysql_error());
            $imgID = mysql_insert_id();
        }
    }
}

?>

<html>
<head>
<title>Upload an image to a database</title>
<?php
if(!empty($errmsg))
{
    echo "<h3>Error: " . $errmsg . "</h3>";
}
if($imgID > 0)
{
    echo "<a href=\"680819-image.php?id=".$imgID."\"><img src=\"680819-image.php?id=".$imgID."&type=1\"><a/><br>";
}
?>
<h2>Please upload a new picture</h2>
<form enctype="multipart/form-data" method="post">
Please choose an image to upload: <input type="file" name="imagefile"><br>
then: <input type="submit" name="uppic" value="Upload"></form><br>
</body>
</html>
Avatar billede jakobdo Ekspert
19. januar 2006 - 12:45 #3
Har et fuldt eksempel her: http://www.codebreaker.dk/exp/680819.php
Avatar billede mstorgaard Praktikant
19. januar 2006 - 15:42 #4
@jakobdo

Hvordan gør jeg så sådan at den også viser det fulde link til billedet i en input jeg har i forvejen?
Avatar billede jakobdo Ekspert
19. januar 2006 - 16:18 #5
Den var straks værre...
Det findes faktisk ikke i det jeg har lavet der!
Og dog, så skulle det være i stil med:
http://www.codebreaker.dk/exp/680819-image.php?id=3
Avatar billede jakobdo Ekspert
19. januar 2006 - 16:19 #6
Hvorfor vil du have linket i et input felt?
Avatar billede mstorgaard Praktikant
19. januar 2006 - 17:52 #7
Fordi jeg gerne vil have det sat sammen med et nuværende admin panel jeg har :)
Avatar billede jakobdo Ekspert
19. januar 2006 - 18:28 #8
Skal det være et helt almindelig <input type="text"> felt hvor linket skal stå i efterfølgende?
Avatar billede mstorgaard Praktikant
19. januar 2006 - 20:16 #9
Ja...
Avatar billede jakobdo Ekspert
19. januar 2006 - 20:50 #10
Avatar billede mstorgaard Praktikant
19. januar 2006 - 21:58 #11
Det ser sgu godt nok ud :)

Ligger du så lige hele koden?
Avatar billede jakobdo Ekspert
20. januar 2006 - 08:30 #12
//680819-action.php
<?php
session_start();
if($_SESSION['image'] == $_GET['id'])
{
    require("./connect.php");
    $imgID  = mysql_real_escape_string($_GET['id']);
    $action = mysql_real_escape_string($_GET['a']);
    switch($action)
    {
        case 0:
            //DELETE
            mysql_query("DELETE FROM tbl_680819 WHERE id = ".$imgID." LIMIT 1");
        case 1:
            //KEEP
            mysql_query("UPDATE tbl_680819 SET status = 1 WHERE id = ".$imgID." LIMIT 1");
    }
}
$_SESSION['url']  = true;

header("Location: " . $_SERVER['HTTP_REFERER']);
exit();
?>

//680819-image.php
<?php

require_once("./connect.php");

$imgID = mysql_real_escape_string($_GET['id']);

$type = "";
switch($_GET['type'])
{
    case 1:
        $type = "small";
        break;
    default:
        $type = "large";
}

$query = mysql_query("SELECT ".$type."img FROM tbl_680819 WHERE id = '".$imgID."' LIMIT 1") or die (mysql_error());

if(mysql_num_rows($query)>0)
{
    $row = mysql_fetch_assoc($query);
    header("Content-type: image/jpeg");
    print $row[$type.'img'];
    exit ();
}

?>

//680819.php
<?php
//http://www.eksperten.dk/spm/680819
session_start();

require("./connect.php");

//Sletter alle pics som ikke er godkendt...
mysql_query("DELETE FROM tbl_680819 WHERE status = 0 AND datotid < ADDDATE(INTERVAL -1 HOUR)");

function resize( $filename, $newfilename, $maxw, $maxh, $ext )
{
    $result = false;
    switch($ext)
    {
        case "jpg":
        case "jpeg":
        case "jpe":
            $srcim = imagecreatefromjpeg( $filename );
            break;
       
        case "gif":
            $srcim = imagecreatefromgif( $filename );
            break;
       
        case "png":
            $srcim = imagecreatefrompng( $filename );
            break;
       
        default:
            return false;
    }
    $ow = imagesx( $srcim );
    $oh = imagesy( $srcim );
    $wscale = $maxw / $ow;
    $hscale = $maxh / $oh;
    $scale = ( $hscale < $wscale ? $hscale : $wscale );
    $nw = round( $ow * $scale, 0 );
    $nh = round( $oh * $scale, 0 );
    $dstim = imagecreatetruecolor( $nw, $nh );
    imagecopyresampled( $dstim, $srcim, 0, 0, 0, 0, $nw, $nh, $ow, $oh );
   
    switch($ext)
    {
        case "jpg":
        case "jpeg":
        case "jpe":
            $result = imagejpeg( $dstim, $newfilename, 85 );
            break;
       
        case "gif":
            $result = imagegif( $dstim, $newfilename );
            break;
       
        case "png":
            $result = imagepng( $dstim, $newfilename );
            break;
       
        default:
            return false;
    }
   
    imagedestroy( $dstim );
    imagedestroy( $srcim );
    return $result;
}

$allowPics = array("jpg","jpeg","jpe","gif","png");
$errmsg = "";
$imgID = 0;

if(isset($_POST['uppic']))
{
    if($_FILES['imagefile']['size'] > 1024000)
    {
        $errmsg = "Too large!";
    }
    else
    {
        $extension = strtolower(end(explode(".",$_FILES['imagefile']['name'])));
        if(!in_array($extension,$allowPics))
        {
            $errmsg = "Wrong filetype!";
        }
        else
        {
            move_uploaded_file($_FILES['imagefile']['tmp_name'],"latest.img");
            $image  = mysql_real_escape_string(file_get_contents("latest.img"));

            resize("latest.img","latest.img",110,110,$extension);
            $resized  = mysql_real_escape_string(file_get_contents("latest.img"));
           
            mysql_query ("INSERT INTO tbl_680819 (extension,smallimg,largeimg,datotid) VALUES ('".$extension."','".$resized."','".$image."',now())") or die(mysql_error());
            $imgID = mysql_insert_id();
            $_SESSION['image'] = $imgID;
        }
    }
}

?>

<html>
<head>
<title>Upload an image to a database</title>
<?php
if(!empty($errmsg))
{
    echo "<h3>Error: " . $errmsg . "</h3>";
}
if($imgID > 0)
{
    echo "<a href=\"680819-image.php?id=".$imgID."\"><img src=\"680819-image.php?id=".$imgID."&type=1\"><a/><br>";
    echo "<a href=\"680819-action.php?id=".$imgID."&a=1\">Accept</a> - <a href=\"680819-action.php?id=".$imgID."&a=0\">Delete</a><br>";
}
if($_SESSION['url'] === true)
{
    echo "<input type=\"text\" size=\"50\" value=\"http://www.codebreaker.dk/exp/680819-image.php?id=".$_SESSION['image']."\">\n";
    $_SESSION['url'] = false;
    $_SESSION['image'] = 0;
}
?>
<h2>Please upload a new picture</h2>
<form enctype="multipart/form-data" method="post">
Please choose an image to upload: <input type="file" name="imagefile"><br>
then: <input type="submit" name="uppic" value="Upload"></form><br>
</body>
</html>
Avatar billede mstorgaard Praktikant
20. januar 2006 - 11:52 #13
Den her:
require("./connect.php");
Hvor er den?
Avatar billede jakobdo Ekspert
20. januar 2006 - 12:47 #14
<?php

$host = "host";
$user = "user";
$pass = "pass";
$db  = "db";

$link = mysql_connect($host,$user,$pass);
if (!$link)
{
    die("Not connected : " . mysql_error());
}

$db_selected = mysql_select_db($db, $link);
if (!$db_selected)
{
    die("Not selected :  " . $db . " : " . mysql_error());
}
?>
Avatar billede mstorgaard Praktikant
20. januar 2006 - 14:37 #15
Og skal jeg selv oprette tabeller i min database?
Avatar billede jakobdo Ekspert
20. januar 2006 - 14:46 #16
Jeg brugte denne:

CREATE TABLE tbl_680819 (
  id mediumint(9) NOT NULL auto_increment,
  extension varchar(4) NOT NULL default '',
  smallimg mediumblob NOT NULL,
  largeimg longblob NOT NULL,
  `status` tinyint(4) NOT NULL default '0',
  datotid datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (id)
) ENGINE=MyISAM;
Avatar billede mstorgaard Praktikant
20. januar 2006 - 18:26 #17
Kan man ikke klare det uden MySQL?
Avatar billede mstorgaard Praktikant
20. januar 2006 - 22:50 #18
Altså der er jo faktisk ikke brug for så stor en kode, da jeg faktisk bare skal have den til at vise URL'en på billedet den har uploadet. :)
Avatar billede jakobdo Ekspert
21. januar 2006 - 00:13 #19
Du har ret!
Men koden kan godt mindskes!
Der er bare godkend/afvis kode med!
Avatar billede mstorgaard Praktikant
21. januar 2006 - 00:28 #20
Kan du ikke korte koden ned og gøre det uden MySQL?
Avatar billede jakobdo Ekspert
21. januar 2006 - 16:06 #21
Måske sådan her:

<?php
//http://www.eksperten.dk/spm/680819
session_start();

$upload = "./upload/";
$allowPics = array("jpg","jpeg","jpe","gif","png");
$errmsg = "";

if(isset($_POST['uppic']))
{
    if($_FILES['imagefile']['size'] > 1024000)
    {
        $errmsg = "Too large!";
    }
    else
    {
        $extension = strtolower(end(explode(".",$_FILES['imagefile']['name'])));
        if(!in_array($extension,$allowPics))
        {
            $errmsg = "Wrong filetype!";
        }
        else
        {
            if(move_uploaded_file($_FILES['imagefile']['tmp_name'],$upload . $_FILES['imagefile']['name']))
            {
                $_SESSION['image'] = $_FILES['imagefile']['name'];
            }
            else
            {
                $errmsg = "Upload Failed!";
            }
    }
    }
}

?>

<html>
<head>
<title>Upload an image</title>
<h2>Please upload a new picture</h2>
<?php
if(!empty($errmsg))
{
    echo "<h4>" . $errmsg . "</h4>\n";
}
if(isset($_SESSION['image']))
{
    echo "<input type=\"text\" size=\"50\" value=\"http://www.codebreaker.dk/exp/upload/".$_SESSION['image']."\"><br>\n";
    $_SESSION = array();
    session_destroy();
}
?>
<form enctype="multipart/form-data" method="post">
Please choose an image to upload: <input type="file" name="imagefile"><br>
then: <input type="submit" name="uppic" value="Upload"></form><br>
</body>
</html>
Avatar billede mstorgaard Praktikant
21. januar 2006 - 16:25 #22
Yes, det virker sgu :)

Tak for det
Avatar billede jakobdo Ekspert
21. januar 2006 - 17:53 #23
Men du mangler jo lidt preview funktionen der?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester