Gå til innhold

[LØST] Feil i bildeopplastingsscript!


Anbefalte innlegg

OPPDATERT MED NY KODE OG TEKST!

 

Heisann!

 

Jeg sliter med å finne ut hva feilen i dette scriptet mitt er... Hovedsaken er at jeg skal la en bruker få laste opp et bilde til en katalog på serveren i det brukeren trykker på knappen for å lage en nyhet.. Det som er saken, er at nyheten blir lagt til, men intet bilde er å finne.. Sjekken godkjenner at alt er som det skal, ettersom nyheten blir lagret... Noen som har en anelse om hvor feilen kan ligge?

 

Til opplysning så heter input-feltet til bildet "filbane" i formet for å legge til en nyhet.. Mappen "nyhetsbilder" har også korrekte rettigheter..

 


<?php
if($submit_nyhet) {
 include ("makedbconn.php");
 	
 $bildefil = ""; //bildefil lagres i databasen
 if( !empty($_FILES['filbane']['name']) ) {
 	//$temp_fil er et midlertidig navn bestemt i php.ini
 	$temp_fil = $_FILES['filbane']['tmp_name'];
 	//Blir for eksempel bilder/navn.jpg
 	//må derfor kopiere fra denne over til et kjent sted/navn
 	$filtype = $_FILES['filbane']['type']; //mimetypen
   if ( strstr($filtype, "jpg") ){ //godtar bare jpeg-filer
   	$bildefil = $_FILES['filbane']['name'];
   	copy($temp_fil, "nyhetsbilder/" . $bildefil) or die ("Kunne ikke kopiere bildet!");
   }
 }//if, ferdig med å kopiere fil og lagre i databasen
 
 $sql = "INSERT INTO nyhet (tittel,ingress,brodtekst,bildenavn,aar,dag,maaned) VALUES ('$tittel', '$ingress', '$brodtekst', '$bildefil', '$aar', '$dag', '$maaned' )";
 
 $result = mysql_query($sql) or die("Her var det noe som gikk galt..: " . mysql_error());

 if ($result) {
 	echo "<h3>Nyheten ble korrekt opprettet, og vises nå på forsiden av bloggen.</h3>";
 	echo "<p>Du vil nå automatisk returnere tilbake til adminpanelet, eller du kan gjøre det selv ved å trykke <a href='javascript:history.go(-1)'>her</a>.</p>";
 	echo "<META HTTP-EQUIV=\"refresh\" content=\"3;URL=admin.php\">";
 }
 // Stenger mysql
 mysql_close();
}

else {
 die("Kunne ikke koble til: " . mysql_error());
}
?>

Endret av Gabi Heinze
Lenke til kommentar
Videoannonse
Annonse

Det er verdt et forsøk.

Mulige (og gyldige) filendelser på JPEG-bilder kan være: .jpg, .jpeg, .JPG, .JPEG

 

 

Også kan du prøve å utvide feilsøkingen litt med å legge inn f.eks noe sånt:

if ( strstr($filtype, "jpg") ){ //godtar bare jpeg-filer
   $bildefil = $_FILES['filbane']['name'];
   copy($temp_fil, "nyhetsbilder/" . $bildefil) or die ("Kunne ikke kopiere bildet!");
  } else {
     echo "La IKKE til noe bilde. \$filetype = {$filetype}, \$bildefil = {$bildefil}";
  }

Og se hva den printer ut.

Endret av endrebjorsvik
Lenke til kommentar

Det kan tyde på at den ikke trigger i if nr. 2. Da er det bare til å legge inn enda mer else og se hva den kommer ut med.

	if (!empty($_FILES['filbane']['name']) ) {

 //$temp_fil er et midlertidig navn bestemt i php.ini
 $temp_fil = $_FILES['filbane']['tmp_name'];
 
 //Blir for eksempel bilder/navn.jpg
 //må derfor kopiere fra denne over til et kjent sted/navn
 $filtype = $_FILES['filbane']['type']; //mimetypen
 
 if ( strstr($filtype, "jpg") ){ //godtar bare jpeg-filer
 	$bildefil = $_FILES['filbane']['name'];
 	copy($temp_fil, "nyhetsbilder/" . $bildefil) or die ("Kunne ikke kopiere bildet!");
 } else {
 	echo "La IKKE til noe bilde. \$filetype = {$filetype}, \$bildefil = {$bildefil}";
 }
} else {
 echo "Fil fra 'filbane' er IKKE satt.<br> 
 	\$_FILES['filbane']['name'] = {$_FILES['filbane']['name']} <br>
 	\$_FILES['filbane']['tmp_name'] = {$_FILES['filbane']['name']} <br>
 	\$_FILES['filbane']['type'] = {$_FILES['filbane']['name']}";
}

Lenke til kommentar
Det vil da si at $_FILE['filbane']['name'] er tom ;)

 

1. sjekk at form tagen har rette attributter:

<form enctype="multipart/form-data" action="__URL__" method="POST">

2. sjekk at file input feltet heter filbane.

3. sjekk at inputfeltet er av typen file

<input type='file' name='filbane'>

Les evt mer om fil opplastinger på php.net sine sider

6853727[/snapback]

 

Fant fort ut at jeg hadde glemt å legge til følgende i formet:

<form enctype="multipart/form-data" action="__URL__" method="POST">

 

Når jeg gjorde dette, hoppet den over den siste else-setningen, og skrev ut:

echo "La IKKE til noe bilde. \$filetype = {$filetype}, \$bildefil = {$bildefil}";

 

Inputfeltet heter filbane og typen er satt til å være file ja, så der er det hvertfall ingen mangler.

Lenke til kommentar

Den skrev vel ikke ut akkurat det ? ;)

 

Mulig årsaker nå: Filendelsen på bildet er ikke jpg, eller filendelsen på blidet er jpg, men har ikke bare små bkostaver.

 

Bytt ut denne:

if ( strstr($filtype, "jpg") ) 

med denne:

if ( stristr($filtype, "jpg") )

(Som også er nevnt av endre lengre opp i tråden)

 

Og pass på at bildene har filendelsen jpg, og ikke f.eks jpeg.

Evt så kan du tillate flere endelser...

 

Eller så får du poste det som kommer ut av :

echo "La IKKE til noe bilde. \$filetype = {$filetype}, \$bildefil = {$bildefil}";

Lenke til kommentar

Har nå testet med å bytte ut dette:

if ( strstr($filtype, "jpg") )

med denne:

if ( stristr($filtype, "jpg") )

 

uten at dette hjalp nevneverdig! Bildet som jeg tester å laste opp har filendelsen .jpg, så det skal ikke være der problemet ligger.

 

Det eneste som kommer ut av denne koden:

echo "La IKKE til noe bilde. \$filetype = {$filetype}, \$bildefil = {$bildefil}";

er dette her:

La IKKE til noe bilde. $filetype = {}, $bildefil = {}

 

Med andre ord, skriver den ut de to variablene som tomme, ettersom ingenting ble lagt til..

Endret av Gabi Heinze
Lenke til kommentar

Okei.

 

Det er fordi variabelen jeter $filtype og ikke $filetype, samt at du må bytte om på disse to linjene:

if ( strstr($filtype, "jpg") ){ //godtar bare jpeg-filer
 $bildefil = $_FILES['filbane']['name'];

$bildefil er ukjent i else setningen, dersom den blir definert inni if blokken.

 

Ser også nå at $filtype innholder ikke endelsen på filen, men mimetypen, og mimetypen til filer med jpg endelse er image/jpeg.

 

Du må derfor endre fra jpg til jpeg i if setningen din. Så tenker jeg du har løst hele problemet ;)

 

EDIT: Dersom det ikke hadde vært for den lille stavefeilen, så hadde du sikkert funnet ut av dette selv, kanskje ?

 

EDIT2: Dersom du heller vil godta alle bildetyper som gif og png også, så kan du endre fra jpg til image. Da vil vel alle bildetyper bli godtatt (bmp, png, gif, jpeg, tif,

Endret av kakkle
Lenke til kommentar
EDIT2: Dersom du heller vil godta alle bildetyper som gif og png også, så kan du endre fra jpg til image. Da vil vel alle bildetyper bli godtatt (bmp, png, gif, jpeg, tif,

 

if ( stristr($filtype, "jpeg") || stristr($filtype, "gif") || stristr($filtype, "png")){ //godtar bare jpeg, gif, png-filer

Evt bruk image som nevnt. Da blir alle disse godtatt:

image/bmp  bmp

image/cis-cod  cod

image/gif  gif

image/ief  ief

image/jpeg  jpe

image/jpeg  jpeg

image/jpeg  jpg

image/pipeg  jfif

image/tiff  tif

image/tiff  tiff

image/x-cmu-raster  ras

image/x-cmx  cmx

image/x-icon  ico

image/x-portable-anymap  pnm

image/x-portable-bitmap  pbm

image/x-portable-graymap  pgm

image/x-portable-pixmap  ppm

image/x-rgb  rgb

image/x-xbitmap  xbm

image/x-xpixmap  xpm

image/x-xwindowdump  xwd

Endret av kakkle
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...