Avatar billede lsskaarup Nybegynder
14. november 2004 - 15:21 Der er 20 kommentarer og
1 løsning

Upload både stort og lille billede

Jeg har denne kodestump som uploade et billede, samt lægge info i en db. Men jeg kunne godt tænke mig at få gjort som den også uploader en lille størrelse af billedet, også gerne så det fylder mindre, og det skal selvfølgelig ligge i en anden sti. Hvordan dælen gøres det?

if (isset($_POST['submit']) && $_POST['submit'] == "Upload" && $_POST['rettype'] == "redigere") {
    $source = $_FILES['nyhedsBillede']['tmp_name'];
    $tekst = $_POST['nyhedsTekst'];
    $overskrift = $_POST['nyhedsOverskrift'];
    if (is_file($source)) {//Fanger hvis billede ikke skal ændres
        if (is_uploaded_file($source)) {
            if (tjektype($_FILES['nyhedsBillede']['type'])) {
                $dest = $uploaddir . $_FILES['nyhedsBillede']['name'];
                $dest = tjekfilnavn($dest);
                //Sletning af det tidligere billede
                $queryGammelSti = mysql_query("SELECT sti FROM RS_Nyhed WHERE id = $_POST[nyhedsId]");
                $gammelSti = mysql_fetch_array($queryGammelSti);
                if (file_exists($gammelSti[sti])) {//Tjekker om den gamle fil findes, så den kan slettes hvsi true
                    if (move_uploaded_file($source, $dest)) {
                        unlink($gammelSti[sti]);//Sletter det gamle billede
                        mysql_query("UPDATE RS_Nyhed SET overskrift='$overskrift', tekst='$tekst', sti='$dest'
                                    WHERE id = '$_POST[nyhedsId]'");
                        header("location: adminNyhed.php?nyhedsId=$_POST[nyhedsId]");
                    } else {
                      $besked = "Der blev ikke gemt noget";
                    }
                } else {
                    $besked = "Du prøvede at slette en fil som ikke findes";
                }
            } else {
                $besked = "Du prøvede at gemme et billedeformat som ikke er tilladt. Du kan gemme billeder i JPEG og PNG formaterne.";
            }
        } else {
            mysql_query("UPDATE RS_Nyhed SET overskrift='$overskrift', tekst='$tekst'
                        WHERE id = '$_POST[nyhedsId]'");
            header("location: adminNyhed.php?nyhedsId=$_POST[nyhedsId]");
        }
    } else { //Opdater info hvis ikke billedet skal ændres
        mysql_query("UPDATE RS_Nyhed SET overskrift='$overskrift', tekst='$tekst'
                    WHERE id = '$_POST[nyhedsId]'");
        header("location: adminNyhed.php?nyhedsId=$_POST[nyhedsId]");
    }
}
Avatar billede baitianlong Nybegynder
14. november 2004 - 16:13 #1
Jeg har et lille script her, som jeg engang lavede. Det laver en kopi af billedet, som bliver uploaded i 100 pixels bredde. Jeg har tilpasset det til dit script, men der kan være lidt mere, der skal ændres. Det virker dog glimrende:

list($width, $height) = getimagesize($uploaddir.$_FILES['nyhedsBillede']['name']);
$new_width = 100;
$krympefaktor = $new_width/$width;
$new_height = round($height * $krympefaktor);
$destinationImage = imagecreatetruecolor($new_width, $new_height);
if($_FILES['nyhedsBillede']['type'] == "image/pjpeg") {
    $sourceImage = imagecreatefromjpeg($uploaddir.$_FILES['nyhedsBillede']['name']);
    imagecopyresampled($destinationImage, $sourceImage, 0, 0, 0, 0, $new_width, $new_height, imagesx($sourceImage), imagesy($sourceImage));
    imagepng($destinationImage, $uploaddir.basename($_FILES['nyhedsBillede']['name'], ".jpg")."_thumb.jpg"));
} elseif($_FILES['nyhedsBillede']['type'] == "image/png") {
    $sourceImage = imagecreatefrompng($uploaddir.$_FILES['nyhedsBillede']['name']);
    imagecopyresampled($destinationImage, $sourceImage, 0, 0, 0, 0, $new_width, $new_height, imagesx($sourceImage), imagesy($sourceImage));
    imagepng($destinationImage, $uploaddir.basename($_FILES['nyhedsBillede']['name'], ".png")."_thumb.png"));
}

:)
Avatar billede lsskaarup Nybegynder
14. november 2004 - 17:04 #2
Øh, men hvor skal jeg lige sætte et ind?
Avatar billede lsskaarup Nybegynder
14. november 2004 - 17:05 #3
Og gør den så, størrelsen på begge billeder er f.eks. 500Kb, men så thumbnailen måske kun er på 50Kb?
Avatar billede lsskaarup Nybegynder
14. november 2004 - 17:13 #4
Det sidste har jeg fundet ud af ved at læse på php.net
Avatar billede lsskaarup Nybegynder
14. november 2004 - 17:48 #5
Okay, er nu selv kommet noget længere, men den driller mig lidt. For den gemme thumbnail under f.eks. "billedenavn.jpg_thumb.jpg". Jeg kan godt under være det midterste .jpg, men hvordan får jeg det væk?

Jeg prøvede at fjerne ".jpg" fra basename, men så uploader den slet ikke nogen thumbnail.
Avatar billede rhandersen Nybegynder
14. november 2004 - 17:51 #6
lsskaarup>

Må jeg få hele scriptet af dig hvis du får det til at virke??

Du kan evt få 60 point?
Avatar billede lsskaarup Nybegynder
14. november 2004 - 17:55 #7
rhandersen-->
Øh, ja ja. Du kan da også få det unden point, men vil du af med dem ;-P, så synes jeg også legende.dk, skal have nogle. Men den tid, den sorg.

Du står måske også og skal bruge sådanne et script?
Avatar billede lsskaarup Nybegynder
14. november 2004 - 19:44 #8
Ahh, har fundet ud af hvad der var galt $_FILES er case-sensetive samt kan den heller ikke lide forskellen på jpg og jpeg, så man bliver altså nødt til at ændre til enten store eller små bogstaver, samt teste for diverse stavemåder på filtyperne.
Avatar billede lsskaarup Nybegynder
14. november 2004 - 20:17 #9
Så blev jeg vist færdig med det, så her er scriptet.

if (isset($_POST['submit']) && $_POST['submit'] == "Upload" && $_POST['rettype'] == "ny") {
    $billede = $_FILES['nyhedsBillede']['name'];
    $type = strrchr($billede, ".");// For at finde filtypen til tjek af jpeg kontra jpg
    $billede = strtolower($billede);// ændre alt til små bogstaver
    $dest = $uploaddir . $billede;// Stien til det store billede
    $dest = tjekfilnavn($dest);
    $thumbnail = $thumbnail_dir . $billede;// Stien til det thumbnail
    $tekst = $_POST['nyhedsTekst'];
    $overskrift = $_POST['nyhedsOverskrift'];
    $oprettelsesDato = date('Ymd');
    $source = $_FILES['nyhedsBillede']['tmp_name'];
    if (is_uploaded_file($source)) {
        if (tjektype($_FILES['nyhedsBillede']['type'])) {
            if (move_uploaded_file($source, $dest)) {
                list($width, $height) = getimagesize($dest);
                $new_width = 100;
                $krympefaktor = $new_width/$width;
                $new_height = round($height * $krympefaktor);
                $destinationImage = imagecreatetruecolor($new_width, $new_height);
                if(tjektype($_FILES['nyhedsBillede']['type'] == "image/pjpeg")) {
                    $sourceImage = imagecreatefromjpeg($dest);
                    imagecopyresampled($destinationImage, $sourceImage, 0, 0, 0, 0, $new_width, $new_height, imagesx($sourceImage), imagesy($sourceImage));
                    if ($type == ".jpeg") {
                        imagejpeg($destinationImage, $thumbnail_dir.basename($billede, ".jpeg")."_thumb.jpeg");
                    } else {
                        imagejpeg($destinationImage, $thumbnail_dir.basename($billede, ".jpg")."_thumb.jpg");
                    }
                } else if(tjektype($_FILES['nyhedsBillede']['type'] == "image/png")) {
                    $sourceImage = imagecreatefrompng($dest);
                    imagecopyresampled($destinationImage, $sourceImage, 0, 0, 0, 0, $new_width, $new_height, imagesx($sourceImage), imagesy($sourceImage));
                    imagepng($destinationImage, $thumbnail_dir.basename($billede, ".png")."_thumb.png");
                }
                mysql_query("INSERT INTO RS_Nyhed (tekst, sti, thumbnail, overskrift, dato)
                            VALUES ('$tekst', '$dest', '$thumbnail', '$overskrift', '$oprettelsesDato')") or die (mysql_error());
                mysql_close();
                $besked = "Tekst og billede gemt";
            } else {
                $besked = "Der blev ikke gemt noget";
            }
        } else {
            $besked = "Du prøvede at gemme et billedeformat som ikke er tilladt. Du kan gemme billeder i JPEG og PNG formaterne.";
        }
    } else {
        mysql_query("INSERT INTO RS_Nyhed SET overskrift='$overskrift', sti='images/intetBillede.png',
                    tekst='$tekst', dato='$oprettelsesDato'");
        mysql_close();
        header("location: adminNyhed.php");
    }
}

Tak for hjælpen, legende.dk
Avatar billede lsskaarup Nybegynder
14. november 2004 - 20:19 #10
Det er altså selve upload og skrivning i db, udover det har jeg jo f.eks. en funktion som tjekker om typen er en som der må uploades - tjektype().
Avatar billede lsskaarup Nybegynder
14. november 2004 - 20:48 #11
Hov opdagede lige en fejl, da jeg kommer til at gemme den rigtige sti men forkerte filnavn i db'en til thumbnail. Så scriptet skal se sådan ud.

if (isset($_POST['submit']) && $_POST['submit'] == "Upload" && $_POST['rettype'] == "ny") {
    $billede = $_FILES['nyhedsBillede']['name'];
    $type = strrchr($billede, ".");// For at finde filtypen til tjek af jpeg kontra jpg
    $billede = strtolower($billede);// ændre alt til små bogstaver
    $dest = $uploaddir . $billede;// Stien til det store billede
    $dest = tjekfilnavn($dest);
    $thumbnail;// Til stien til thumbnail
    $tekst = $_POST['nyhedsTekst'];
    $overskrift = $_POST['nyhedsOverskrift'];
    $oprettelsesDato = date('Ymd');
    $source = $_FILES['nyhedsBillede']['tmp_name'];
    if (is_uploaded_file($source)) {
        if (tjektype($_FILES['nyhedsBillede']['type'])) {
            if (move_uploaded_file($source, $dest)) {
                list($width, $height) = getimagesize($dest);
                $new_width = 100;
                $krympefaktor = $new_width/$width;
                $new_height = round($height * $krympefaktor);
                $destinationImage = imagecreatetruecolor($new_width, $new_height);
                if(tjektype($_FILES['nyhedsBillede']['type'] == "image/pjpeg")) {
                    $sourceImage = imagecreatefromjpeg($dest);
                    imagecopyresampled($destinationImage, $sourceImage, 0, 0, 0, 0, $new_width, $new_height, imagesx($sourceImage), imagesy($sourceImage));
                    if ($type == ".jpeg") {
                        imagejpeg($destinationImage, $thumbnail_dir.basename($billede, ".jpeg")."_thumb.jpeg");
                        $thumbnail = $thumbnail_dir.basename($billede, ".jpeg")."_thumb.jpeg";// Stien til thumbnail
                    } else {
                        imagejpeg($destinationImage, $thumbnail_dir.basename($billede, ".jpg")."_thumb.jpg");
                        $thumbnail = $thumbnail_dir.basename($billede, ".jpg")."_thumb.jpg";// Stien til thumbnail
                    }
                } else if(tjektype($_FILES['nyhedsBillede']['type'] == "image/png")) {
                    $sourceImage = imagecreatefrompng($dest);
                    imagecopyresampled($destinationImage, $sourceImage, 0, 0, 0, 0, $new_width, $new_height, imagesx($sourceImage), imagesy($sourceImage));
                    imagepng($destinationImage, $thumbnail_dir.basename($billede, ".png")."_thumb.png");
                }
                mysql_query("INSERT INTO RS_Nyhed (tekst, sti, thumbnail, overskrift, dato)
                            VALUES ('$tekst', '$dest', '$thumbnail', '$overskrift', '$oprettelsesDato')") or die (mysql_error());
                mysql_close();
                $besked = "Tekst og billede gemt";
            } else {
                $besked = "Der blev ikke gemt noget";
            }
        } else {
            $besked = "Du prøvede at gemme et billedeformat som ikke er tilladt. Du kan gemme billeder i JPEG og PNG formaterne.";
        }
    } else {
        mysql_query("INSERT INTO RS_Nyhed SET overskrift='$overskrift', sti='images/intetBillede.png',
                    tekst='$tekst', dato='$oprettelsesDato'");
        mysql_close();
        header("location: adminNyhed.php");
    }
}
Avatar billede rhandersen Nybegynder
15. november 2004 - 14:09 #12
Resizer den også i det der script?
Avatar billede rhandersen Nybegynder
15. november 2004 - 14:56 #13
Kan jeg få en form evt?

Jeg forstår ikke helt alle dine variabler:S
Avatar billede lsskaarup Nybegynder
15. november 2004 - 20:09 #14
Ja den resizer i funktionen imagecopyresampled()

Jeg er ikek lige hjemme nu, så kan ikke vise min form, men jeg kan da prøve at forklare mine variabler. Jeg springer dog over dem jeg har kommenteret i koden.

$billede = $_FILES['nyhedsBillede']['name']; -> henter navnet plus extension på billedet som ligger i feltet nyhedsBillede.

$tekst, $overskrift -> henter de respektive ting

$oprettelsesDato -> laver en dato på den enkelte nyhed, som jeg gemme i db'en til senere sortering

tjektype og tjekfilnavn -> er nogle jeg har fået hjælp til at lave, men de tjekker bare om filen overholder de krav som jeg har sat f.eks. kun jpg og png

$source -> er navnet på midlertidig fil på serveren

$besked -> Er bare en lille ting, jeg bruger til at sende fejlmeddelelser tilbage til brugeren, hvis noget går galt.

Det var vist det, er der flere eller nogle du stadigvæk ikke helt forstår, så bare skriv.
Avatar billede rhandersen Nybegynder
15. november 2004 - 21:16 #15
Ja, men det er mest formelen jeg mangler:)

Vil du sende den når du får tid?
Avatar billede lsskaarup Nybegynder
15. november 2004 - 22:02 #16
Her kommer den, men den er der nu ikke noget specielt over.

<form name="admin" method="post" action="<?echo $PHP_SELF?>" enctype="multipart/form-data">
                                                    <? if (isset($_GET[nyhedsId])) {?>
                                                        <table width="510" border="0" cellpadding="0" cellspacing="0">
                                                            <tr>
                                                                <td><a href="adminNyheder.php" target="_self">Tilbage til hovedoversigt</a></td>
                                                            </tr>
                                                            <tr>
                                                                <td align="center" valign="top" width="482" height="336">
                                                                    <table>
                                                                        <? $nyheder = mysql_query("SELECT * FROM RS_Nyhed WHERE id = '$_GET[nyhedsId]'");
                                                                        while ($nyhed = mysql_fetch_array($nyheder)){?>
                                                                            <tr>
                                                                                <td>Overskrift:</td><td colspan="3"><input name="nyhedsOverskrift" type="text" value="<?=$nyhed[overskrift]?>" maxlength="50" size="50"></td>
                                                                            </tr>
                                                                            <tr>
                                                                                <td>Tekst:</td><td colspan="3"><textarea name="nyhedsTekst" cols="38" rows="10"><?=$nyhed[tekst]?></textarea></td>
                                                                            </tr>
                                                                            <tr>
                                                                                <td>Nuværende oversigtsbillede:</td><td><img src="<?=$nyhed[thumbnail]?>"></td>
                                                                            </tr>
                                                                            <tr>
                                                                                <td>Nyt billede:</td><td colspan="3"><input name="nyhedsBillede" type="file" size="37"></td>
                                                                            </tr>
                                                                            <tr>
                                                                                <td><input name="rettype" type="hidden" value="redigere"><input name="nyhedsId" type="hidden" value="<?=$_GET[nyhedsId]?>"><input name="submit" type="submit" value="Upload"></td><td><input name="submit" type="submit" value="Slet"></td>
                                                                            </tr>
                                                                            <tr>
                                                                                <td><?=$besked?></td>
                                                                            </tr>
                                                                        <? }?>
                                                                    </table>
                </td>
              </tr>
                                                            <tr>
                                                                <td width="510" align="left" valign="top"></td>
                                                            </tr>
                                                        </table>
                                                    <? } else {//nyt tilbud?>
                                                        <table width="510" border="0" cellpadding="0" cellspacing="0">
                                                            <tr>
                                                                <td><a href="adminNyheder.php" target="_self">Tilbage til hovedoversigt</a></td>
                                                            </tr>
                                                            <tr>
                                                                <td align="center" valign="top" width="482" height="336">
                                                                    <table>
                                                                        <tr>
                                                                            <td>Overskrift:</td><td colspan="3"><input name="nyhedsOverskrift" type="text" maxlength="50" size="50"></td>
                                                                        </tr>
                                                                        <tr>
                                                                            <td>Tekst:</td><td colspan="3"><textarea name="nyhedsTekst" cols="38" rows="10"></textarea></td>
                                                                        </tr>
                                                                        <tr>
                                                                            <td>Billede:</td><td colspan="3"><input name="nyhedsBillede" type="file" size="37"></td>
                                                                        </tr>
                                                                        <tr>
                                                                            <td><input name="rettype" type="hidden" value="ny"><input name="submit" type="submit" value="Upload"></td>
                                                                        </tr>
                                                                        <tr>
                                                                            <td><?=$besked?></td>
                                                                        </tr>
                                                                    </table>
                </td>
              </tr>
                                                        </table>
                                                    <? }?>
                                                    </form>
Avatar billede rhandersen Nybegynder
16. november 2004 - 15:13 #17
Fatal error: Call to undefined function: tjekfilnavn() in /usr/home/web/web36045/test/upload.php on line 8

Hvor kommer den funktion lige fra?
Avatar billede lsskaarup Nybegynder
16. november 2004 - 18:00 #18
Som jeg skriver tidligere er det en funktion som tjekker om filnavnet overholder visse regler.

Se eventuelt http://eksperten.dk/spm/522178
Avatar billede baitianlong Nybegynder
19. november 2004 - 19:54 #19
Jeg har lige været væk en uges tid... Men det lader til at du har fået det til at virke... Det er et rimeligt smukt script, og for at besvare dit spørgsmål, bliver både størrelsen og filstørrelsen nedkogt.
Avatar billede lsskaarup Nybegynder
20. november 2004 - 12:03 #20
legende.dk --> Det er altid dejligt, hvis man kan rose sig selv en gang imellem, for ja det er et smukt script, du har hjulpet mig med der ;-)
Avatar billede rhandersen Nybegynder
03. december 2004 - 11:55 #21
Hej igen

Nu havde jeg fået scriptet til at virke ved mig, så indsætter jeg dette:
if($height <= $width){
                $new_width = 100;
                } else {
                $new_width = 82;
                }

istedet for
$new_width = 100;

og nu kommer min thumb ikke op.

Vil i lige kigge her?
http://exp.dk/spm/567037

Mvh Rasmus
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