Avatar billede Slettet bruger
02. maj 2010 - 17:35 Der er 24 kommentarer og
1 løsning

Uploader ikke billede? Ny inden for PHP/MySQL

Halløj.

Jeg er helt ny inden for PHP/Mysql, og er også helt ny bruger på Eksperten.dk, så i må lige bære over med mig.

Jeg prøver at få uploadet billede samt billede beskrivelse til min database, og den udskriver "Billedet er blevet uploadet", men det er kun beskrivelsen der kommer ind i databasen. Feltet til billeder forbliver tom?
Mine filer:

upload.php
----------
<form method="POST" enctype="multipart/form-data" action="load.php">

<p>

Billedbeskrivelse:<br />
<textarea name="beskrivelse" cols="30" rows="5" type="text"></textarea><br>

Billede:<br />
<input type="file" name="fil" size="21">

<input type="submit" value="Upload!" name="submit">

</p>

</form>
----------

load.php
----------
<?php

include ('connect.php');

$billede = $_POST[billede];

$beskrivelse = $_POST[beskrivelse];

mysql_query("INSERT INTO billeder (billede,beskrivelse)VALUES('$billede','$beskrivelse')");

echo "Billedet er blevet uploadet";

?>
----------

mysql
----------
CREATE TABLE billeder (
id int not null primary key auto_increment,
billede blob,
beskrivelse text
);
----------

Håber i forstår mit spørgsmål!

Mvh
Kristoffer
Avatar billede agurken Nybegynder
02. maj 2010 - 17:53 #1
Det er måden du henter billedet på.
Du skal gøre sådan her:


$BilledeNavn = $_FILES['billede']['name'];


Så får du billedets navn ind i databasen, men billedet bliver ikke uploadet, for at gøre det skal du også gøre sådan her:



$BilledeTmp = $_FILES['billede']['tmp_name'];
$Destination = "/billeder/".$BilledeNavn; // Så ender billedet i en mappe der hedder billeder.

move_uploaded_file($BilledeTmp, $Destination);



Bare spørg hvis der er noget du ikke forstår :)
Avatar billede agurken Nybegynder
02. maj 2010 - 17:55 #2
Og selvfølgelig


mysql_query("INSERT INTO billeder (billede, beskrivelse)VALUES('$BilledeNavn', '$beskrivelse')");
Avatar billede Slettet bruger
02. maj 2010 - 18:10 #3
Kan jeg ikke lagre billederne i databasen, altså så de ikke skal ligge på ftp? :-) Men tak for det hurtige svar!
Avatar billede agurken Nybegynder
02. maj 2010 - 18:22 #4
Du kan lagre billedets navn i din database, men for at de kan blive vist skal de ligge på serveren (så vidt jeg ved i hvert fald) :)
Avatar billede Slettet bruger
02. maj 2010 - 18:36 #5
Okay, så må jeg gøre det sådan :-) Kan jeg så stadig sortere dem efter id når jeg udskriver? =)
Avatar billede agurken Nybegynder
02. maj 2010 - 18:41 #6
Ja sagtens, den gemmer bare billedet på serveren. Sådan at det kan hentes senere og vises. Hvis du ikke gør det står du bare med navnet.
Avatar billede Slettet bruger
02. maj 2010 - 18:49 #7
Okay, super :) Men ville det så ikke være smartere at lagre billednavnet i et f.eks. tinytext felt, frem for BLOB som jeg gør lige nu?
Avatar billede agurken Nybegynder
02. maj 2010 - 19:05 #8
Jeg har faktisk taget fejl, men kan godt ligge billederne ind i databasen, i stedet for at uploade dem som jeg foreslog. Det andet ved jeg dog ikke hvordan man gør :)
Avatar billede Slettet bruger
02. maj 2010 - 19:06 #9
Edit:
Nu ser min load.php sådan ud:
[code]
<?php

include ('connect.php');


$BilledeNavn = $_FILES['billede']['name'];


$beskrivelse = $_POST[beskrivelse];

$BilledeTmp = $_FILES['billede']['tmp_name'];

$Destination = "/billeder/".$BilledeNavn; // Så ender billedet i en mappe der hedder billeder.

move_uploaded_file($BilledeTmp, $Destination);


mysql_query("INSERT INTO billeder (billede,beskrivelse)VALUES('$BilledeNavn','$beskrivelse')");


echo "Billedet er blevet uploadet";


?>
[/code]
Og jeg har ændret feltet 'billede' til TEXT istedet for BLOB. Men billedenavnet bliver ikke sat ind i feltet?
Avatar billede Slettet bruger
02. maj 2010 - 19:07 #10
Ja okay, der gik det lidt galt. Prøver igen:
----------
<?php

include ('connect.php');


$BilledeNavn = $_FILES['billede']['name'];


$beskrivelse = $_POST[beskrivelse];

$BilledeTmp = $_FILES['billede']['tmp_name'];

$Destination = "/billeder/".$BilledeNavn; // Så ender billedet i en mappe der hedder billeder.

move_uploaded_file($BilledeTmp, $Destination);


mysql_query("INSERT INTO billeder (billede,beskrivelse)VALUES('$BilledeNavn','$beskrivelse')");


echo "Billedet er blevet uploadet";


?>
----------
Avatar billede agurken Nybegynder
02. maj 2010 - 19:18 #11
Virker det?

Ellers så er der en guide til hvordan man kan gemme den i databasen med BLOB: http://www.phpriot.com/articles/images-in-mysql
Avatar billede Slettet bruger
02. maj 2010 - 19:46 #12
Nej, det virker ikke. Jeg har ændret feltet 'billede' til TEXT istedet for BLOB, men der bliver ikke indsat noget billednavn
Avatar billede Slettet bruger
02. maj 2010 - 20:20 #13
Hvis du vil gemme billedet direkte i databasen, så skal du gemme følgende data:
- Navn på billede (gemmes som varchar med passende størrelse)
- Selve billedets data (gemmes som blob)
For at få "billedets data" skal du læse indholdet af det uploadede billede. Dette kan f.eks. gøres med fread() eller file_get_contents()

Håber det kan hjælpe dig lidt på vej :-)
Avatar billede Slettet bruger
03. maj 2010 - 12:32 #14
Jeg har kigget lidt på det med at gemme det i databasen, og jeg synes det ser lidt for kompliceret ud :-) Men problemet med min nuværende fil er at den ikke lægger billederne ind i mappen 'billeder', og navnet på billederne bliver heller ikke lagt ind i databasen. Det eneste jeg får ind, er beskrivelsen?
load.php
----------
<?php

include ('connect.php');

$BilledeNavn = $_FILES['billede']['name'];

$beskrivelse = $_POST[beskrivelse];

$BilledeTmp = $_FILES['billede']['tmp_name'];

$Destination = "/billeder/".$BilledeNavn; // Så ender billedet i en mappe der hedder billeder.

move_uploaded_file($BilledeTmp, $Destination);

mysql_query("INSERT INTO billeder (billede,beskrivelse)VALUES('$BilledeNavn','$beskrivelse')");

echo "Billedet er blevet uploadet";

?>
Avatar billede agurken Nybegynder
03. maj 2010 - 13:14 #15
Ahhh

Det er min fejl, jeg læste forkert i din kode..

<?php

include ('connect.php');

$BilledeNavn = $_FILES['fil']['name'];

$beskrivelse = $_POST[beskrivelse];

$BilledeTmp = $_FILES['fil']['tmp_name'];

$Destination = "/billeder/".$BilledeNavn; // Så ender billedet i en mappe der hedder billeder.

move_uploaded_file($BilledeTmp, $Destination);

mysql_query("INSERT INTO billeder (billede,beskrivelse)VALUES('$BilledeNavn','$beskrivelse')");

echo "Billedet er blevet uploadet";

?>


Prøv dette i stedet for :)
Avatar billede Slettet bruger
03. maj 2010 - 18:02 #16
Nu begynder det at ligne noget :-) Nu får jeg billednavn og beskrivelse ind i databasen - nu mangler jeg blot at få billedet ind på FTP'en :-) Kan ikke rigtig se hvor fejlen ligger, men jeg har jo selvfølgelig heller ikke forstand på det :-D
Avatar billede Slettet bruger
03. maj 2010 - 19:53 #17
Prøv at kom med et eksempel på en fuld sti til et uploadet billede, så som http://ditdomain.dk/billeder/juleaften2009_1.jpg
Det kunne jo være at du prøver og flytte det uploadede billede hen til et sted der ikke findes.
Desuden kræver det at destinations-stedet har de rette rettigheder (chmod).
Avatar billede Slettet bruger
03. maj 2010 - 20:59 #18
http://kristoffer.km-media.dk/billeder/bg.jpg
Denne sti burde fungere hvis scriptet gjorde, da jeg har oprettet mappen 'billeder' på samme destination som filerne. Mappen har CHMOD 777/0777 :-) Men billedet kommer alligevel ikke ind.
Avatar billede Slettet bruger
03. maj 2010 - 21:41 #19
Prøv at udskriv $_FILES['fil']['error'], evt. lav en fuld debug på hele $_FILES arrayet med print_r()-funktionen sådan her:
<?php
printf('<pre>%s</pre>', print_r($_FILES, true));
?>

En liste over $_FILES-errors kan ses på følgende adresse: http://php.net/manual/en/features.file-upload.errors.php
Avatar billede agurken Nybegynder
03. maj 2010 - 22:03 #20
Hmm, kan ikke sådan lige umiddelbart se hvor fejlen skulle ligge henne..

<?php

include ('connect.php');

$BilledeNavn = $_FILES['fil']['name'];

$beskrivelse = $_POST[beskrivelse];

$BilledeTmp = $_FILES['fil']['tmp_name'];

$Destination = "billeder/".$BilledeNavn; // Så ender billedet i en mappe der hedder billeder.

move_uploaded_file($BilledeTmp, $Destination);

mysql_query("INSERT INTO billeder (billede,beskrivelse)VALUES('$BilledeNavn','$beskrivelse')");

echo "Billedet er blevet uploadet";

?>


Er ikke sikker på det vil virke, men det er forsøget værd :)
Avatar billede Slettet bruger
03. maj 2010 - 22:09 #21
Funktionen move_uploaded_file() giver kun en warning hvis der er angivet en valid "fra"-fil, som ikke kunne flyttes.
Derfor kan det være at $_FILES-error kan fortælle os lidt mere om hvad der går galt.

Quote fra PHP.net:
Return Values

If filename is not a valid upload file, then no action will occur, and move_uploaded_file() will return FALSE.

If filename is a valid upload file, but cannot be moved for some reason, no action will occur, and move_uploaded_file() will return FALSE. Additionally, a warning will be issued.
Avatar billede Slettet bruger
03. maj 2010 - 22:33 #22
Jeg er ikke sikker på hvad du mener men:
Array
(
    [fil] => Array
        (
            [name] => banner.png
            [type] => image/png
            [tmp_name] => /tmp/phpNg7FXh
            [error] => 0
            [size] => 50523
        )

)

Ellers, kan du så ikke lige smide det ind i min fil som det skal være, for at jeg kan få udskrevet fejlen? :-)
Avatar billede Slettet bruger
03. maj 2010 - 22:51 #23
Quote fra PHP koden:
[error] => 0

Quote fra PHP.net:
Value: 0; There is no error, the file uploaded with success.


Ifølge PHP blev din fil uploadet med "success".
Så alt jeg ved lige pt. er at selve filen bliver uploadet fint til dit temporary-directory, men den fejler når den skal flytte filen over til "billeder"-mappen, derfor vil mit bedste bud være at du ikke har de rette rettigheder for dit temporary-directory eller "billeder"-directoriet, selvom du allerede har sagt at "billeder" har alle rettigheder.
Ellers er det eneste andet bud jeg kan komme med at prøve og sætte errors til og reporterer alt og se om det giver noget brugbart information. Kan gøres ved at indsætte følgende kode i toppen af dit script:
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
?>
Avatar billede Slettet bruger
04. maj 2010 - 10:46 #24
Jeg havde fuldstændig overset hvad du skrev agurk, men jeg kan se at du i det sidste stykke kode du sendte har fjernet / foran billeder/, og det prøvede jeg også - og så virkede det! :-) I skal have mange tak for hjælpen begge to!
Avatar billede agurken Nybegynder
04. maj 2010 - 18:17 #25
Hehe, hader når det er ét enkelt tegn der er malplaceret, og så virker det hele bare ikke..

Men skulle det være en anden gang ;)
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