/ 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
Hæft filer ved emails
Fra : Jimmy E. Frederiksen


Dato : 29-03-04 19:12

Jeg vil gerne kunne vedhæfte filer via en mailform og har kigget på Jonas
Delfs' eksempel:
http://www.delfs.dk/tricks.attachments.php

Hvis jeg har denne mailform hvordan pokker får jeg så kædet det hele sammen?

<?php
if(isset($_POST['form'])){
$minemail = "jimmy@remove.e-frederiksen.dk";
$emne = "Fil";
$besked = "$_POST[besked]";
$fra = "From: \"$_POST[navn]\" <$_POST[email]>";
mail($minemail, $emne, $besked, $fra);
echo "mail blev sendt!";
}
else{
echo "Udfyld venlist alle felter med *!";
}
?>

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
Navn: <input type="text" name="navn"><br>
Email: <input type="text" name="email"><br>
Besked: <textarea name="besked" rows="5" cols="15"></textarea>
<input type="submit" name="form" value="Send">
</form>

Jimmy



 
 
Jonas Delfs (30-03-2004)
Kommentar
Fra : Jonas Delfs


Dato : 30-03-04 19:00

"Jimmy E. Frederiksen" <jimmy@remove.e-frederiksen.dk> skrev i en meddelelse
news:c49q06$jq7$1@sunsite.dk...
> Jeg vil gerne kunne vedhæfte filer via en mailform og har kigget på Jonas
> Delfs' eksempel:
> http://www.delfs.dk/tricks.attachments.php
>
> Hvis jeg har denne mailform hvordan pokker får jeg så kædet det hele
sammen?

Det skulle meget gerne være ret ligetil at indsætte et file-felt i din form,
samt ændre form/variabelnavne i koden, hvilket er alt der skal til.
Gruppen er til for hjælp til selvhjælp, og man kan ikke rigtigt svare på dit
spørgsmål uden at lave det hele. Hvad er det du ikke kan overskue?
Det er forholdsvis få linier kode, så prøv at bakse med det.

--
Mvh. Jonas Delfs, http://delfs.dk



Jimmy E. Frederiksen (30-03-2004)
Kommentar
Fra : Jimmy E. Frederiksen


Dato : 30-03-04 20:56

> Det skulle meget gerne være ret ligetil at indsætte et file-felt i din
form,
> samt ændre form/variabelnavne i koden, hvilket er alt der skal til.
> Gruppen er til for hjælp til selvhjælp, og man kan ikke rigtigt svare på
dit
> spørgsmål uden at lave det hele. Hvad er det du ikke kan overskue?
> Det er forholdsvis få linier kode, så prøv at bakse med det.

Hej Jonas!

OK, det jeg har er følgende:

<?php
if(isset($_POST['form'])){
$boundary = uniqid('');
$mimeType = ($_FILES['filen']['type'] ? $_FILES['filen']['type'] :
'application/unknown');
$file = fread(fopen($_FILES['filen']['tmp_name'], 'r'),
filesize($_FILES['filen']['tmp_name']));
$file = base64_encode($file);
$file = chunk_split($file);

$body = "\n--$boundary\n";
$body .= "Content-type: text/plain; charset=iso-8859-1\n";
$body .= "Content-transfer-encoding: 8bit\n\n";
$body .= $_POST['body']."\n\n";
$body .= "--$boundary\n";
$body .= "Content-type: $mimeType; name=".$_FILES['filen']['name']."\n";
$body .= "Content-disposition: attachment;
filename=".$_FILES['filen']['name']."\n";
$body .= "Content-transfer-encoding: base64\n\n";
$body .= $file."\n\n";
$body .= "--$boundary--";
$headers = "Content-type: multipart/mixed; boundary=\"$boundary\"";

$minemail = "jimmy@remove.e-frederiksen.dk";
$emne = "Fil";

mail($minemail, $emne, $body, $headers);
echo "mail blev sendt!";
}
else{
echo "Udfyld venlist alle felter med *!";
}
?>

<form method="post" enctype="multipart/form-data" action="<?php echo
$_SERVER['PHP_SELF']; ?>">
Navn: <input type="text" name="navn"><br>
Email: <input type="text" name="email"><br>
Vedlæg: <input type='file' name='filen'><br>
Besked: <textarea name="body" rows="5" cols="15"></textarea>
<input type="submit" name="form" value="Send">
</form>

Jeg får mailen tilsendt, men der er ikke vedhæftet en fil blot en masse
linjers tekst.

Jimmy



Jimmy E. Frederiksen (30-03-2004)
Kommentar
Fra : Jimmy E. Frederiksen


Dato : 30-03-04 21:29

Jo, måske virker det alligevel. Men hvis ikke man vedlægger en fil får man
fejlen: "Warning: fread(): supplied argument is not a valid stream resource
in D:\HTML\test\attachment\attach.php on line 5".

Mailen bliver godt nok sendt, men jeg får .dat fil tilsendt og brugeren får
ovenstående fejl.

Jimmy



Jonas Delfs (01-04-2004)
Kommentar
Fra : Jonas Delfs


Dato : 01-04-04 17:19

"Jimmy E. Frederiksen" <jimmy@remove.e-frederiksen.dk> skrev i en meddelelse
news:c4cl9j$psc$1@sunsite.dk...
> Jo, måske virker det alligevel. Men hvis ikke man vedlægger en fil får man
> fejlen: "Warning: fread(): supplied argument is not a valid stream
resource
> in D:\HTML\test\attachment\attach.php on line 5".
>
> Mailen bliver godt nok sendt, men jeg får .dat fil tilsendt og brugeren
får
> ovenstående fejl.

Følgende er testet og virker. Prøvede med en billede-fil og ændrede
modtager-adresse til min egen.
http://delfs.dk/test/mail.php

--
Mvh. Jonas Delfs, http://delfs.dk



Jimmy E. Frederiksen (01-04-2004)
Kommentar
Fra : Jimmy E. Frederiksen


Dato : 01-04-04 17:57

> Følgende er testet og virker. Prøvede med en billede-fil og ændrede
> modtager-adresse til min egen.
> http://delfs.dk/test/mail.php

Ja hvis man vedlægger en fil, men man får en fejl hvis ikke man gør - det er
det der er problemet.

Warning: filesize() [function.filesize]: Stat failed for (errno=2 - No such
file or directory) in /usr/home/safemode/delfsdk/www/test/mail.php on line 6

Warning: fread(): supplied argument is not a valid stream resource in
/usr/home/safemode/delfsdk/www/test/mail.php on line 6
mail blev sendt!

Jimmy



Christian Joergensen (01-04-2004)
Kommentar
Fra : Christian Joergensen


Dato : 01-04-04 19:50

On Thu, 01 Apr 2004 18:56:37 +0200, Jimmy E. Frederiksen wrote:

> Ja hvis man vedlægger en fil, men man får en fejl hvis ikke man gør - det er
> det der er problemet.

Så må du implementere en kontrol-mekanisme.

if (fil_ikke_vedhæftet) {
...
} else {
...
}

--
Christian Jørgensen | Never make any mistaeks.
http://www.razor.dk |


Jimmy E. Frederiksen (02-04-2004)
Kommentar
Fra : Jimmy E. Frederiksen


Dato : 02-04-04 09:12

"Christian Joergensen" <mail@phpguru.dk> skrev i en meddelelse
news:pan.2004.04.01.18.49.51.472474@razor.dk...
> Så må du implementere en kontrol-mekanisme.
>
> if (fil_ikke_vedhæftet) {
> ...
> } else {
> ...
> }

Okay, men hvad nu hvis begge betingelser er opfyldt?

Jimmy



Jonas Delfs (02-04-2004)
Kommentar
Fra : Jonas Delfs


Dato : 02-04-04 20:40

"Jimmy E. Frederiksen" <jimmy@remove.e-frederiksen.dk> skrev i en meddelelse
news:c4j78e$6p5$1@sunsite.dk...
> "Christian Joergensen" <mail@phpguru.dk> skrev i en meddelelse
> news:pan.2004.04.01.18.49.51.472474@razor.dk...
> > Så må du implementere en kontrol-mekanisme.
> >
> > if (fil_ikke_vedhæftet) {
> > ...
> > } else {
> > ...
> > }
>
> Okay, men hvad nu hvis begge betingelser er opfyldt?

Hvad er det for betingelser du snakker om?

--
Mvh. Jonas Delfs, http://delfs.dk



Jimmy E. Frederiksen (02-04-2004)
Kommentar
Fra : Jimmy E. Frederiksen


Dato : 02-04-04 23:36


"Jonas Delfs" <jonas@NOSPAMdelfs.dk> skrev i en meddelelse
news:c4kfcd$jvm$1@sunsite.dk...
> > > Så må du implementere en kontrol-mekanisme.
> > >
> > > if (fil_ikke_vedhæftet) {
> > > ...
> > > } else {
> > > ...
> > > }
> >
> > Okay, men hvad nu hvis begge betingelser er opfyldt?
>
> Hvad er det for betingelser du snakker om?

Jeg mener hvordan gør jeg hvis begge betingelser er opfyldt - altså både if
(fil_ikke_vedhæftet) delen og så fil delen.

Måske ser jeg forkert på det, men vil Christians ovenstående eksempel ikke
kræve to mail () funktioner eller?

Jimmy



Jonas Delfs (03-04-2004)
Kommentar
Fra : Jonas Delfs


Dato : 03-04-04 12:09

"Jimmy E. Frederiksen" <jimmy@remove.e-frederiksen.dk> skrev i en meddelelse
news:c4kptf$gt2$1@sunsite.dk...
>
> "Jonas Delfs" <jonas@NOSPAMdelfs.dk> skrev i en meddelelse
> news:c4kfcd$jvm$1@sunsite.dk...
> > > > Så må du implementere en kontrol-mekanisme.
> > > >
> > > > if (fil_ikke_vedhæftet) {
> > > > ...
> > > > } else {
> > > > ...
> > > > }
> > >
> > > Okay, men hvad nu hvis begge betingelser er opfyldt?
> >
> > Hvad er det for betingelser du snakker om?
>
> Jeg mener hvordan gør jeg hvis begge betingelser er opfyldt - altså både
if
> (fil_ikke_vedhæftet) delen og så fil delen.

Du spørger altså hvad der sker hvis både der er valgt en fil og der ikke
er? - Det kan man ikke!:)

> Måske ser jeg forkert på det, men vil Christians ovenstående eksempel ikke
> kræve to mail () funktioner eller?

Nej, du lader blot indholdet af $body afhænge af om der er vedhæftet en fil
eller ej. Hvis der er, går du som nu, hvis ikke sætter du bare $body =
$_POST['body']; og så har du stadig kun ét mail()-kald.

--
Mvh. Jonas Delfs, http://delfs.dk



Jimmy E. Frederiksen (03-04-2004)
Kommentar
Fra : Jimmy E. Frederiksen


Dato : 03-04-04 21:18

"Jonas Delfs" <jonas@NOSPAMdelfs.dk> skrev i en meddelelse
news:c4m5qd$eqr$1@sunsite.dk...
> Nej, du lader blot indholdet af $body afhænge af om der er vedhæftet en
fil
> eller ej. Hvis der er, går du som nu, hvis ikke sætter du bare $body =
> $_POST['body']; og så har du stadig kun ét mail()-kald.

OK, nu kan jeg sende uden en fil vedhæftet, men hvis jeg vedhæfter en fil
bliver den ikke vedlagt. Hvor går det galt?

<?php
if (isset($_POST['form'])){
if(empty($_POST['filen'])) {
$body = $_POST['body'];
}
elseif (!empty($_POST['filen'])) {
$boundary = uniqid('');
$mimeType = ($_FILES['filen']['type'] ? $_FILES['filen']['type'] :
'application/unknown');
$file = fread(fopen($_FILES['filen']['tmp_name'], 'r'),
filesize($_FILES['filen']['tmp_name']));
$file = base64_encode($file);
$file = chunk_split($file);
$body = "\n--$boundary\n";
$body .= "Content-type: text/plain; charset=iso-8859-1\n";
$body .= "Content-transfer-encoding: 8bit\n\n";
$body .= $_POST['body']."\n\n";
$body .= "--$boundary\n";
$body .= "Content-type: $mimeType; name=".$_FILES['filen']['name']."\n";
$body .= "Content-disposition: attachment;
filename=".$_FILES['filen']['name']."\n";
$body .= "Content-transfer-encoding: base64\n\n";
$body .= $file."\n\n";
$body .= "--$boundary--";
}
$minemail = "jimmy@remove.e-frederiksen.dk";
$emne = "Fil";
$headers = "Content-type: multipart/mixed; boundary=\"$boundary\"";
mail ($minemail, $emne, $body, $headers);
}
?>

<form method="post" enctype="multipart/form-data" action="<?php echo
basename($_SERVER['PHP_SELF']); ?>">
Navn: <input type="text" name="navn"><br>
Email: <input type="text" name="email"><br>
Vedlæg: <input type="file" name="filen"><br>
Besked: <textarea name="body" rows="5" cols="15"></textarea>
<input type="submit" name="form" value="Send">
</form>

Jimmy



Jimmy E. Frederiksen (04-04-2004)
Kommentar
Fra : Jimmy E. Frederiksen


Dato : 04-04-04 10:34

Det virker som om at dem slet ikke tjekker på elseif
(!empty($_POST['filen'])) - kan man ikke lave en $_POST på en fil?

Jimmy



Ulrik Nielsen (04-04-2004)
Kommentar
Fra : Ulrik Nielsen


Dato : 04-04-04 11:11

Jimmy E. Frederiksen wrote:
> Det virker som om at dem slet ikke tjekker på elseif
> (!empty($_POST['filen'])) - kan man ikke lave en $_POST på en fil?

hvis det er ifmb. fil upload skal du bruge $_FILES['filen']

--
>> ulrik nielsen
excuse of the day : Internet shut down due to maintenance
from bofh : http://www.cs.wisc.edu/~ballard/bofh/

Jimmy E. Frederiksen (04-04-2004)
Kommentar
Fra : Jimmy E. Frederiksen


Dato : 04-04-04 11:48

> hvis det er ifmb. fil upload skal du bruge $_FILES['filen']

Det er jeg i tvivl om er hvordan jeg tjekker om man har vedhæftet en fil.

Jeg kan godt sende en fil, men får fejl når en fil ikke er vedhæftet.

<?php
if (isset($_POST['form'])){
if(empty($_FILES['filen'])) {
$body = $_POST['body'];
}
else {
$boundary = uniqid('');
$mimeType = ($_FILES['filen']['type'] ? $_FILES['filen']['type'] :
'application/unknown');
$file = fread(fopen($_FILES['filen']['tmp_name'], 'r'),
filesize($_FILES['filen']['tmp_name']));
$file = base64_encode($file);
$file = chunk_split($file);

$body = "\n--$boundary\n";
$body .= "Content-type: text/plain; charset=iso-8859-1\n";
$body .= "Content-transfer-encoding: 8bit\n\n";
$body .= $_POST['body']."\n\n";
$body .= "--$boundary\n";
$body .= "Content-type: $mimeType; name=".$_FILES['filen']['name']."\n";
$body .= "Content-disposition: attachment;
filename=".$_FILES['filen']['name']."\n";
$body .= "Content-transfer-encoding: base64\n\n";
$body .= $file."\n\n";
$body .= "--$boundary--";
$headers = "Content-type: multipart/mixed; boundary=\"$boundary\"";

}
$minemail = "jimmy@remove.e-frederiksen.dk";
$emne = "Fil";
mail ($minemail, $emne, $body, $headers);
}
?>

<form method="post" enctype="multipart/form-data" action="<?php echo
basename($_SERVER['PHP_SELF']); ?>">
Navn: <input type="text" name="navn"><br>
Email: <input type="text" name="email"><br>
Vedlæg: <input type="file" name="filen"><br>
Besked: <textarea name="body" rows="5" cols="15"></textarea>
<input type="submit" name="form" value="Send">
</form>



Jimmy E. Frederiksen (04-04-2004)
Kommentar
Fra : Jimmy E. Frederiksen


Dato : 04-04-04 12:19

Jeg tror måske jeg har fundet ud af det. Nedenstående virke tilsyneladende,
men er det også korrekt?

<?php
if (isset($_POST['form'])){
if (empty($_FILES['filen']['tmp_name'])) {
$body = $_POST['body'];
}
else {
$boundary = uniqid('');
$mimeType = ($_FILES['filen']['type'] ? $_FILES['filen']['type'] :
'application/unknown');
$file = fread(fopen($_FILES['filen']['tmp_name'], 'r'),
filesize($_FILES['filen']['tmp_name']));
$file = base64_encode($file);
$file = chunk_split($file);

$body = "\n--$boundary\n";
$body .= "Content-type: text/plain; charset=iso-8859-1\n";
$body .= "Content-transfer-encoding: 8bit\n\n";
$body .= $_POST['body']."\n\n";
$body .= "--$boundary\n";
$body .= "Content-type: $mimeType; name=".$_FILES['filen']['name']."\n";
$body .= "Content-disposition: attachment;
filename=".$_FILES['filen']['name']."\n";
$body .= "Content-transfer-encoding: base64\n\n";
$body .= $file."\n\n";
$body .= "--$boundary--";
$headers = "Content-type: multipart/mixed; boundary=\"$boundary\"";

}
$minemail = "jimmy@remove.e-frederiksen.dk";
$emne = "Fil";
mail ($minemail, $emne, $body, $headers);
}
?>

<form method="post" enctype="multipart/form-data" action="<?php echo
basename($_SERVER['PHP_SELF']); ?>">
Navn: <input type="text" name="navn"><br>
Email: <input type="text" name="email"><br>
Vedlæg: <input type="file" name="filen"><br>
Besked: <textarea name="body" rows="5" cols="15"></textarea>
<input type="submit" name="form" value="Send">
</form>

Er det kun body delen (ifm filen) som skal under 'else' så jeg evt kan
flytte boundary, mimetype og file uden for 'else'?

Jeg har set nogle attachments-scripts hvor content transer encoding var 7bit
i stedet for 8bit - hvorfor det?

Jimmy



Jonas Delfs (04-04-2004)
Kommentar
Fra : Jonas Delfs


Dato : 04-04-04 17:26

"Jimmy E. Frederiksen" <jimmy@remove.e-frederiksen.dk> skrev i en meddelelse
news:c4oqur$nps$1@sunsite.dk...
> Jeg tror måske jeg har fundet ud af det. Nedenstående virke
tilsyneladende,
> men er det også korrekt?
>
> [snip]

Ganske korrekt (hvis der er noget der er det), ja.

> Er det kun body delen (ifm filen) som skal under 'else' så jeg evt kan
> flytte boundary, mimetype og file uden for 'else'?

Prøv at kigge på det rent logisk. Hvis du flytter mimetype uden for 'else'
vil du forsøge at sætte typen for en fil som ikke eksisterer, til en type
som du ikke kan bestemme da filen ikke er valgt. Så nej, boundary, mimetype
mv. hører sig kun til idet der er valgt en fil. Hvorfor vil du i øvrigt også
flytte det?

--
Mvh. Jonas Delfs, http://delfs.dk



Jimmy E. Frederiksen (04-04-2004)
Kommentar
Fra : Jimmy E. Frederiksen


Dato : 04-04-04 17:42

"Jonas Delfs" <jonas@NOSPAMdelfs.dk> skrev i en meddelelse
news:c4pcpc$sbd$1@sunsite.dk...
> Prøv at kigge på det rent logisk. Hvis du flytter mimetype uden for 'else'
> vil du forsøge at sætte typen for en fil som ikke eksisterer, til en type
> som du ikke kan bestemme da filen ikke er valgt. Så nej, boundary,
mimetype
> mv. hører sig kun til idet der er valgt en fil. Hvorfor vil du i øvrigt
også
> flytte det?

Nej, det kan der være noget om. Du skal have tak for hjælpen, Jonas!

Jimmy



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