Avatar billede -kenner- Nybegynder
07. maj 2005 - 15:57 Der er 28 kommentarer og
1 løsning

kan simpelt hen ikke finde hoved eller hale i billede upload..

Hej eksperter,

Jeg har prøvet nogle copy n' paste koder til billede upload, prøvet at kode det selv, og jeg kan bare ikke få det til at fungere.

Jeg vil lave en kode, som kom uploade billeder til et bibliotek(en mappe).

Billedet skal gemmes som $id, som er et id jeg henter ud fra databasen.

Hvis der allerede eksistere et billede med dette id, skal det nye billede overskrive det gamle.

Mvh. Kenneth
Avatar billede coderdk Praktikant
07. maj 2005 - 16:30 #1
<?php

  define( 'MAPPE', 'en_mappe/' );

  if ( isset( $_POST['gem'] ) )
  {
      if ( is_uploaded_file( $_FILES['fil']['tmp_name'] ) )
      {
        // hent id fra databasen
        $id = 1;
        move_uploaded_file( $_FILES['fil']['tmp_name'], MAPPE . $id );
        echo "Fil gemt.";
      }
  }

?>
<form method="post" action="<?= $_SERVER['PHP_SELF'] ?>" enctype="multipart/form-data">
<input type="file" name="fil">
<input type="submit" name="gem" value="Upload">
</form>
Avatar billede -kenner- Nybegynder
07. maj 2005 - 17:34 #2
Fedt, det virker fint, men jeg kunne godt tænke mig at "efternavnet" kommer på når billedet bliver gemt, så det bliver 1.gif eller 1.jpg..
Avatar billede coderdk Praktikant
07. maj 2005 - 17:38 #3
<?php

  define( 'MAPPE', 'en_mappe/' );

  if ( isset( $_POST['gem'] ) )
  {
      if ( is_uploaded_file( $_FILES['fil']['tmp_name'] ) )
      {
        // hent id fra databasen
        $id = 1;
        $ext = end( explode( '.', $_FILES['fil']['tmp_name'] ) );
        move_uploaded_file( $_FILES['fil']['tmp_name'], MAPPE . $id . '.' . $ext );
        echo "Fil gemt.";
      }
  }

?>
<form method="post" action="<?= $_SERVER['PHP_SELF'] ?>" enctype="multipart/form-data">
<input type="file" name="fil">
<input type="submit" name="gem" value="Upload">
</form>

Det skader ikke at prøve lidt selv ;)
Avatar billede -kenner- Nybegynder
07. maj 2005 - 17:51 #4
Jeg får denne fejl:

Warning: move_uploaded_file(Billeder/1./tmp/php0At6TR): failed to open stream: No such file or directory in /free1go/k/e/www.kenda.1go.dk/Kenner-php/upp.php on line 18

Warning: move_uploaded_file(): Unable to move '/tmp/php0At6TR' to 'Billeder/1./tmp/php0At6TR' in /free1go/k/e/www.kenda.1go.dk/Kenner-php/upp.php on line 18
Filen er gemt.
Avatar billede coderdk Praktikant
07. maj 2005 - 17:53 #5
Ja, my bad:

$ext = end( explode( '.', $_FILES['fil']['tmp_name'] ) );

Skulle have været:

$ext = end( explode( '.', $_FILES['fil']['name'] ) );
Avatar billede -kenner- Nybegynder
07. maj 2005 - 18:11 #6
Fino, nu virker det fint, men for at dække et hul, så skal den overskrive hvis navnene er ens. Det gør den nemlig ikke, for billede.jpg bliver ikke over skrevet af andet-billede.JPG..

Den gør foreslek på store og små bogstaver..
Avatar billede -kenner- Nybegynder
07. maj 2005 - 18:13 #7
Så ved jeg ikke om man skal give den en strtoupper()
Avatar billede coderdk Praktikant
07. maj 2005 - 18:15 #8
Du skriver jo på ID - Og det jeg har lavet overskriver 123.jpg hvis 123.jpg allerede eksisterer.
Avatar billede -kenner- Nybegynder
07. maj 2005 - 18:16 #9
Ja men 123.jpg over skriver ikke 123.JPG..
Avatar billede coderdk Praktikant
07. maj 2005 - 18:18 #10
Ah ja, så skal du nok lave

$ext = end( explode( '.', $_FILES['fil']['tmp_name'] ) );

om til:

$ext = strtolower( end( explode( '.', $_FILES['fil']['tmp_name'] ) ) );
Avatar billede coderdk Praktikant
07. maj 2005 - 18:18 #11
Bah, nu igen, jeg mente jo:


$ext = strtolower( end( explode( '.', $_FILES['fil']['name'] ) ) );
Avatar billede -kenner- Nybegynder
07. maj 2005 - 18:33 #12
hmm..

De bliver stadig gemt som 1.jpg og 1.JPG..
Avatar billede coderdk Praktikant
07. maj 2005 - 18:35 #13
Det kan ikke passe, prøv lige igen:

<?php

  define( 'MAPPE', 'en_mappe/' );

  if ( isset( $_POST['gem'] ) )
  {
      if ( is_uploaded_file( $_FILES['fil']['tmp_name'] ) )
      {
        // hent id fra databasen
        $id = 1;
        $ext = strtolower( end( explode( '.', $_FILES['fil']['name'] ) ) );
        move_uploaded_file( $_FILES['fil']['tmp_name'], MAPPE . $id . '.' . $ext );
        echo "Fil gemt.";
      }
  }

?>
<form method="post" action="<?= $_SERVER['PHP_SELF'] ?>" enctype="multipart/form-data">
<input type="file" name="fil">
<input type="submit" name="gem" value="Upload">
</form>
Avatar billede -kenner- Nybegynder
07. maj 2005 - 18:50 #14
Nu funger det.. :)

Men Kan man ikke afvise alle de filer, som ikke er jpg-billede filer..

Ikke bare tjekke om det er .jpg, men sikre sig at indholdet er et billede.
Avatar billede -kenner- Nybegynder
07. maj 2005 - 18:51 #15
altså for at undgå at folk omdøber en zip-fil til .jpg og uploader den..
Avatar billede coderdk Praktikant
07. maj 2005 - 18:55 #16
Jo, sådan:

if ( $inf = @getimagesize( $_FILES['fil']['tmp_name'] ) )
{
  if ( $inf[2] != 2 )
  {
      echo "Det er ikke et jpeg billede.";
  }
}
else
{
  echo "Det er ikke et jpeg billede.";
}
Avatar billede -kenner- Nybegynder
07. maj 2005 - 19:32 #17
Hvor skal det sættes ind i den anden kode del?
Avatar billede coderdk Praktikant
07. maj 2005 - 19:36 #18
Nu skrev jeg det sådan, så du selv kunne lære lidt, men her er en måde:

<?php

  define( 'MAPPE', 'en_mappe/' );

  if ( isset( $_POST['gem'] ) )
  {
      if ( is_uploaded_file( $_FILES['fil']['tmp_name'] ) )
      {
        if ( $inf = @getimagesize( $_FILES['fil']['tmp_name'] ) )
        {
          if ( $inf[2] == 2 )
          {
              // hent id fra databasen
              $id = 1;
              move_uploaded_file( $_FILES['fil']['tmp_name'], MAPPE . $id . '.jpg' );
              echo "Fil gemt.";
          }
          else
          {
              echo "Det er ikke et jpeg billede.";
          }
        }
        else
        {
          echo "Det er ikke et jpeg billede.";
        }
      }
  }

?>
<form method="post" action="<?= $_SERVER['PHP_SELF'] ?>" enctype="multipart/form-data">
<input type="file" name="fil">
<input type="submit" name="gem" value="Upload">
</form>
Avatar billede -kenner- Nybegynder
07. maj 2005 - 19:59 #19
Den melder: Dette er ikke et jpeg billede, når jeg uploader et jpg billede.

Jeg tror at det skyldes at du har skervet:" if ( $inf[2] == 2 )  "i copy n' past koden, for der står:"  if ( $inf[2] != 2 ) " i koden lige over..
Avatar billede coderdk Praktikant
07. maj 2005 - 20:07 #20
Ja, men det er forskellig kontekst ;P

Det virker fint når jeg tester det. Ren copy/paste fra mit sidste indlæg - Kun define()'en er ændret.
Avatar billede -kenner- Nybegynder
07. maj 2005 - 20:26 #21
kontekst?
Avatar billede -kenner- Nybegynder
07. maj 2005 - 20:27 #22
Avatar billede coderdk Praktikant
07. maj 2005 - 21:09 #23
Ja, det kommer an på hvordan koden bruges, sådan som jeg brugte den skulle det være != i den øverste, og == i den nederste.

Hvordan ser din kode ud? For den sidste jeg skrev virker.
Avatar billede -kenner- Nybegynder
07. maj 2005 - 21:47 #24
Den er nøjagtig magen til din.. Har bare kopieret den og sat den ind..
Avatar billede coderdk Praktikant
07. maj 2005 - 21:52 #25
Prøv lige med:

<?php

  define( 'MAPPE', 'en_mappe/' );

  if ( isset( $_POST['gem'] ) )
  {
      if ( is_uploaded_file( $_FILES['fil']['tmp_name'] ) )
      {
        $tmpimg = MAPPE . uniqid() . uniqid();
        move_uploaded_file( $_FILES['fil']['tmp_name'], MAPPE . $tmpimg );
        if ( $inf = @getimagesize( $tmpimg ) )
        {
          if ( $inf[2] == 2 )
          {
              // hent id fra databasen
              $id = 1;
              rename( $tmpimg, MAPPE . $id . '.jpg' );
              echo "Fil gemt.";
          }
          else
          {
              echo "Det er ikke et jpeg billede.";
              @unlink( $tmpimg );
          }
        }
        else
        {
          echo "Det er ikke et jpeg billede.";
        }
      }
  }

?>
<form method="post" action="<?= $_SERVER['PHP_SELF'] ?>" enctype="multipart/form-data">
<input type="file" name="fil">
<input type="submit" name="gem" value="Upload">
</form>
Avatar billede coderdk Praktikant
07. maj 2005 - 22:49 #26
Hvis du ikke bruger php 5 skal det så være:

<?php

  define( 'MAPPE', 'en_mappe/' );

  if ( isset( $_POST['gem'] ) )
  {
      if ( is_uploaded_file( $_FILES['fil']['tmp_name'] ) )
      {
        $tmpimg = MAPPE . uniqid('tmpimg') . uniqid('a');
        move_uploaded_file( $_FILES['fil']['tmp_name'], MAPPE . $tmpimg );
        if ( $inf = @getimagesize( $tmpimg ) )
        {
          if ( $inf[2] == 2 )
          {
              // hent id fra databasen
              $id = 1;
              rename( $tmpimg, MAPPE . $id . '.jpg' );
              echo "Fil gemt.";
          }
          else
          {
              echo "Det er ikke et jpeg billede.";
              @unlink( $tmpimg );
          }
        }
        else
        {
          echo "Det er ikke et jpeg billede.";
        }
      }
  }

?>
<form method="post" action="<?= $_SERVER['PHP_SELF'] ?>" enctype="multipart/form-data">
<input type="file" name="fil">
<input type="submit" name="gem" value="Upload">
</form>
Avatar billede -kenner- Nybegynder
08. maj 2005 - 11:00 #27
.jpg filerne går igennem som de skal :) Den afviser også .gif billederne som den skal, men når jeg forsøger at uploade et bitmap kommer denne fejl:

Internal Server Error
The page you requested could not be served. This could happen for a variety of reasons, including:
A CGI script failed to produce any output.
The server is incorrectly configured.
The server encountered a critical error.
There may be more information about this error in the server's error logs.
If you have any queries about this error, please e-mail no.email@1go.dk.


--------------------------------------------------------------------------------

Back to www.kenda.1go.dk homepage

--------------------------------------------------------------------------------



[ Powered by Zeus Web Server ]
Avatar billede coderdk Praktikant
08. maj 2005 - 15:33 #28
Det lyder underligt - Som om at dit bitmap får PHP til at crashe...?
Avatar billede -kenner- Nybegynder
08. maj 2005 - 16:33 #29
Jeg tror det sker når filen er for stor, for fik lige den samme fejl, da jeg fordøgte at uploade en 272 kb JPEG fil.. Så hvis vi kunne melde fejl, når billedet er større end en given størrelse..
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