Avatar billede farhang Nybegynder
31. august 2006 - 21:16 Der er 18 kommentarer og
1 løsning

Upload af billeder med form/gd/php/mysql!

Hej alle,

Jeg er i gang med at lege med billede uploads via php/mysql, men billedet, som jeg opretter i databasen bliver vist med en firkant med et rød kryds. Er der en, som kan give mig et hint?

<html>
<head>
<title>Upload your pic to our site!</title>
</head>
<body>

<form name="form1" method="post" action="check_image.php"
    enctype="multipart/form-data">

<table border="0" cellpadding="5">
  <tr>
    <td>Image Title or Caption<br>
      <em>Example: You talkin' to me?</em></td>
    <td><input name="image_caption" type="text" id="item_caption" size="55"
          maxlength="255"></td>
  </tr>
  <tr>
    <td>Your Username</td>
    <td><input name="image_username" type="text" id="image_username" size="15"
          maxlength="255"></td>
  </tr>
    <td>Upload Image:</td>
    <td><input name="image_filename" type="file" id="image_filename"></td>
  </tr>
</table>
<br>
<em>Acceptable image formats include: GIF, JPG/JPEG, and PNG.</em>
<p align="center"><input type="submit" name="Submit" value="Submit">
  &nbsp;
  <input type="reset" name="Submit2" value="Clear Form">
</p>
</form>
</body>
</html>
----
<?php
//connect to the database
$link = mysql_connect("localhost", "xxxxx", "xxxxx")
  or die("Could not connect: " . mysql_error());
mysql_select_db("xxxx ", $link)
  or die (mysql_error());

//make variables available
$image_caption = $_POST['image_caption'];
$image_username = $_POST['image_username'];
$image_tempname = $_FILES['image_filename']['name'];
$today = date("Y-m-d");

//upload image and check for image type
//make sure to change your path to match your images directory
$ImageDir ="/var/www/html/phptest/images/";
$ImageName = $ImageDir . $image_tempname;

if (move_uploaded_file($_FILES['image_filename']['tmp_name'],
                      $ImageName)) {

  //get info about the image being uploaded
  list($width, $height, $type, $attr) = getimagesize($ImageName);

  switch ($type) {
    case 1:
      $ext = ".gif";
      break;
    case 2:
      $ext = ".jpg";
      break;
    case 3:
      $ext = ".png";
      break;
    default:
      echo "Sorry, but the file you uploaded was not a GIF, JPG, or " .
          "PNG file.<br>";
      echo "Please hit your browser's 'back' button and try again.";
  }

  //insert info into image table

  $insert = "INSERT INTO images
            (image_caption, image_username, image_date)
            VALUES
            ('$image_caption', '$image_username', '$today')";
  $insertresults = mysql_query($insert)
    or die(mysql_error());

  $lastpicid = mysql_insert_id();

  $newfilename = $ImageDir . $lastpicid . $ext;

  rename($ImageName, $newfilename);

}

?>

<html>
<head>
<title>Here is your pic!</title>
</head>
<body>
<h1>So how does it feel to be famous?</h1><br><br>
<p>Here is the picture you just uploaded to our servers:</p>
<img src="/images/<?php echo $lastpicid . $ext; ?>" align="left">
<strong><?php echo $image_name; ?></strong><br>
This image is a <?php echo $ext; ?> image.<br>
It is <?php echo $width; ?> pixels wide
and <?php echo $height; ?> pixels high.<br>
It was uploaded on <?php echo $today; ?>.
</body>
</html>
Avatar billede mcgoat Nybegynder
31. august 2006 - 21:27 #1
har du en side man kan teste det på?
Avatar billede farhang Nybegynder
31. august 2006 - 21:40 #2
Avatar billede lassemelbye Nybegynder
31. august 2006 - 21:54 #3
Hej.
I den nederste del i <img src... Har du et " tegn som er unødvendigt.
Og jeg tvivler på at du skal have punktum med i din switch sætning.
f. eks. $ext = "gif"; og husk at billede typen også kan stå med storebogstaver. :-)
Avatar billede mcgoat Nybegynder
31. august 2006 - 21:55 #4
kan du se på din server om den har uploadet billederne?
Avatar billede lassemelbye Nybegynder
31. august 2006 - 21:56 #5
Hov.Skrev lige forkert:

Hej.
I den nederste del i <img src... Har du et / tegn som er unødvendigt og bør fjernes.
Og jeg tvivler på at du skal have punktum med i din switch sætning.
f. eks. $ext = "gif"; og husk at billede typen også kan stå med storebogstaver. :-)
Avatar billede mcgoat Nybegynder
31. august 2006 - 21:57 #6
lasse. hvad snakker du om?? den nederste <img src er da helt ok. den returnerer f.eks:
<img src="/images/23.jpg" align="left">
Avatar billede lassemelbye Nybegynder
31. august 2006 - 21:59 #7
Ej.. Bare drop det svar :)
Avatar billede mcgoat Nybegynder
31. august 2006 - 22:00 #8
men.. jeg kan se.
ImageDir ="/var/www/html/phptest/images/";

så vil den uploade billeder til: http://www.designunltd.dk/phptest/images/

men til <img src> nederst linker til: http://www.designunltd.dk/images/

men hvis jeg prøver at accesse http://www.designunltd.dk/phptest/images/22.jpg f.eks får jeg af vide jeg ikke har tilladelse til at se denne mappe
Avatar billede mcgoat Nybegynder
31. august 2006 - 22:03 #9
så lige nu ser det ud til du skal ændre.
<img src="/images/<?php echo $lastpicid . $ext; ?>" align="left">
til
<img src="../images/<?php echo $lastpicid . $ext; ?>" align="left">

og så sætte tilladelser til den mappe?
Avatar billede farhang Nybegynder
31. august 2006 - 22:48 #10
Hej igen,

Jeg har rettet efter din vejledning, men det virker stadig ikke. Billede-informationerne bliver oprettet og filerne oploades i den rigtig mappe. Men billedet bliver ikke vist i browseren. Mystisk, hvad kan det mon skyldes?
Avatar billede fcknet Nybegynder
01. september 2006 - 00:21 #11
Det ser ikke ud til at billedet bliver chmoddet rigtigt... Prøv at kigge på www.php.net/chmod
Avatar billede mcgoat Nybegynder
01. september 2006 - 09:07 #12
ja, du skal nok køre en:
chmod("/sti/til/fil", 0755);
på den fil der bliver uploadet
Avatar billede farhang Nybegynder
01. september 2006 - 12:24 #13
Hej,

Hvordan kører man en chmod automatisk? Hvordan finder man ud, hvilket tal man skal bruge?

<?php
chmod("/sti/til/fil", 755);  // decimal; sikkert forkert 
chmod("/sti/til/fil", "u+rwx,go+rx"); // string; forkert     
chmod("/sti/til/fil", 0755);  // octal; den korrekte værdi
?>
----
<?php
// Gør en fil skrivbar og læsbar for ejeren, ingen andre kan intet gøre
chmod("/sti/til/fil", 0600);

// Læs og skriveadgang for ejeren, alle andre kan læse
chmod("/sti/til/fil", 0644);

// Alle rettigheder til ejeren, andre kan eksekvere og læse
chmod("/sti/til/fil", 0755);

// Alle rettigheder til ejeren, hans gruppe kan eksekvere og læse, resten kan intet
chmod("/somedir/somefile", 0750);
?>
Avatar billede fcknet Nybegynder
01. september 2006 - 13:49 #14
Automatisk?
Du kører den bare efter du har uploadet filen...
Avatar billede farhang Nybegynder
01. september 2006 - 17:05 #15
Skal det se sådan ud:

<?php
//connect to the database
$link = mysql_connect("xxxxx", "xxxxx", "xxxxx")
  or die("Could not connect: " . mysql_error());
mysql_select_db("xxxxx", $link)
  or die (mysql_error());

//make variables available
$image_caption = $_POST['image_caption'];
$image_username = $_POST['image_username'];
$image_tempname = $_FILES['image_filename']['name'];
$today = date("Y-m-d");

//upload image and check for image type
//make sure to change your path to match your images directory
$ImageDir ="/var/www/html/phptest/images/";
$ImageName = $ImageDir . $image_tempname;

if (move_uploaded_file($_FILES['image_filename']['tmp_name'],
                      $ImageName)) {

  //get info about the image being uploaded
  list($width, $height, $type, $attr) = getimagesize($ImageName);

  switch ($type) {
    case 1:
      $ext = ".gif";
      break;
    case 2:
      $ext = ".jpg";
      break;
    case 3:
      $ext = ".png";
      break;
    default:
      echo "Sorry, but the file you uploaded was not a GIF, JPG, or " .
          "PNG file.<br>";
      echo "Please hit your browser's 'back' button and try again.";
  }

  //insert info into image table

  $insert = "INSERT INTO images
            (image_caption, image_username, image_date)
            VALUES
            ('$image_caption', '$image_username', '$today')";
  $insertresults = mysql_query($insert)
    or die(mysql_error());

  $lastpicid = mysql_insert_id();

  $newfilename = $ImageDir . $lastpicid . $ext;

  rename($ImageName, $newfilename);

}
chmod("/var/www/html/phptest/images/", 0755);
?>
<html>
<head>
<title>Here is your pic!</title>
</head>
<body>
<h1>So how does it feel to be famous?</h1><br><br>
<p>Here is the picture you just uploaded to our servers:</p>
<img src="/var/www/html/phptest/images/<?php echo $lastpicid . $ext; ?>" align="left">
<strong><?php echo $image_name; ?></strong><br>
This image is a <?php echo $ext; ?> image.<br>
It is <?php echo $width; ?> pixels wide
and <?php echo $height; ?> pixels high.<br>
It was uploaded on <?php echo $today; ?>.
</body>
</html>
Avatar billede Slettet bruger
01. september 2006 - 20:38 #16
Nej, for det du gør der er, at chmodde MAPPEN og ikke FILEN... Det er FILEN der ikke må læses.
Gør sådan her:
chmod($ImageName, 0755);
Avatar billede farhang Nybegynder
01. september 2006 - 20:50 #17
Hej Philip,

Hvor skal jeg placerer chmod($ImageName, 0755); henne, så det virker?
Avatar billede Slettet bruger
02. september 2006 - 00:08 #18
Sæt den over følgende linjer:
  //get info about the image being uploaded
  list($width, $height, $type, $attr) = getimagesize($ImageName);
Avatar billede farhang Nybegynder
02. september 2006 - 11:29 #19
Tusind tak for hjælpen philip. Nu kan jeg komme videre med min php-læsning.
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