Avatar billede clausberg Nybegynder
19. juni 2006 - 21:19 Der er 19 kommentarer og
1 løsning

Vis billede fra sql database

Jeg har et script der uploader billeder til et bibliotek på min server. Jeg er på udkig efter en måde at udvide det script på, således at:
1) uploade en tekst der hører sammen med billedet
2) vise billede og den tekst der hører til netop det billede.

Jeg smider scriptet her:
<?php
$konfiguration["max_stoerrelse"] = "30";

list($major, $minor, $rev) = explode(".", phpversion());
if($major < 4) {
  die("Jeg kan kun arbejde med PHP 4.0.0 eller derover");
}

if($minor < 1) {
  $_FILES = $HTTP_POST_FILES;
  $_POST = $HTTP_POST_VARS;
  $_SERVER = $HTTP_SERVER_VARS;
}

if($_FILES["upfil"]["size"] > 0) {

  $fra = $_FILES["upfil"]["tmp_name"];
  $til = $konfiguration["upload_bibliotek"] . "/" . $_FILES["upfil"]["name"];

  $fil_stoerrelse = filesize($fra)/1024;
  if($fil_stoerrelse > $konfiguration["max_stoerrelse"]) {
      die("Desv&aelig;rre - filen er for stor. Jeg accepterer kun " .
          $konfiguration["max_stoerrelse"] . "kb, og din fil fylder " .
          ceil($fil_stoerrelse) . "kb");
  }
  if(function_exists("move_uploaded_file")) {
    move_uploaded_file($fra, $til);
  } else {
    copy($fra, $til);
  }

  header("Location: " . $_SERVER["PHP_SELF"]);
  exit;

} else {

  $indhold = listFiler($konfiguration["upload_bibliotek"]);
  $indhold .= bygFormular($_SERVER["PHP_SELF"]);
  $output = bygSide("hej", $indhold);
}

echo $output;
exit;

function bygSide($titel, $indhold) {
  return '<html>
            <head><title>' . $titel . '</title></head>
            <body bgcolor="#ffffff">
              <div align="right"><a href="./">Tilbage til artiklen</a></div>
              ' . $indhold . '</body>
          </html>
        ';

}
function bygFormular($action) {

  $formular = '<form action="' . $action . '" method="post" enctype="multipart/form-data">
                <table border="1" cellpadding="5" cellspacing="0">
                  <tr>
                    <td align="right" bgcolor="#999999"><b>Fil til upload:</b></td>
                    <td bgcolor="#cccccc"><input type="file" name="upfil" /></td>
                  </tr>
                  <tr>
                    <td colspan="2" align="middle" bgcolor="#dddddd"><input type="submit" value="upload" /></td>
                  </tr>
                </table>
              </form>
              ';

  return "<h2>Upload fil:</h2>" . $formular;
}

function listFiler($bibliotek) {

  if($bib = @opendir($bibliotek)) {

    while (false !== ($fil = readdir($bib))) {
      if($fil != "." && $fil != ".." && !ereg("^\..+", $fil)) {
          $fil_liste[] = "<a href=\"$bibliotek/$fil\">$fil</a>";
      }
    }
    closedir($bib);

    if(is_array($fil_liste)) {
      $liste = "<li>" . join("</li><li>", $fil_liste) . "</li>";
    } else {
      $liste = "<li>Ingen filer p&aring; lager</li>";
    }
    return "<h2>Filer p&aring; lager:</h2><ul>" . $liste . "</ul>";
  } else {
    die("Kunne ikke &aring;bne biblioteket: " . $bibliotek);
  }

}
?>

Ja, scriptet er fra webcafe.dk :-) Men nu vil jeg altså gerne udvide det
Avatar billede jakobdo Ekspert
20. juni 2006 - 09:10 #1
Jeg kan ikke lige forklare det hele, men prøv at kig på koden her:

index.php
<?php

/******************************************\
*                                          *
* CREATE TABLE pictures (                  *
*  pid int(11) NOT NULL auto_increment,  *
*  title text,                            *
*  imgdata blob,                          *
*  PRIMARY KEY  (pid)                    *
*  ) ENGINE=MyISAM;                      *
*                                          *
\******************************************/

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

if ($_POST['completed'] == 1)
{
    // Need to add - check for large upload. Otherwise the code
    // will just duplicate old file ;-)
    // ALSO - note that latest.img must be public write and in a
    // live appliaction should be in another (safe!) directory.
    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
        {
            resize($_FILES['imagefile']['tmp_name'],"latest.img",300,300);
            $instr = fopen("latest.img","rb");
            $image = addslashes(fread($instr,filesize("latest.img")));
            mysql_query ("insert into pictures (title, imgdata) values (\"".$_POST['whatsit']."\", \"".$image."\")") or die(mysql_error());
        }
    }
}

// Find out about latest image

$gotten = mysql_query("select * from pictures order by pid desc limit 1") or die(mysql_error());
if(mysql_num_rows($gotten)>0)
{
    $row = mysql_fetch_assoc($gotten);
    $title = htmlspecialchars($row['title']);
    $bytes = $row['imgdata'];
}
else
{
    $errmsg = "There is no image in the database yet";
    $title = "no database image available";
    // Put up a picture of our training centre
    $instr = fopen("./images.jpg","rb");
    $bytes = fread($instr,filesize("./images.jpg"));
}

// If this is the image request, send out the image

if ($_GET['gim'] == 1)
{
    header("Content-type: image/jpeg");
    print $bytes;
    exit ();
}
?>

<html>
<head>
<title>Upload an image to a database</title>
<body bgcolor=white><h2>Here's the latest picture</h2>
<font color=red><?= $errmsg ?></font>
<center><img src=?gim=1><br>
<b><?= $title ?></center>
<hr>
<h2>Please upload a new picture and title</h2>
<form enctype="multipart/form-data" method="post">
<input type="hidden" name="completed" value="1">
Please choose an image to upload: <input type="file" name="imagefile"><br>
Please enter the title of that picture: <input name="whatsit"><br>
then: <input type="submit"></form><br>
</body>
</html>

Samt image.php:

<?php

require_once("./../members/common.php");

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

$query = mysql_query("select pic from billeder 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['pic'];
    exit ();
}

?>

Den tager et billede og gemmer det i databasen, der kan du så udbygge det med felter til tekst, forfatter og lign.
Avatar billede mickey777 Nybegynder
20. juni 2006 - 10:26 #2
Du kan måske blive inspirereret af denne kode.

http://www.gieson.com/Library/projects/spa/index.php
Avatar billede mickey777 Nybegynder
20. juni 2006 - 10:26 #3
Freeware og lige til at lægge op på serveren.
Avatar billede clausberg Nybegynder
21. juni 2006 - 21:29 #4
jakobdo>>> Jeg kender godt den type script - har tidligere brugt dem. Jeg er dog blevet frarådet at lægge billeder ind i en database, da det vil gå ud over søgehastighed osv. Jeg ender nemlig op med at have flere hundrede billeder + tekst, titel, beskrivelse osv.
Avatar billede clausberg Nybegynder
21. juni 2006 - 21:38 #5
Mickey777>>> ikke helt det jeg leder efter :-( Men ellers tak for hjælpen :-)
Avatar billede jpj3 Nybegynder
21. juni 2006 - 23:27 #6
Avatar billede clausberg Nybegynder
22. juni 2006 - 20:16 #7
Ja, det er noget i den retning. Dog bruger jeg Mysql og det ser ud til at man skal bruge en access database. Jeg er heller ikke bekendt med asp.
Avatar billede clausberg Nybegynder
22. juni 2006 - 20:18 #8
Jeg kan fx ikke finde ud af at oprette en access database - jeg har B-one som hotel.

Ved du hvordan man gør det?
Avatar billede clausberg Nybegynder
22. juni 2006 - 20:19 #9
Æv... har lige læst at B-one ikke understøtter access databaser, så jeg går udfra at scriptet så ikke fungerer. Det så ellers lovende ud!
Avatar billede jakobdo Ekspert
22. juni 2006 - 21:32 #10
Avatar billede clausberg Nybegynder
22. juni 2006 - 21:55 #11
Jakobdo>>> Ja, dette script kunne godt være et bud på det.
>>>> bliver billedet smidt ned i et bibliotek?
Avatar billede jakobdo Ekspert
22. juni 2006 - 21:57 #12
Hehe, ja, det gemmes stadig i diret upload. :o)
Avatar billede jpj3 Nybegynder
22. juni 2006 - 21:58 #13
Så er det nok denne du skal kigge på
http://sourceforge.net/projects/linpha/
Avatar billede jpj3 Nybegynder
22. juni 2006 - 21:59 #14
Avatar billede clausberg Nybegynder
01. juli 2006 - 13:01 #15
Jakobdo>>>>> Jeg har lige postet en spørgsmål i det andet spørgsmål vi har kørende omhandlede scriptet fra codebreaker.dk - som jeg nu holder mig til :-)
Avatar billede jakobdo Ekspert
02. juli 2006 - 11:49 #16
Vil det sige vi skal lukke dette spørgsmål eller?
Avatar billede clausberg Nybegynder
05. juli 2006 - 20:46 #17
Ja, hvis du smider et svar, så vinder du hovedpræmien... jeg skal dog lige have codebreaker.dk scriptet til at fungere på det andet spørgsmål.
Avatar billede jakobdo Ekspert
05. juli 2006 - 21:04 #18
Svar!
Avatar billede clausberg Nybegynder
05. juli 2006 - 21:19 #19
Og point! :-) Hvis du ikke har set mit indlæg i det andet spørgsmål, så har jeg fået dit script til at fungere, men har et par spørgsmål
Avatar billede jakobdo Ekspert
05. juli 2006 - 21:59 #20
Takker for point, og har svaret i det andet indlæg.
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