Avatar billede JJ77 Juniormester
11. januar 2006 - 20:38 Der er 4 kommentarer og
1 løsning

hvad er galt med følgende upload fil?

Jeg kan ikke få nedenstående fil til at virke, og forstår ikke helt hvorfor. Er her nogle eksperter som har nogle forslag til hvorfor det ikke virker;)

<?php

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

require_once("../members/common.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
require_once("../members/common.php");
$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="../../../../../Skrivebord/?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>
Avatar billede rednex Nybegynder
11. januar 2006 - 23:05 #1
Som jeg skrev sidste gang du oprettede spørgsmålet:

Du ville sikkert få mere respons hvis du gav en indikation af hvilken slags fejl der var tale om. Hvad gør den/hvad gør den ikke? Og ikke mindst, hvad var det meningen den skulle gøre? Får du nogen fejlmeddelelser - hvilke? osv.

Har du i øvrigt husket at slå error_reporting og display_errors til i php.ini?
Avatar billede JJ77 Juniormester
12. januar 2006 - 12:37 #2
Det virker som om at den uploader billedet til databasen. Der kommer ihvertfald et eller andet ind i den. Det billede den skal vise bliver bare et hvidt et med et rødt kryds. Mht. error_reporting og display_errors til i php.ini? ved jeg desværre ikke hvad du snakker om. Men ovenstående kode skal køres på et eksternt webhotel, og jeg går ud fra at man ikke kan ændre i en php.ini. Eller kan man?. Jeg får ikke nogle fejlmeddelelser.
Avatar billede rednex Nybegynder
12. januar 2006 - 13:05 #3
Hvis du benytter B-one, kan du slå error reporting til i kontrolpanelet under advanced. Alternativt kan du placere disse linier i toppen af scriptet.

error_reporting(E_ALL);
ini_set('display_errors', '1');

Hvis du kører PHP 4.4.1 skal du lige indsætte "touch($newfilename);" på linien før imageJepg() i resize funktionen.

Og så skal du nok også lige checke at img-tagget peger det rigtige sted hen:
<img src="../../../../../Skrivebord/?gim=1">
Avatar billede JJ77 Juniormester
13. januar 2006 - 20:06 #4
ok... det var stien som var forkert.. takker.. smider du ikke lige et svar;)
Avatar billede rednex Nybegynder
13. januar 2006 - 20:43 #5
Det kan du tro :o)
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