Avatar billede angorino Nybegynder
15. august 2004 - 10:42 Der er 3 kommentarer

Fejlmelding ved mgl. vedhæftet fil.

Hejsa,
Jeg har et php-script hvor jeg sammen med alm. oplysninger kan sende en vedhæftet fil. Hvis der bli'r vedhæftet en fil, er der ingen problemer. Lader man være kommer der en fejlmælding der ser således ud:
Warning:  fread(): supplied argument is not a valid stream resource in home/web/web5249/service/Babysitter/tilmeld.php on line 41.
Scriptet jeg bruger ser således ud:
<?php


// Hvis formen er submitted
if ($_GET['send']){

    // Definér $boundary
    // boundary er en unik streng der identifiserer vores email
    $boundary = uniqid("");
   
    // Hvis filtypen genkendes af browseren, sætter vi mime-typen til filtypen
    if ($_FILES['filen']['type']) {
        $mimeType = $_FILES['filen']['type'];
       
    // Ellers, sætter vi mime-type til ukendt
    } else {
        $mimeType =  "application/unknown";
    }
   
    // Læs filen ind i en variable
    $fil_var = fread(fopen($_FILES['filen']['tmp_name'], 'r'), filesize($_FILES['filen']['tmp_name']));
   
    // Gør filen læsevenlig for email-klienten
    $fil_var = base64_encode($fil_var);
   
    // Split filkoden op i linier med 76 tegn i hver
    $fil_var = chunk_split($fil_var);
   
    // Følgende lille stykke klarer det meste mht. headers, der fortæller email-klienten hvad der er på vej

    // Vi sætter vores unikke streng ind her
    $body  = "\n--$boundary\n";
   
    // Vi fortæller at følgende stump er af typen text/plain samt
    // hvilket tegnsæt vi bruger
    $body .= "Content-type: text/plain; charset=iso-8859-1\n";
    $body .= "Content-transfer-encoding: 8bit\n\n";
   
    // Vi sætter body-texten ind her
    $body .= $_POST['fra']. "\n";
    $body .= $_POST['email']. "\n";
    $body .= $_POST['telefon']. "\n";
    $body .= $_POST['bye']. "\n";
    $body .= $_POST['filen']. "\n";
    $body .= $_POST['body_text']. "\n\n";
   
    // Slut på brødteksten
    $body .= "--$boundary\n";
   
    // Så er det filens tur
    // Vi fortæller lige mime-typen og filnavnet
    $body .= "Content-type: $mimeType; name=".$_FILES['filen']['name']."\n";
   
    // Fortæller at vi vil have filen hæftet ved - ikke direkte i mailen.
    // Vil du gerne have den direkte i mailen, ændres 'attachment' til 'inline'
    // Bemærk: Bl.a. OE viser _også_ filen i selve mailen selvom du angiver 'attachment'
    $body .= "Content-disposition: attachment; filename=".$_FILES['filen']['name']."\n";
   
    // Klienten skal have at vide at meddelelsen er encoded med base64
    $body .= "Content-transfer-encoding: base64\n\n";
   
    // Vi sætter filkoden ind
    $body .= $fil_var."\n\n";
   
    // Vi slutter af med den samme unikke streng som vi startede med
    $body .= "--$boundary--";
   
    // Vi definerer from-headeren
    $headers  = "From: ".$_POST['fra']."$email\n";
   
    // Vi fortæller hvilken type indhold mailen indeholder
    // samt emailens unikke id-streng
    $headers .= "Content-type: multipart/mixed; boundary=\"$boundary\"";
   
    // Hvis mailen bliver sendt afsted problemfrit
    if (mail("sev@altivejen.dk", "Babysitter på Altivejen", "$body", "$headers")) {

        echo "<p><b>Tak for det!</b></p>";
        echo "<p>Du hører nærmere</p>";
        echo "<p>Dumå også gerne kigge på <a href='http://www.klyt.dk/bijob/betingelser.php' target='_blank' class='linkmenu'><strong><u> Klyttens babysitterservice</u></strong></a></p>";
       
    // Hvis ikke skriver vi lige en fejlmeddelelse
    } else {
        echo "Der opstod en fejl, og mailen blev ikke sendt!";
    }

// Hvis ikke formen er submitted, vis formen
} else {


    echo  "

\n";


    echo  "<form action='".basename($PHP_SELF)."?send=1' enctype='multipart/form-data' method='post'>\n";
    echo  "<table width='350' border='0' cellpadding='0'><tr><td height='213' valign='top'>\n";

    echo "<fieldset style='width: 122; height: 6; padding: 3;'>\n";
    echo "<legend><font size='1' face='Verdana'>Fra</font></legend>\n";
    echo "<input type='text' name='fra' style='width:218px; border-style:solid; border-width:0; padding:0;'></fieldset>\n";

    echo "<fieldset style='width: 122; height: 6; padding: 3;'>\n";
    echo "<legend><font size='1' face='Verdana'>E-mail</font></legend>\n";
    echo "<input type='text' name='email' style='width:218px; border-style:solid; border-width:0; padding:0;'></fieldset>\n";

    echo "<fieldset style='width: 122; height: 6; padding: 3;'>\n";
    echo "<legend><font size='1' face='Verdana'>Telefon</font></legend>\n";
    echo "<input type='text' name='telefon' style='width:218px; border-style:solid; border-width:0; padding:0;'></fieldset>\n";

    echo "<fieldset style='width: 122; height: 6; padding: 3;'>\n";
    echo "<legend><font size='1' face='Verdana'>By</font></legend>\n";
    echo "<input type='text' name='bye' style='width:218px; border-style:solid; border-width:0; padding:0;'></fieldset>\n";

    echo "<fieldset style='width: 122; height: 6; padding: 3;'>\n";
    echo "<legend><font size='1' face='Verdana'>Vedhæft billede</font></legend>\n";
    echo "<input type='file' name='filen' size='30' maxlength='60' style='width:340px; border-style:solid; border-width:0; padding:0;'></fieldset>\n";


    echo "<fieldset style='width: 122; height: 6; padding: 3;'>\n";
    echo "<legend><font size='1' face='Verdana'>Tekst</font></legend>\n";
    echo "<textarea wrap='on' rows='5' cols='40' name='body_text' style='overflow:auto; border-style:solid; border-width:0; padding:0;'></textarea></fieldset>\n";

    echo "<br><br><input type='submit' class='button' value='Send' name='send'>\n";
    echo "<input type='reset' class='button' value=' Nulstil ' name='reset'>\n";

    echo "</td></tr></table>\n</form><br>\n";



}
?>
Avatar billede jakobdo Ekspert
15. august 2004 - 10:57 #1
Mange af dine fil-funktionr tager ikke højde for at filen evt ikke er til stede!
Lav først et tjek på denne:

if ($_FILES['userfile'])
{
Læg det kode som har noget med fil-håndteringen at gøre herind...
}
Avatar billede angorino Nybegynder
15. august 2004 - 12:34 #2
Takker mange gange for svaret, men som kæmpe novice på området står det stadig lidt utydeligt for mig.
Jeg har ledt efter: if ($_FILES['userfile']) på min side men kan ikke finde et nogen steder.
Skulle det være muligt at få en lidt mere fyldestgørende forklaring?
Avatar billede jakobdo Ekspert
15. august 2004 - 14:50 #3
Om selve $_FILES, kan du læse mere om på denne side:

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

Du skal bruge $_FILES['filen']

Dette vil nogle muligvis kalde slamkode, men prøv det her:

<?php


// Hvis formen er submitted
if ($_GET['send'])
{
    //Tjekker om der overhovedet er en fil vedhæftet
    if ($_FILES['filen'])
    {
        // Definér $boundary
        // boundary er en unik streng der identifiserer vores email
        $boundary = uniqid("");
   
        // Hvis filtypen genkendes af browseren, sætter vi mime-typen til filtypen
        if ($_FILES['filen']['type'])
        {
            $mimeType = $_FILES['filen']['type'];
        }
        // Ellers, sætter vi mime-type til ukendt
        else
        {
            $mimeType =  "application/unknown";
        }
   
        // Læs filen ind i en variable
        $fil_var = fread(fopen($_FILES['filen']['tmp_name'], 'r'), filesize($_FILES['filen']['tmp_name']));
   
        // Gør filen læsevenlig for email-klienten
        $fil_var = base64_encode($fil_var);
   
        // Split filkoden op i linier med 76 tegn i hver
        $fil_var = chunk_split($fil_var);
   
        // Følgende lille stykke klarer det meste mht. headers, der fortæller email-klienten hvad der er på vej
    }
   
    // Vi sætter vores unikke streng ind her
    $body  = "\n--$boundary\n";
   
    // Vi fortæller at følgende stump er af typen text/plain samt
    // hvilket tegnsæt vi bruger
    $body .= "Content-type: text/plain; charset=iso-8859-1\n";
    $body .= "Content-transfer-encoding: 8bit\n\n";
   
    // Vi sætter body-texten ind her
    $body .= $_POST['fra']. "\n";
    $body .= $_POST['email']. "\n";
    $body .= $_POST['telefon']. "\n";
    $body .= $_POST['bye']. "\n";
    $body .= $_POST['filen']. "\n";
    $body .= $_POST['body_text']. "\n\n";
   
        //Tjekker om der overhovedet er en fil vedhæftet
    if ($_FILES['filen'])
    {
        // Slut på brødteksten
        $body .= "--$boundary\n";
   
        // Så er det filens tur
        // Vi fortæller lige mime-typen og filnavnet
        $body .= "Content-type: $mimeType; name=".$_FILES['filen']['name']."\n";
   
        // Fortæller at vi vil have filen hæftet ved - ikke direkte i mailen.
        // Vil du gerne have den direkte i mailen, ændres 'attachment' til 'inline'
        // Bemærk: Bl.a. OE viser _også_ filen i selve mailen selvom du angiver 'attachment'
        $body .= "Content-disposition: attachment; filename=".$_FILES['filen']['name']."\n";
   
        // Klienten skal have at vide at meddelelsen er encoded med base64
        $body .= "Content-transfer-encoding: base64\n\n";
   
        // Vi sætter filkoden ind
        $body .= $fil_var."\n\n";
   
        // Vi slutter af med den samme unikke streng som vi startede med
        $body .= "--$boundary--";
    }
   
    // Vi definerer from-headeren
    $headers  = "From: ".$_POST['fra']."$email\n";
   
    // Vi fortæller hvilken type indhold mailen indeholder
    // samt emailens unikke id-streng
    $headers .= "Content-type: multipart/mixed; boundary=\"$boundary\"";
   
    // Hvis mailen bliver sendt afsted problemfrit
    if (mail("sev@altivejen.dk", "Babysitter på Altivejen", "$body", "$headers"))
    {
        echo "<p><b>Tak for det!</b></p>";
        echo "<p>Du hører nærmere</p>";
        echo "<p>Du må også gerne kigge på <a href='http://www.klyt.dk/bijob/betingelser.php' target='_blank' class='linkmenu'><strong><u> Klyttens babysitterservice</u></strong></a></p>";
       
    // Hvis ikke skriver vi lige en fejlmeddelelse
    }
    else
    {
        echo "Der opstod en fejl, og mailen blev ikke sendt!";
    }
   
// Hvis ikke formen er submitted, vis formen
}
else
{
    echo  "\n";
    echo  "<form action='".basename($PHP_SELF)."?send=1' enctype='multipart/form-data' method='post'>\n";
    echo  "<table width='350' border='0' cellpadding='0'><tr><td height='213' valign='top'>\n";
   
    echo "<fieldset style='width: 122; height: 6; padding: 3;'>\n";
    echo "<legend><font size='1' face='Verdana'>Fra</font></legend>\n";
    echo "<input type='text' name='fra' style='width:218px; border-style:solid; border-width:0; padding:0;'></fieldset>\n";
   
    echo "<fieldset style='width: 122; height: 6; padding: 3;'>\n";
    echo "<legend><font size='1' face='Verdana'>E-mail</font></legend>\n";
    echo "<input type='text' name='email' style='width:218px; border-style:solid; border-width:0; padding:0;'></fieldset>\n";
   
    echo "<fieldset style='width: 122; height: 6; padding: 3;'>\n";
    echo "<legend><font size='1' face='Verdana'>Telefon</font></legend>\n";
    echo "<input type='text' name='telefon' style='width:218px; border-style:solid; border-width:0; padding:0;'></fieldset>\n";
   
    echo "<fieldset style='width: 122; height: 6; padding: 3;'>\n";
    echo "<legend><font size='1' face='Verdana'>By</font></legend>\n";
    echo "<input type='text' name='bye' style='width:218px; border-style:solid; border-width:0; padding:0;'></fieldset>\n";
   
    echo "<fieldset style='width: 122; height: 6; padding: 3;'>\n";
    echo "<legend><font size='1' face='Verdana'>Vedhæft billede</font></legend>\n";
    echo "<input type='file' name='filen' size='30' maxlength='60' style='width:340px; border-style:solid; border-width:0; padding:0;'></fieldset>\n";
   
   
    echo "<fieldset style='width: 122; height: 6; padding: 3;'>\n";
    echo "<legend><font size='1' face='Verdana'>Tekst</font></legend>\n";
    echo "<textarea wrap='on' rows='5' cols='40' name='body_text' style='overflow:auto; border-style:solid; border-width:0; padding:0;'></textarea></fieldset>\n";
   
    echo "<br><br><input type='submit' class='button' value='Send' name='send'>\n";
    echo "<input type='reset' class='button' value=' Nulstil ' name='reset'>\n";
   
    echo "</td></tr></table>\n</form><br>\n";
}
?>
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