Avatar billede gulvflaesk Nybegynder
06. september 2010 - 10:29 Der er 11 kommentarer og
1 løsning

Upload billede i allerede eksisterende form

Hej Eksperter,

Jeg har en form som tilføjer et produkt til min database, jeg har et felt som hedder "image", og billednavnet i denne skal jeg selv uploade.

Jeg kunne godt tænke mig at jeg kunne uploade det direkte fra siden.

Formen ser sådan ud:
<form action="insert.php" method="post">
<b>Titel: <input type="text" name="title" /></b><br /><br />
<b>Tekst: <input type="text" name="body" /></b><br /><br />
<b>Pris: <input type="text" name="price" /></b><br /><br />
<b>Billede: <input type="text" name="image" /></b><br /><br />
<input type="submit" value="Tilføj produkt"/>
</form>


Filen insert.php ser sådan ud:
$sql="INSERT INTO products (title, body, price, image)
VALUES
('$_POST[title]','$_POST[body]','$_POST[price]','$_POST[image]')";

if (!mysql_query($sql,$con))
  {
  die('Fejl: ' . mysql_error());
  }
echo "1 product tilføjet";


Håber at nogen kunne have lyst til at hjælpe mig på vej...
Avatar billede public2 Nybegynder
06. september 2010 - 11:42 #1
Forstår jeg det korrekt, at du gerne vil have tilføjet i din form, hvor du indsætter et nyt produkt til din database, også at uploade et billede via formen og uploade billedet i mappen "image"?

Og at det ny tilføjet produkt automatisk refererer det uploadede billede?
Avatar billede gulvflaesk Nybegynder
06. september 2010 - 11:47 #2
Hej public2,

Det er lige præcis det jeg godt kunne tænke mig.

Beklager at jeg ikke fik forklaret det godt nok...
Avatar billede h_thunbo Nybegynder
06. september 2010 - 12:17 #3
Hej gulvflaesk!

Først skal du have ændret din linje:
<b>Billede: <input type="text" name="image" /></b><br /><br />
til:
<b>Billede: <input type="file" name="image" /></b><br /><br />

Dernæst skal du have lavet din insert.php en del om.
Og du skal også have ændret attributterne på den mappe billederne skal gemmes i, som er på din server til 777, det kan du læse mere om i andre spørgsmål her på eksperten, hvis ikke du ved hvordan. Det betyder du kan få lov til at gemme billeder i mappen.

Jeg har et færdigt script du kan få.
Du skal lave to mapper, et til små billeder og et til billederne i original størrelse.
fx: upload/billeder/large/
og upload/billeder/small/

insert.php:

<?
$konfiguration["upload_bibliotek"] = "./upload/billeder/large";

//Her skal filen flyttes fra
$fra = $_FILES["fil"]["tmp_name"];

//Her er vores destination
$type = $_FILES['fil']['type'];

if(strstr($type, "jpeg")) {

$tid = time();

//Her giver vi billedet et andet navn, så der ikke kommer to ens navne...
$nytNavn = $code . "." . "jpeg";

//$til = "/upload/" . $nytNavn;
$til = $konfiguration["upload_bibliotek"] . "/" . $nytNavn;

//Her sker det magiske:
move_uploaded_file($fra, $til);

$thumbbredde = 130;
$thumbhojde = 100;
$oprindeligtbilled = "upload/billeder/large/$nytNavn";
$thumbnailfil = "upload/billeder/small/$nytNavn";
$img = imagecreatefromjpeg($oprindeligtbilled);
$img2 = imagecreatetruecolor($thumbbredde,$thumbhojde);
list($width, $height) = getimagesize($oprindeligtbilled);
imagecopyresampled($img2,$img,0,0,0,0,$thumbbredde,$thumbhojde,$width,$height);
imagejpeg($img2,$thumbnailfil,100);
imagedestroy($img);
imagedestroy($img2);

//indsættelse i MySQL

$title = $_REQUEST['title'];
$body = $_REQUEST['body'];
$price = $_REQUEST['price'];
$dato = date("d-m-Y");
$navn = $nytNavn;

$connection = mysql_connect("$SQLhost","$SQLuser","$SQLpass");
mysql_select_db("$DB", $connection);

// Sætter ind i MySQL database, hvor navnet på mappen er photo
mysql_query("insert into photo (title, body, price, navn, dato) values ('$title', '$body', '$price', '$navn' '$dato')");

} else {
echo "En IKKE gyldig fil. <a href='1.php'>tilbage</a>";
}
header("Location: uploadsiden.php");
?>

Håber det kan løse dit problem...
Avatar billede repox Seniormester
06. september 2010 - 13:50 #4
En ret væsentlig detalje for at ovenstående har mulighed for at virke er at formen skal have en særlig attribut med et specifikt indhold.

Så i stedet for at skrive
<form action="insert.php" method="post">

skal du skrive
<form action="insert.php" method="post" enctype="multipart/form-data">


Uden attributten enctype vil du opleve at dit fil array er tomt.

Ydermere vil jeg anbefale at kigge på imagemagick istedet for det vildt forældede GD library.
Avatar billede public2 Nybegynder
06. september 2010 - 14:21 #5
Nu er der jo kommet et par andre gode råd og tråde, så vil bare lige supplere dem op med at sige, at du kan finde forskellige artikler her på Eksperten omkring uploading af billeder.

Og selve indsættelsen i databasen skal jo sådan set bare ske på samme måde som din tekst, hvor du bare skal indsætte den korrekte sti og måske thumbnail sti, hvis du laver sådan et også, samt størrelse, bredde og diverse informationer. Men det er jo op til dig hvor meget info du vil have med.
Avatar billede gulvflaesk Nybegynder
07. september 2010 - 09:35 #6
Tak for alle Jeres svar. Jeg er virkelig nybegynder. Så er ikke helt med...

Formen:

<form enctype="multipart/form-data" action="insert.php" method="post">
<b>Titel: <input type="text" name="title" /></b><br /><br />
<b>Tekst: <input type="text" name="body" /></b><br /><br />
<b>Pris: <input type="text" name="price" /></b><br /><br />
<b>Billede: <input type="file" name="image" /></b><br /><br />
<input type="submit" value="Tilføj produkt"/>
</form>


Koden fra insert.php:

$konfiguration["upload_bibliotek"] = "./upload";

//Her skal filen flyttes fra
$fra = $_FILES["fil"]["tmp_name"];

//Her er vores destination
$type = $_FILES['fil']['type'];

if(strstr($type, "jpeg")) {

//Her giver vi billedet et andet navn, så der ikke kommer to ens navne...
$nytNavn = $code . "." . "jpeg";

//$til = "/upload/" . $nytNavn;
$til = $konfiguration["upload_bibliotek"] . "/" . $nytNavn;

//Her sker det magiske:
move_uploaded_file($fra, $til);

$thumbbredde = 130;
$thumbhojde = 100;
$oprindeligtbilled = "upload/$nytNavn";
$thumbnailfil = "upload/lille/$nytNavn";
$img = imagecreatefromjpeg($oprindeligtbilled);
$img2 = imagecreatetruecolor($thumbbredde,$thumbhojde);
list($width, $height) = getimagesize($oprindeligtbilled);
imagecopyresampled($img2,$img,0,0,0,0,$thumbbredde,$thumbhojde,$width,$height);
imagejpeg($img2,$thumbnailfil,100);
imagedestroy($img);
imagedestroy($img2);

//indsættelse i MySQL
$title = $_REQUEST['title'];
$body = $_REQUEST['body'];
$price = $_REQUEST['price'];
$image = $nytNavn;

// Sætter ind i MySQL database, hvor navnet på mappen er photo
mysql_query("insert into products (title, body, price, image) values ('$title', '$body', '$price', '$image')");

} else {
echo "En IKKE gyldig fil. <a href='admin.php'>tilbage</a>";
}


Den vender blot tilbage og siger "En IKKE gyldig fil"...

Har prøvet med flere forskellige jpeg-billeder :-(

Hvad kan der være galt?
Avatar billede h_thunbo Nybegynder
07. september 2010 - 13:37 #7
Det er fordi jeg har lavet en fejl i det jeg sendte til dig.

Fra form siden du sender billedet fra har jeg skrevet:
<b>Billede: <input type="file" name="image" /></b><br /><br />

Læg mærke til det der står med kursiv.

Men i insert.php kalder vi den "fil":
//Her skal filen flyttes fra
$fra = $_FILES["fil"]["tmp_name"];

Så jeg vil anbefale du ændre linjen i formen til:
<b>Billede: <input type="file" name="fil" /></b><br /><br />
Avatar billede h_thunbo Nybegynder
07. september 2010 - 13:38 #8
Så burde det virke...
Avatar billede gulvflaesk Nybegynder
08. september 2010 - 10:05 #9
Hej allesammen,

Tak for Jeres hjælp. Jeg fandt en tutorial og har nu fået upload af billedet til at virke.

Så nu ser min insert.php-fil således ud:

define ("MAX_SIZE","10000");

function getExtension($str) {
$i = strrpos($str,".");
if (!$i) { return ""; }
$l = strlen($str) - $i;
$ext = substr($str,$i+1,$l);
return $ext;
}

$errors=0;
if(isset($_POST['Submit']))
{
$image=$_FILES['image']['name'];
if ($image)
{
$filename = stripslashes($_FILES['image']['name']);
$extension = getExtension($filename);
$extension = strtolower($extension);
if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif"))   
{
echo '<h1>Ukendt endelse!</h1>';
$errors=1;
}
else
{
$size=filesize($_FILES['image']['tmp_name']);

if ($size > MAX_SIZE*1024)
{
echo '<h1>Billedet fylder for meget!</h1>';
$errors=1;
}

$image_name=time().'.'.$extension;
$newname="images/".$image_name;
$copied = copy($_FILES['image']['tmp_name'], $newname);
if (!$copied)
{
echo '<h1>Kunne ikke kopiere billedetl!</h1>';
$errors=1;
}}}}

if(isset($_POST['Submit']) && !$errors)
{
echo "<h1>Billedet er uploadet!</h1>";
}

$sql="INSERT INTO products (title, body, price, image)
VALUES
('$_POST[title]','$_POST[body]','$_POST[price]','$_POST[image]')";

if (!mysql_query($sql,$con))
  {
  die('Fejl: ' . mysql_error());
  }
echo "1 produkt tilføjet";


Det eneste jeg mangler her er bare at den ikke skriver fil-navnet til databasen (f.eks. 1283931724.jpg)...

Feltet "image" i min database er tomt :-(
Avatar billede gulvflaesk Nybegynder
09. september 2010 - 11:33 #10
Jeg fandt en løsning. Tak for hjælpen alle sammen...

Vil nogen have point?
Avatar billede h_thunbo Nybegynder
10. september 2010 - 19:31 #11
Nej det er iorden. Men vil du måske ligge den færdige funktionsdygtige kode ud?
Go' weekend :-)
Avatar billede gulvflaesk Nybegynder
11. september 2010 - 00:20 #12
Ok. Selvfølgelig, her er den...

define ("MAX_SIZE","10000");

function getExtension($str) {
$i = strrpos($str,".");
if (!$i) { return ""; }
$l = strlen($str) - $i;
$ext = substr($str,$i+1,$l);
return $ext;
}

$errors=0;
if(isset($_POST['Submit']))
{
$image=$_FILES['image']['name'];
if ($image)
{
$filename = stripslashes($_FILES['image']['name']);
$extension = getExtension($filename);
$extension = strtolower($extension);
if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif"))   
{
echo '<h1>Ukendt endelse!</h1>';
$errors=1;
}
else
{
$size=filesize($_FILES['image']['tmp_name']);

if ($size > MAX_SIZE*1024)
{
echo '<h1>Billedet er for stort!</h1>';
$errors=1;
}

$image_name=time().'.'.$extension;
$newname="images/".$image_name;
$copied = copy($_FILES['image']['tmp_name'], $newname);
if (!$copied)
{
echo '<h1>Kunne ikke kopiere billedet!</h1>';
$errors=1;
}}}}

if(isset($_POST['Submit']) && !$errors)
{
echo "<h1>Billedet er uploadet!</h1>";
}


God weekend til dig også :-)
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