Avatar billede kack Nybegynder
25. marts 2007 - 22:47 Der er 19 kommentarer og
1 løsning

Kig min kode igennem

Hej alle sammen. Jeg er i gang med at lave et system så en bruger kan uploade et billede til sin profil.

Men kan ikke helt få den kode, jeg har lånt fra et andet emne her på siden. Og så har jeg lavet lidt om i den.

Her er min kode:

<h2>Galleri</h2>
Dette er dit personlige galleri - som andre folk kan kigge i.
<?php
//Sender billedet ind
$limitedext = array(".jpg",".jpeg",".gif",".bmp");
$sizelimit = "ja";
$sizebytes = "20000";

$tid = md5(date('c'));

if($_POST['skriv']=="doit"){
if ($_FILES['file'] != "") {
  $ext=strrchr($_FILES['file']['name'],'.');
  $ext=strtolower($ext);

$filnavnet = $_SERVER["DOCUMENT_ROOT"] . "/regnvejr/community/billeder/"$tid.$ext;



if (!in_array($ext,$limitedext) ) {
  die("Filen er en forkert filtype. De tiladte filtyper er bmp, gif og jpg/jpeg.");
}

if($ext==".bmp"){
if (($_FILES['file']['size'] > $sizebytes)) {
  die("Billedet er for stort. En fil må højest fylde 200 kb.");
}
@copy($_FILES['file']['tmp_name'], $filnavnet) or die("Filen kunne ikke kopieres til serveren ".$filnavnet);
}else{


@copy($_FILES['file']['tmp_name'], $filnavnet) or die("Filen kunne ikke kopieres til serveren ".$filnavnet);
    #-+ Read the source image
    $src_img = ImageCreateFromJPEG($filnavnet);

    #Vælg bredden
    $tn_w = "150";
    $tn_h = "200";

    #Hent billedets bredde og højde
    $imginfo = getimagesize($filnavnet);
    $org_w= $imginfo[0];
    $org_h = $imginfo[1];

    #Beregn højden i forhold til bredden
    $tn_h = floor($tn_w * $org_h / $org_w);

    #Sæt det nye billede
    $dst_img = imagecreatetruecolor($tn_w,$tn_h);

    #Ændre det!
    ImageCopyResampled($dst_img, $src_img, 0, 0, 0, 0, $tn_w, $tn_h, $org_w, $org_h);

    #Gem det!
    ImageJPEG($dst_img, $filnavnet);

    #slet "midlertidige" filer fra serveren.
    imagedestroy($dst_img);
}
} else {
  die("Husk at vælge et Billede");
}
echo "<p />";
echo "Dit billede blev uploadet";
mysql_query("INSERT INTO dr_galleri (brugernavn, billede, dag, maaned, aar) VALUES('$brugernavn','$tid.$ext','$dag','$maaned', '$aar')") or die(mysql_error());
}else{



Når man prøver at vise siden. Kommer der bare en blank side.
Avatar billede simsevu Juniormester
26. marts 2007 - 10:08 #1
du afslutter en else{
åben.. du skal huske at lukke det igen?..
eller er det  bare mig
Avatar billede kack Nybegynder
26. marts 2007 - 11:11 #2
Det er fordi det jeg har vist der ikk er hele min kode.
Kan skrive hele koden når jeg kommer hjem.
Avatar billede kack Nybegynder
26. marts 2007 - 15:53 #3
Dette er hele koden. Før ville jeg ikke poste den hele, fordi det måske ville blive for meget på en side?

<?php
//Sender billedet ind
$limitedext = array(".jpg",".jpeg",".gif",".bmp");
$sizelimit = "ja";
$sizebytes = "20000";

$tid = md5(date('c'));

if($_POST['skriv']=="doit"){
if ($_FILES['file'] != "") {
  $ext=strrchr($_FILES['file']['name'],'.');
  $ext=strtolower($ext);

$filnavnet = $_SERVER["DOCUMENT_ROOT"] . "/regnvejr/community/billeder/"$tid.$ext;



if (!in_array($ext,$limitedext) ) {
  die("Filen er en forkert filtype. De tiladte filtyper er bmp, gif og jpg/jpeg.");
}

if($ext==".bmp"){
if (($_FILES['file']['size'] > $sizebytes)) {
  die("Billedet er for stort. En fil må højest fylde 200 kb.");
}
@copy($_FILES['file']['tmp_name'], $filnavnet) or die("Filen kunne ikke kopieres til serveren ".$filnavnet);
}else{


@copy($_FILES['file']['tmp_name'], $filnavnet) or die("Filen kunne ikke kopieres til serveren ".$filnavnet);
    #-+ Read the source image
    $src_img = ImageCreateFromJPEG($filnavnet);

    #Vælg bredden
    $tn_w = "150";
    $tn_h = "200";

    #Hent billedets bredde og højde
    $imginfo = getimagesize($filnavnet);
    $org_w= $imginfo[0];
    $org_h = $imginfo[1];

    #Beregn højden i forhold til bredden
    $tn_h = floor($tn_w * $org_h / $org_w);

    #Sæt det nye billede
    $dst_img = imagecreatetruecolor($tn_w,$tn_h);

    #Ændre det!
    ImageCopyResampled($dst_img, $src_img, 0, 0, 0, 0, $tn_w, $tn_h, $org_w, $org_h);

    #Gem det!
    ImageJPEG($dst_img, $filnavnet);

    #slet "midlertidige" filer fra serveren.
    imagedestroy($dst_img);
}
} else {
  die("Husk at vælge et Billede");
}
echo "<p />";
echo "Dit billede blev uploadet";
mysql_query("INSERT INTO dr_galleri (brugernavn, billede, dag, maaned, aar) VALUES('$brugernavn','$tid.$ext','$dag','$maaned', '$aar')") or die(mysql_error());
}else{


      //Tjekker om brugeren er logget ind og viser form
      if ( isset( $_SESSION['bruger'] ) )
      {
      $query = mysql_query("SELECT * FROM dr_brugere WHERE brugernavn LIKE '$bruger' ") or die(mysql_error());
      $row = mysql_fetch_array($query);

      echo "
      <form method='POST' action='?side=profil/galleri.php&menu=6' enctype='multipart/form-data'>
      Vælg et billede:<br>
      <input type='hidden' name='skriv' value='doit' size='30'>
      <input type='file' name='file' size='30'>
      <button name='submit' type='submit' value='Upload'>
      Upload
      </button>
      </form>";
      }
      else
      {
      echo "
      <b>Du skal have en bruger på siden for at kunne se denne side. Opret en bruger <a href='?side=opret.php&menu6'>her</a></b>";
      }
}
?>
Avatar billede kack Nybegynder
26. marts 2007 - 19:01 #4
Ingen der kan hjælpe?
Avatar billede stokke Nybegynder
27. marts 2007 - 23:32 #5
Her er en rettelse, som jeg lige faldt over - i linien:

$filnavnet = $_SERVER["DOCUMENT_ROOT"] . "/regnvejr/community/billeder/"$tid.$ext;

mangler . før $tid

Prøv det
Avatar billede dkfire Nybegynder
28. marts 2007 - 00:00 #6
Hvis dit webhotel er one.com så husk at slå error beskeder til. Det kan du gøre fra kontrolpanelet. Jeg mener at der er slået fra pr default, det er sikkert en af grundene til at du kun få en blank side.
Avatar billede kack Nybegynder
28. marts 2007 - 13:55 #7
Det virker nu :D

Det eneste problem er at den indsætter et punktum for meget i navnet på billedet.

Hvor der skulle have stået: 81f06999eaefefa8d8a13c1c659b00bd.jpg

Står der istedet: 81f06999eaefefa8d8a13c1c659b00bd..jpg

Hvordan kan jeg løse det?

Koden er: $filnavnet = $_SERVER["DOCUMENT_ROOT"] . "/regnvejr/community/billeder/".$tid.$ext;
Avatar billede sw_red_6 Nybegynder
28. marts 2007 - 14:03 #8
hvad står der i $ext?
Avatar billede kack Nybegynder
28. marts 2007 - 14:04 #9
$ext=strrchr($_FILES['file']['name'],'.');
  $ext=strtolower($ext);
Avatar billede stokke Nybegynder
28. marts 2007 - 15:53 #10
Prøv med:

$ext=substr(strrchr($_FILES['file']['name'],'.'),1);

i stedet for:

$ext=strrchr($_FILES['file']['name'],'.');
Avatar billede kack Nybegynder
28. marts 2007 - 15:59 #11
Nu står der: Filen er en forkert filtype. De tiladte filtyper er bmp, gif og jpg/jpeg.

Lige meget hvilken filtype man sender ind. Også selvom filtypen er en af overnævnte filtyper.
Avatar billede sw_red_6 Nybegynder
28. marts 2007 - 16:40 #12
Hvad er indholdet af $ext?
Hvad er indholdet af $tid?

evt. prøv at lave en echo på de to for at se hvor det ekstra . har sneget sig ind der et sted..
Avatar billede kack Nybegynder
28. marts 2007 - 17:01 #13
$tid = $tid = md5(date('U')); og der står så: 62cbd8e835ecab06ea09d514de533b3f når man laver en echo på det.

$ext = $ext=substr(strrchr($_FILES['file']['name'],'.'),1);
  $ext=strtolower($ext);

og der står: jpg - når man laver en echo på det. Der er ikke nogle punktumer i nogle af delene.
Avatar billede stokke Nybegynder
28. marts 2007 - 19:03 #14
Det er fordi

$ext=substr(strrchr($_FILES['file']['name'],'.'),1);

fjerner punktummet fra filtypen. Hvor $ext før var f.eks. ".jpg", så er den nu "jpg".

Det kræver selvfølgelig at du også ændrer på det array, som du bruger til filtype check, så linien:

$limitedext = array(".jpg",".jpeg",".gif",".bmp");

Skal ændres til:

$limitedext = array("jpg","jpeg","gif","bmp");

Så burde du være kørende...
Avatar billede stokke Nybegynder
28. marts 2007 - 19:34 #15
Når jeg kigger dit script igennem undrer jeg mig også over hvor det ekstra . kom fra...
Avatar billede kack Nybegynder
28. marts 2007 - 22:08 #16
Hmm. Det her er MEGET underligt.

Nu bliver der kun sat et . ind i databasen. Men nu bliver der slet ikke sta nogle . ind i filnavnet som ryger ind i mappen "billeder".

Så der ligger bare en fil der hedder: 1d60f738135b22864ffe66a958106914jpg

Forstår det bare ikke.
Avatar billede kack Nybegynder
28. marts 2007 - 22:09 #17
Min kode ser nu sådan ud:

<?php
//Sender billedet ind
$limitedext = array("jpg","jpeg","gif","bmp");
$sizelimit = "ja";
$sizebytes = "20000";

$tid = md5(date('U'));

if($_POST['skriv']=="doit"){
if ($_FILES['file'] != "") {
  $ext=substr(strrchr($_FILES['file']['name'],'.'),1);
  $ext=strtolower($ext);
echo "$tid<br>$ext";
$filnavnet = $_SERVER["DOCUMENT_ROOT"] . "/regnvejr/community/billeder/".$tid.$ext;



if (!in_array($ext,$limitedext) ) {
  die("Filen er en forkert filtype. De tiladte filtyper er bmp, gif og jpg/jpeg.");
}

if($ext==".bmp"){
if (($_FILES['file']['size'] > $sizebytes)) {
  die("Billedet er for stort. En fil må højest fylde 200 kb.");
}
@copy($_FILES['file']['tmp_name'], $filnavnet) or die("Filen kunne ikke kopieres til serveren ".$filnavnet);
}else{


@copy($_FILES['file']['tmp_name'], $filnavnet) or die("Filen kunne ikke kopieres til serveren ".$filnavnet);
    #-+ Read the source image
    $src_img = ImageCreateFromJPEG($filnavnet);

    #Vælg bredden
    $tn_w = "150";
    $tn_h = "200";

    #Hent billedets bredde og højde
    $imginfo = getimagesize($filnavnet);
    $org_w= $imginfo[0];
    $org_h = $imginfo[1];

    #Beregn højden i forhold til bredden
    $tn_h = floor($tn_w * $org_h / $org_w);

    #Sæt det nye billede
    $dst_img = imagecreatetruecolor($tn_w,$tn_h);

    #Ændre det!
    ImageCopyResampled($dst_img, $src_img, 0, 0, 0, 0, $tn_w, $tn_h, $org_w, $org_h);

    #Gem det!
    ImageJPEG($dst_img, $filnavnet);

    #slet "midlertidige" filer fra serveren.
    imagedestroy($dst_img);
}
} else {
  die("Husk at vælge et Billede");
}
echo "<p />";
echo "Dit billede blev uploadet";
mysql_query("INSERT INTO dr_galleri (brugernavn, billede, dag, maaned, aar) VALUES('".$_SESSION['bruger']."','$tid.$ext','$dag','$maaned', '$aar')") or die(mysql_error());
}else{


      //Tjekker om brugeren er logget ind og viser form
      if ( isset( $_SESSION['bruger'] ) )
      {
      $query = mysql_query("SELECT * FROM dr_brugere WHERE brugernavn LIKE '$bruger' ") or die(mysql_error());
      $row = mysql_fetch_array($query);

      echo "
      <form method='POST' action='?side=profil/galleri.php&menu=6' enctype='multipart/form-data'>
      Vælg et billede:<br>
      <input type='hidden' name='skriv' value='doit' size='30'>
      <input type='file' name='file' size='30'>
      <button name='submit' type='submit' value='Upload'>
      Upload
      </button>
      </form>";
      }
      else
      {
      echo "
      <b>Du skal have en bruger på siden for at kunne se denne side. Opret en bruger <a href='?side=opret.php&menu6'>her</a></b>";
      }
}
?>
Avatar billede sw_red_6 Nybegynder
29. marts 2007 - 09:05 #18
grunden til det ekstra . du havde før, tror jeg ligger i din query:
mysql_query("INSERT INTO dr_galleri (brugernavn, billede, dag, maaned, aar) VALUES('".$_SESSION['bruger']."','$tid.$ext','$dag','$maaned', '$aar')") or die(mysql_error());

'$tid.$ext' <- er det ikke forkert?

Bare for at kunne udelukke den fejl kan du så ikke prøve at lave en variabel med $tid.$ext som det eneste indhold? og selvfølgelig bruge den i din query?
Avatar billede kack Nybegynder
29. marts 2007 - 14:24 #19
Nu virker systemet :D

Det var det der var galt, sw_red_6. Siger mange tak til jer alle sammen. Hvis I alle sammen smider et svar, vil det være cool.

TAK FOR HJÆLPEN!
Avatar billede sw_red_6 Nybegynder
10. april 2007 - 13:28 #20
selv tak.. der er ofte de mindste ting der nemmest bliver overset ;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