/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Vedhæft billede i <form>
Fra : Ohlzen


Dato : 11-09-04 11:26

Hej NG

Jeg er stadig så ny udi php, at jeg end ikke vil kalde mig
"Rookie", men det kommer nok snart

Jeg har en php-formular, som fungerer upåklageligt, men vil nu
ha' tilføjet en mulighed for, at brugeren kan vedlægge et
billede. Billedet skal ikke "afleveres" i en database, men sendes
som vedhæftet fil!

Mine koder ser ud som følger:

<?
if((isset($_POST['navn'])) && (isset($_POST['email'])) &&
(isset($_POST['emne'])) && (isset($_POST['besked']))){
mail("jean@fedtmules.dk", $_POST['emne'] ,
"Navn: ".$_POST['navn']."\r\n".
"E-mail: ".$_POST['email']."\r\n".
"Brugernavn: ".$_POST['user']."\r\n\r\n".

"- har netop oprettet en auktion. Teksten lyder som
følger:"."\r\n".
$_POST['auktionstekst']."\r\n\r\n".
"- mindsteprisen er sat til kr. ".$_POST['pris']." som auktionen
så skal starte på"."\r\n\r\n".
"Følgende billede skal med på auktionen:"."\r\n".
$_FILES['file']['name'].
"\nI øvrigt har ".$_POST['navn']." skrevet følgende besked:
".$_POST['besked']) ;

mail($_POST['email'], $_POST['emne2'] ,
"Hej ".$_POST['navn']."\r\n\r\n".

"Du har netop oprettet en auktion. Teksten lyder som
følger:"."\r\n\r\n".
$_POST['auktionstekst']."\r\n\r\n".
"- og du har sat mindsteprisen til at være kr. ".$_POST['pris']."
som din auktion så starter på"."\r\n\r\n".
"Vi har modtaget følgende billede til auktionen:"."\r\n".
$_FILES['file']['name'].
"\nI øvrigt har vi modtaget følgende besked: ".$_POST['besked'])
;

echo "Tillykke ".$_POST['navn']."!<br>Du er nu tilføjet en ny
auktion.<p>Din auktion har følgende data:<p>Startpris:
".$_POST['pris']."<p>Beskrivelse:
".$_POST['auktionstekst']."<p>Billede:
".$_FILES['file']['name']."<p><p>Held og lykke med
auktionerne<br>ønskes du af Auktionarius.";

} else {
?>
<form method=post action="<? echo $_SERVER['PHP_SELF']; ?>">

<table border="0" width="100%" cellspacing="0"
cellpadding="2">
<tr>
<td width="100%" colspan="2"></td>
</tr>
<tr>
<td width="32%">&nbsp;</td>
<td width="68%">&nbsp;<input type="hidden"
name="emne" value="Ny auktion"><input type="hidden" name="emne2"
value="Ny auktion tilføjet"></td>
</tr>
<tr>
<td width="32%" align="right" valign="top">Navn:</td>
<td width="68%" valign="top" align="left"><input
type="text" name="navn" size="41">
</td>
</tr>
<tr>
<td width="32%" align="right"
valign="top">E-mail:</td>
<td width="68%" valign="top" align="left"><input
type="text" name="email" size="41">
</td>
</tr>
<tr>
<td width="32%" align="right"
valign="top">Brugernavn:</td>
<td width="68%" align="left" valign="top"><input
type="text" name="user" size="41"></td>
</tr>
<tr>
<td width="32%" align="right" valign="top">Vedhæft
billede</td>
<td width="68%" valign="top" align="left"><input
type="file" name="filen" size="41"></td>
</tr>
<tr>
<td width="32%" align="right"
valign="top">Beskrivelse:</td>
<td width="68%" valign="top" align="left"><textarea
rows="12" name="auktionstekst" cols="40"></textarea></td>
</tr>
<tr>
<td width="32%" align="right" valign="top">Varens
mindstepris:</td>
<td width="68%" align="left" valign="top"><input
type="text" name="pris" size="41"></td>
</tr>
<tr>
<td width="32%" align="right" valign="top">Eventuel
besked:</td>
<td width="68%" valign="top" align="left"><textarea
rows="8" name="besked" cols="40"></textarea></td>
</tr>
<tr>
<td width="32%" align="right" valign="top"></td>
<td width="68%" valign="top" align="left"><input
type="submit" value=" Send " name="B1">
&nbsp;<input type="reset" value=" Ryd "
name="B2"></td>
</tr>
<tr>
<td width="100%" align="left" valign="top"
colspan="2">&nbsp;</td>
</tr>
</table>
</form>
<?
}
?>

Ovenstående resulterer i præcis det jeg ønsker - lige på nær det
med billedet: Der er INTET billede (visuelt eller som en
tekststreng), hverken i min e-mail, brugerens e-mail eller på
"echo"-siden.

Jeg håber der er en venlig sjæl, som ser løsningen meget
tydeligere end jeg, for jeg kan sandelig ikke få øje på problemet


\Ohlzen

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Jacob Atzen (11-09-2004)
Kommentar
Fra : Jacob Atzen


Dato : 11-09-04 12:41

Ohlzen <jean@fedtmules.dk> writes:

> Mine koder ser ud som følger:

[snip > 100 linier kode]

> Jeg håber der er en venlig sjæl, som ser løsningen meget
> tydeligere end jeg, for jeg kan sandelig ikke få øje på problemet
>

Prøv at lave det mindst mulige eksempel på det du ønsker at gøre og se
om du kan få det til at virke. Altså: Fjern _alt_ andet end lige
netop det der giver dig problemer - at sende en fil fra en form. Dit
problem ligger i 10% af din kode, fjern de resterende 90%, og du (og
vi andre) vil få meget nemmere ved at gennemskue hvad problemet er.

--
Med venlig hilsen
- Jacob Atzen

Ohlzen (11-09-2004)
Kommentar
Fra : Ohlzen


Dato : 11-09-04 12:58

Jacob skrev:

> Prøv at lave det mindst mulige eksempel på det du ønsker at gøre og se
> om du kan få det til at virke. Altså: Fjern _alt_ andet end lige
> netop det der giver dig problemer - at sende en fil fra en form. Dit
> problem ligger i 10% af din kode, fjern de resterende 90%, og du (og
> vi andre) vil få meget nemmere ved at gennemskue hvad problemet er.

Det har du jo selvfølgelig ret i (men jeg kan altså stadig ikke se hvad
der går galt), så her er sagens kerne:

<?
mail("jean@fedtmules.dk",

"Følgende billede er sendt"."\r\n".
$_FILES['file']['filen'].) ;

echo "Billede: ".$_FILES['file']['filen']. ;
?>
<form method=post action="<? echo $_SERVER['PHP_SELF']; ?>">

<table border="0" width="100%" cellspacing="0" cellpadding="2">
<tr>
<td width="32%" align="right" valign="top">Vedhæft
billede</td>
<td width="68%" align="left" valign="top"><input type="file"
name="filen" size="41"></td>
</tr>
</table>
</form>
<?
}
?>

Håber stadig på mirakler...

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

JMo. (11-09-2004)
Kommentar
Fra : JMo.


Dato : 11-09-04 13:11

Ohlzen wrote:

> Jacob skrev:
>
>> Prøv at lave det mindst mulige eksempel på det du ønsker at gøre og se
>> om du kan få det til at virke. Altså: Fjern _alt_ andet end lige
>> netop det der giver dig problemer - at sende en fil fra en form. Dit
>> problem ligger i 10% af din kode, fjern de resterende 90%, og du (og
>> vi andre) vil få meget nemmere ved at gennemskue hvad problemet er.
>
> Det har du jo selvfølgelig ret i (men jeg kan altså stadig ikke se hvad
> der går galt), så her er sagens kerne:

<snip kode>

Prøv at kigge på:

http://dk.php.net/manual/en/features.file-upload.php :

"$_FILES['userfile']['tmp_name']
The temporary filename of the file in which the uploaded file was stored on
the server"

og

http://dk.php.net/manual/en/function.file-get-contents.php

samt

http://dk.php.net/manual/en/function.mail.php :

"Email with attachments and special types of content can be sent using this
function. This is accomplished via MIME-encoding - for more information,
see this Zend article or the PEAR Mime Classes"


Ohlzen (13-09-2004)
Kommentar
Fra : Ohlzen


Dato : 13-09-04 04:09

Jacob skrev:
> >
>
> Prøv at kigge på:
>
> http://dk.php.net/manual/en/features.file-upload.php :
>
> og
>
> http://dk.php.net/manual/en/function.file-get-contents.php
>
> samt
>
> http://dk.php.net/manual/en/function.mail.php :
>
>
Jeg har nu kigget alle 3 links igennem, og med mine "sløje" kundskaber udi
PHP, syntes jeg at kunne læse mig frem til, at alle tre fortæller om, hvordan
man sender en vedhæftet fil ind i database... Jeg ønsker nu blot, at den
vedhæftede fil, bliver sendt som en e-mail, sammen med det øvrige indtastede?

\Ohlzen

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Andreas M. (11-09-2004)
Kommentar
Fra : Andreas M.


Dato : 11-09-04 15:05

Ohlzen wrote:
> <form method=post action="<? echo $_SERVER['PHP_SELF']; ?>">

Prøv med
<form method=post enctype='multipart/form-data' action="<? echo
$_SERVER['PHP_SELF']; ?>">


--
Andreas Møller

Ohlzen (13-09-2004)
Kommentar
Fra : Ohlzen


Dato : 13-09-04 04:11

Andreas M. skrev:
>
> Prøv med
> <form method=post enctype='multipart/form-data' action="<? echo
> $_SERVER['PHP_SELF']; ?>">
>
>
Tak for hjælpen - men det gjorde hverken fra eller til?

\Ohlzen

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Anders K. Madsen (13-09-2004)
Kommentar
Fra : Anders K. Madsen


Dato : 13-09-04 19:48



Ohlzen (14-09-2004)
Kommentar
Fra : Ohlzen


Dato : 14-09-04 01:59

Anders K. Madsen skrev:
>
> Ok, her er et break-down af hvad du skal gøre for at få det til at
> virke...
>
> 1. Brugeren skal vælge billedet.
>    // Det skulle være i orden med ovenstående.

Jep - ingen problemer!
>
> 2. Billedet skal uploades til et dir på serveren.

Nix - billedet skal blot sendes som vedhæftet fil i en e-mail. Det
skal IKKE afleveres på nogen server!

\Ohlzen

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Anders K. Madsen (14-09-2004)
Kommentar
Fra : Anders K. Madsen


Dato : 14-09-04 02:29



Ohlzen (14-09-2004)
Kommentar
Fra : Ohlzen


Dato : 14-09-04 04:20

Anders K. Madsen skrev:
>
>
> Well, så vil jeg da ønske dig held og lykke med at afsende en mail
fra
> serveren med et attachement fra en klient-maskine uden at uploade
> billedet eller bruge JavaScript...
>
> Mvh.
>    Madsen
>
>
Som sagt er jeg ikke den skarpeste kniv på bordet, hvad angår PHP...

Når du skriver at billedefilen skal sendes via serveren, troede jeg du
mente, at billedet skulle uploades til selve serveren - og blive dér.

Som sagt prøver jeg følgende:

<?
if((isset($_POST['navn'])) && (isset($_POST['email'])) &&
(isset($_POST['emne'])) && (isset($_POST['besked']))){
mail("jean@fedtmules.dk", $_POST['emne'] ,
"Navn: ".$_POST['navn']."\r\n".
"E-mail: ".$_POST['email']."\r\n".
"Brugernavn: ".$_POST['user']."\r\n\r\n".

"- har netop oprettet en auktion."."\r\n\r\n".
"Kategorien skal være:"."\r\n".
$_POST['kategori']."\r\n\r\n".
"Den korte beskrivelse skal være:"."\r\n".
$_POST['auktionstekst_kort']."\r\n\r\n".
"- og den lange beskrivelse skal være:"."\r\n".
$_POST['auktionstekst_lang']."\r\n\r\n".
"- mindsteprisen er sat til kr. ".$_POST['pris']." som auktionen så
skal starte på!"."\r\n\r\n".
"Følgende billede skal med på auktionen:"."\r\n".
$_FILES['user_file']['tmp_name'].
$_FILES['user_file']['type'].
$_FILES['user_file']['name']."\r\n\r\n".
"\nI øvrigt har ".$_POST['navn']." skrevet følgende besked:"."\r\n".
$_POST['besked']) ;

mail($_POST['email'], $_POST['emne2'] ,
"Hej ".$_POST['navn']."\r\n\r\n".

"Du har netop oprettet en auktion."."\r\n\r\n".
"Kategorien er valgt til:"."\r\n".
$_POST['kategori']."\r\n\r\n".
"Den korte beskrivelse:"."\r\n".
$_POST['auktionstekst_kort']."\r\n\r\n".
"Den lange beskrivelse:"."\r\n".
$_POST['auktionstekst_lang']."\r\n\r\n".
"Mindsteprisen har du sat til:"."\r\n".
"Kr. ".$_POST['pris']."\r\n\r\n".
"\nI øvrigt har vi modtaget følgende besked: "."\r\n".
$_POST['besked']) ;

echo "Tillykke ".$_POST['navn']."!<p>Du er nu tilføjet en ny auktion
til kategorien: '".$_POST['kategori']."'<p>Der er sendt en e-mail (til:
".$_POST['email']."), som kvittering på oprettelsen.<p>Held og lykke
med auktionerne<br>ønskes du af Auktionarius.";

} else {
?>
<form method="post" enctype="multipart/form-data" action="<? echo
$_SERVER['PHP_SELF']; ?>">

- men det fungerer ikke...

I den e-mail som jeg modtager, er billedefilen angivet som
/srv/www/htdocs/web10/phptmp/phpuwsNBEimage/pjpegplader.jpg

\Ohlzen

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Anders K. Madsen (14-09-2004)
Kommentar
Fra : Anders K. Madsen


Dato : 14-09-04 04:40



Ohlzen (14-09-2004)
Kommentar
Fra : Ohlzen


Dato : 14-09-04 05:24

Anders K. Madsen skrev:
>
> > Når du skriver at billedefilen skal sendes via serveren, troede jeg
du
> > mente, at billedet skulle uploades til selve serveren - og blive dér.
> >
>
> Nej, det behøver ikke blive der, men det er vel lige så let, hvis du
> alligevel skal bruge det senere. Så slipper du for selv at uploade det
> manuelt senere.
>
> > I den e-mail som jeg modtager, er billedefilen angivet som
> > /srv/www/htdocs/web10/phptmp/phpuwsNBEimage/pjpegplader.jpg
>
> Jeps, det er billedets tmp-placering på serveren.
> Det er altså en god ide at læse den artikel på webcafe, som jeg linkede
> til tidligere.
> Prøv f.eks. først at lave et script hvor du bare uploader billedet og
> viser det i browseren, sådan "upload et billede til serveren og se
det".
>
> Når det virker, så er du kommet et skridt videre mod målet....

Hmmm.

I den artikel du henviser til på webcaféen, har jeg forsøgt mig med det
eksempel der er dér, og justeret mappe-angivelsen:

<?php

$konfiguration["upload_bibliotek"] = "auktioner/billeder";

/* Hvor mange kilobytes maa filerne fylde per styk? */
$konfiguration["max_stoerrelse"] = "100";

/**
* Checker PHP-version
*/
list($major, $minor, $rev) = explode(".", phpversion());
if($major < 4) {
die("Jeg kan kun arbejde med PHP 4.0.0 eller derover");
}

/**
* Udligner forskellene mellem 4.1.x og 4.0.x
* Bemaerk, at disse ikke er "superglobals"
*/
if($minor < 1) {
$_FILES = $HTTP_POST_FILES;
$_POST = $HTTP_POST_VARS;
$_SERVER = $HTTP_SERVER_VARS;
}

if($_FILES["upfil"]["size"] > 0) {

/**
* Hvis der er en fil, saa uploader vi den.
*
* Foerst slaar vi lige fast, hvor filen skal flyttes fra og til.
*/

$fra = $_FILES["upfil"]["tmp_name"];
$til = $konfiguration["upload_bibliotek"] . "/" .
$_FILES["upfil"]["name"];

/**
* Checker lige om filen er for stor til at vi vil acceptere den.
* Vi bruger ceil() i stedet for round(), saa vi ikke faar den skoere
* situation, at fejlmeldingen siger, at filen er for stor, men
angiver
* samme stoerrelse for filen og den oevre graense.
*/
$fil_stoerrelse = filesize($fra)/1024;
if($fil_stoerrelse > $konfiguration["max_stoerrelse"]) {
die("Desv&aelig;rre - filen er for stor. Der acceptereres kun " .
$konfiguration["max_stoerrelse"] . "kb, og din fil fylder " .
ceil($fil_stoerrelse) . "kb.<p>Klik på 'Tilbage'-knappen i din
browser, og prøv igen.");
}
if(function_exists("move_uploaded_file")) {
move_uploaded_file($fra, $til);
} else {
copy($fra, $til);
}

header("Location: " . $_SERVER["PHP_SELF"]);
exit;

} else {

/**
* Intet tegn paa upload, saa vi viser bare listen over filer
* og HTML-formularen til nye uploads.
*/
$indhold = listFiler($konfiguration["upload_bibliotek"]);
$indhold .= bygFormular($_SERVER["PHP_SELF"]);
$output = bygSide("hej", $indhold);

}


/**
* Skriver ud til browseren
*/
echo $output;
exit;



/**************************************************\
** Hjaelpefunktioner **
\**************************************************/

function bygSide($titel, $indhold) {

/**
* Pakker indholdet ind i lidt formalia
*/
return '<html>
<head><title>' . $titel . '</title></head>
<body bgcolor="#ffffff">
<div align="right"><a href="./">Til forsiden</a></div>
' . $indhold . '</body>
</html>
';

}

function bygFormular($action) {

$formular = '<form action="' . $action . '" method="post"
enctype="multipart/form-data">
<table border="1" cellpadding="5" cellspacing="0">
<tr>
<td align="right" bgcolor="#999999"><b>Fil til
upload:</b></td>
<td bgcolor="#cccccc"><input type="file"
name="upfil" /></td>
</tr>
<tr>
<td colspan="2" align="middle"
bgcolor="#dddddd"><input type="submit" value="upload" /></td>
</tr>
</table>
</form>
';

return "<h2>Upload fil:</h2>" . $formular;

}

function listFiler($bibliotek) {

if($bib = @opendir($bibliotek)) {
/**
* Denne syntaks er forklaret i PHP-manualen:
* http://www.php.net/manual/en/function.readdir.php
*/
while (false !== ($fil = readdir($bib))) {
if($fil != "." && $fil != ".." && !ereg("^\..+", $fil)) {
$fil_liste[] = "<a href=\"$bibliotek/$fil\">$fil</a>";
}
}
closedir($bib);

if(is_array($fil_liste)) {
$liste = "<li>" . join("</li><li>", $fil_liste) . "</li>";
} else {
$liste = "<li>Ingen filer p&aring; lager</li>";
}
return "<h2>Filer p&aring; lager:</h2><ul>" . $liste . "</ul>";
} else {
die("Kunne ikke &aring;bne biblioteket: " . $bibliotek);
}

}

?>
- og det fungerer da også - NÆSTEN. Hvis jeg uploader et billeder som er
for stort, kommer den rigtige advarsel op, men uploader jeg et billede,
som opfylder kravene får jeg følgende fejlmeddelelse:

Warning: move_uploaded_file(auktioner/billeder/camera_no.gif): failed to
open stream: Permission denied in
/srv/www/htdocs/web10/html/webdesign/clients/togauktion/auktionsoprettels
e_test.php on line 50

Warning: move_uploaded_file(): Unable to move
'/srv/www/htdocs/web10/phptmp/phpJLCf3M' to
'auktioner/billeder/camera_no.gif' in
/srv/www/htdocs/web10/html/webdesign/clients/togauktion/auktionsoprettels
e_test.php on line 50

Warning: Cannot modify header information - headers already sent by
(output started at
/srv/www/htdocs/web10/html/webdesign/clients/togauktion/auktionsoprettels
e_test.php:16) in
/srv/www/htdocs/web10/html/webdesign/clients/togauktion/auktionsoprettels
e_test.php on line 55

:: Jeg har rettet i ovenstående linieangivelse, så de refererer til de
aktuelle linier i koderne øverst. ::

\Ohlzen


--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Ohlzen (14-09-2004)
Kommentar
Fra : Ohlzen


Dato : 14-09-04 05:28

Mappen er chmod til 755

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Ohlzen (16-09-2004)
Kommentar
Fra : Ohlzen


Dato : 16-09-04 15:57

Problemet er løst, så læs bare videre i de andre indlæg.

Tak for hjælpen til alle!

\Ohlzen

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Søg
Reklame
Statistik
Spørgsmål : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408943
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste