Ankündigung

Einklappen
Keine Ankündigung bisher.

Warning: fread(): supplied argument is not a valid stream resource...

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Warning: fread(): supplied argument is not a valid stream resource...

    Hallo! Habe es eigentlich schon in dem anderen Thread geschrieben, aber es ist ja jetzt ein neues Problem, und ich weiß echt nicht wie ich das lösen soll...??

    Ich hab ja ein Formular mit Dateianhängen, und
    da ist eine Zeile: $Dateiinhalt = fread(fopen($_FILES['Anhang']['tmp_name'], "r"), $_FILES['Anhang']['size']);

    Und wenn ich jetzt keine Datei anhänge kommt die Fehlermeldung:

    Warning: fread(): supplied argument is not a valid stream resource in /www/htdocs/w0091088/taschenk.php on line 106

    Hier mein Code:

    PHP-Code:
    <?php

    $Empfaenger 
    "...";

    if(
    $_REQUEST['senden'])
    {    
        if (
    $_POST['email_address'] !== '') {
        exit(
    '<h1>Es ist ein Fehler aufgetreten!</h1>Sie haben ein Feld ausgefüllt, das nicht ausgefüllt weden darf.');
        }
      else {    
        
    $fehler = array();
        if(empty(
    $_REQUEST['stueck']))
                {
                
    $fehler['stueck'] = "Bitte geben Sie eine Stückzahl an!";
                }
        if(empty(
    $_REQUEST['farbe']))
                {
                
    $fehler['farbe'] = "Bitte geben Sie eine Farbe an!";
                }
        if(empty(
    $_REQUEST['name']))
                {
            
    $fehler['name'] = "Bitte geben Sie Ihren Namen an!";
                }
        if(empty(
    $_REQUEST['email']))
                {
                
    $fehler['email'] = "Bitte geben Sie Ihre E-Mail Adresse an!";
                }
        if(empty(
    $_REQUEST['strasse']) || empty($_REQUEST['plzort']))
                {
                
    $fehler['strasse'] = "Bitte geben Sie Ihre gesamte Adresse an!";
                }                
        if(
    count($fehler)>0){
                foreach (
    $fehler as $msg){ 
                echo 
    "<p align=\"center\">$msg";
                }
                echo 
    "<br /><br /><b><a href=\"javascript:history.back();\">zurück</a></b></p>";
                }
        else
         {
            
    $Mailbetreff "Bestellung";

            
    $Trenner md5(uniqid(time()));

            
    $Header "From: ".$_REQUEST['email']; 
            
    $Header .= "\n"
            
    $Header .= "MIME-Version: 1.0"
            
    $Header .= "\n"
            
    $Header .= "Content-Type: multipart/mixed; boundary=$Trenner"
            
    $Header .= "\n\n"
            
    $Header .= "This is a multi-part message in MIME format"
            
    $Header .= "\n"
            
    $Header .= "--$Trenner"
            
    $Header .= "\n"
            
    $Header .= "Content-Type: text/plain"
            
    $Header .= "\n"
            
    $Header .= "Content-Transfer-Encoding: 8bit"
            
    $Header .= "\n\n"
            
    $Header .= "Sie haben folgende Nachricht erhalten: \n\n";
                if(
    $Formularfeld!="senden" && $Formularfeld!="Anhang")
                {
                    
    $Header .= "Stueckzahl: ".$stueck."\n";
                    
    $Header .= "Motiv: ".$foto."\n";
                    
    $Header .= "Bundeslandja: ".$bundeslandja."\n";
                    
    $Header .= "Bundesland: " .$bundesland."\n";
                    
    $Header .= "Abgerundete Ecken: ".$abgerundeteEcken."\n";
                    
    $Header .= "Farbe: ".$farbe."\n";
                    
    $Header .= "Andere Farbe (falls vorhanden): ".$farbeandere."\n";
                    
    $Header .= "Adresseindruck: \n";
                    
    $Header .= "- ".$adresseindruck1."\n";
                    
    $Header .= "- ".$adresseindruck2."\n";
                    
    $Header .= "- ".$adresseindruck3."\n";
                    
    $Header .= "- ".$adresseindruck4."\n";
                    
    $Header .= "Sprechzeiten: \n";
                    
    $Header .= "- Mo: ".$montag1." / ".$montag2."\n";
                    
    $Header .= "- Di: ".$dienstag1." / ".$dienstag2."\n";
                    
    $Header .= "- Mi: ".$mittwoch1." / ".$mittwoch2."\n";
                    
    $Header .= "- Do: ".$donnerstag1." / ".$donnerstag2."\n";
                    
    $Header .= "- Fr: ".$freitag1." / ".$freitag2."\n";
                    
    $Header .= "- Sa: ".$samstag1." / ".$samstag2."\n";
                    
    $Header .= "Anrede: ".$anrede."\n";
                    
    $Header .= "Titel: ".$titel."\n";
                    
    $Header .= "Name: ".$name."\n";
                    
    $Header .= "Straße: ".$strasse."\n";
                    
    $Header .= "PLZ Ort: ".$plzort."\n";
                    
    $Header .= "E-Mail: ".$email."\n";
                    
    $Header .= "Telefon: ".$telefon."\n";
                    
    $Header .= "Telefax: ".$telefax."\n";
                    
    $Header .= "Nachricht: ".$nachricht."\n";
                }
            
    $Header .= "\nDatum/Zeit: ";
            
    $Header .= date("d.m.Y H:i:s");
            
    $Header .= "\n"
            
    $Header .= "--$Trenner"
            
    $Header .= "\n";
            if(!empty(
    $_POST['Anhang'])){
            
    $Header .= "Datei: \n";
              
    $Header .= "Es wurde keine Datei übergeben.";
            } 
            else {
            
    $Header .= "Content-Type: ";
              
    $Header .= $_FILES['Anhang']['type'];
              
    $Header .= "; name=";
              
    $Header .= $_FILES['Anhang']['name'];
              
    $Header .= "\n";
              
    $Header .= "Content-Transfer-Encoding: base64";
              
    $Header .= "\n";
              
    $Header .= "Content-Disposition: attachment; filename=";
             
    $Header .= $_FILES['Anhang']['name'];
              
    $Header .= "\n\n";
              
    $Dateiinhalt fread(fopen($_FILES['Anhang']['tmp_name'], "r"), $_FILES['Anhang']['size']);
              
    $Header .= chunk_split(base64_encode($Dateiinhalt));
              
    $Header .= "\n";
              
    $Header .= "--$Trenner--";
            }

            
    mail($Empfaenger$Mailbetreff""$Header); 
            echo
    "<p align=\"center\"><b>Vielen Dank für Ihre Bestellung!<br />Wir werden uns umgehend bei Ihnen melden!<br /><a href=\"javascript:history.back();\">zurück</a></p><b>";
       }
    } }
    else
    {
    ?>
    Dazu muss ich noch erwähnen, dass ich vorher nur eine Fehlermeldung hatte wo darin stand "Sie haben ein oder mehrere Pflichtfelder nicht ausgefüllt". Ich wollte aber, dass dasteht was man nicht ausgefüllt hat. Aber bevor ich das geändert hatte gings....
    Entdeckt vll jemand von euch einen Fehler?

    LG Denise

  • #2
    was erwartest Du denn von fopen wenn Du keine Datei übergibst...

    Kommentar


    • #3
      if(is_uploaded_file() ist dein Freund hier:

      $Dateiinhalt = fread(fopen($_FILES['Anhang']['tmp_name'], "r"), $_FILES['Anhang']['size']);

      Kommentar


      • #4
        Erstmal der Teil, der Dich vermutlich nicht interessiert: Es wäre so viel einfacher, wenn Du eine fertige, funktionierende Email-Klasse nehmen würdest. Mir wurde neulich swiftmailer als Ersatz für phpmailer gezeigt und ich finde es bisher super.

        Wenn sich fread() über das Filehandle beschwert, dann ist wohl fopen() fehlgeschlagen. Du kannst das eh einfacher mit file_get_contents() lösen.
        Aber insgesamt solltest Du erstmal die Werte von $_FILES abtesten. Der Upload kann auch schief gehen.
        PHP-Code:
        if(empty($_REQUEST['strasse']) || empty($_REQUEST['plzort']))
        {
            
        $fehler['strasse'] = "Bitte geben Sie Ihre gesamte Adresse an!";


        if (!isset(
        $_FILES['Anhang']))
        {
            
        $fehler[] = 'kein upload';
        }
        else if(
        $_FILES['Anhang']['error']!=0)
        {
            
        $fehler[] = 'Fehler beim Upload. #'.$_FILES['Anhang']['error'];
        }
        else if(!
        is_readable($_FILES['Anhang']['tmp_name']))
        {
            
        $fehler[] = 'temporäre Datei kann nicht eingelesen werden';
        }

        if(
        count($fehler)>0)
        {
            foreach (
        $fehler as $msg)
            { 
                echo 
        "<p align=\"center\">$msg";
            }
            echo 
        "<br /><br /><b><a href=\"javascript:history.back();\">zurück</a></b></p>";
        }
        else
        {
            
        $Header .= "Content-Type: ";
            
        $Header .= $_FILES['Anhang']['type'];
            
        $Header .= "; name=";
            
        $Header .= $_FILES['Anhang']['name'];
            
        $Header .= "\n";
            
        $Header .= "Content-Transfer-Encoding: base64";
            
        $Header .= "\n";
            
        $Header .= "Content-Disposition: attachment; filename=";
            
        $Header .= $_FILES['Anhang']['name'];
            
        $Header .= "\n\n";
            
        $Dateiinhalt file_get_contents($_FILES['Anhang']['tmp_name']);
            
        $Header .= chunk_split(base64_encode($Dateiinhalt));
            
        $Header .= "\n";
            
        $Header .= "--$Trenner--";

        Kommentar


        • #5
          Waahh jetz seh ich garnich mehr durch ^^

          @HPR: Das komische ist ja, es ging alles bevor ich nicht Code geändert hatte...
          und deswegen ist ja die if else funktion da

          PHP-Code:
          if(!empty($_POST['Anhang'])){
                  
          $Header .= "Datei: \n";
                    
          $Header .= "Es wurde keine Datei übergeben.";
                  } 
                  else {
                  
          $Header .= "Content-Type: ";
                    
          $Header .= $_FILES['Anhang']['type'];
                    
          $Header .= "; name=";
                    
          $Header .= $_FILES['Anhang']['name'];
                    
          $Header .= "\n";
                    
          $Header .= "Content-Transfer-Encoding: base64";
                    
          $Header .= "\n";
                    
          $Header .= "Content-Disposition: attachment; filename=";
                   
          $Header .= $_FILES['Anhang']['name'];
                    
          $Header .= "\n\n";
                    
          $Dateiinhalt fread(fopen($_FILES['Anhang']['tmp_name'], "r"), $_FILES['Anhang']['size']);
                    
          $Header .= chunk_split(base64_encode($Dateiinhalt));
                    
          $Header .= "\n";
                    
          $Header .= "--$Trenner--";
                  } 
          Wenn der Anhang leer ist, wird keine Datei übergeben und wenn nicht dann kommt halt der Rest. Und so soll es ja auch sein, weil ja nicht alle ein Bild mitschicken... Ich weiß bloß nicht wo jetzt der Fehler ist... Weil es ja wie gesagt vorher ging bevor ich nicht die einzelnen Fehlermeldungen eingebaut habe... Versteht ihr wie ich das meine? ^^

          LG Denise

          Kommentar


          • #6
            Zitat von pixelprinzessin Beitrag anzeigen
            Waahh jetz seh ich garnich mehr durch ^^
            Was passiert denn, wenn meine Änderungen eingebaut sind?

            Kommentar


            • #7
              Dann schickt es garnichts ab. Wenn ich keine Datei auswähle, kommt dann eine Fehlermeldung. Aber eigentlich ist es ja kein Fehler, weil man muss ja nicht zwingend etwas hochladen.

              Kommentar


              • #8
                if(!empty($_POST['Anhang'])){
                Bist Du Dir sicher, dass es _POST['Anhang'] gibt, wenn _FILES['Anhang'] existiert? Schließt sich das nicht gegenseitig aus?

                Kommentar


                • #9
                  also das kam nicht von mir, dabei hatte mir jemand geholfen, weil ich den fehler schonmal hatte, und er damit behoben wurde, halt mit dem if else. Und nun ist er aber wieder da, seitdem ich die mehreren Fehlermeldungen mit eingebaut habe... das ist ja das komische...

                  Kommentar


                  • #10
                    Zitat von David Beitrag anzeigen
                    Mir wurde neulich swiftmailer als Ersatz für phpmailer gezeigt und ich finde es bisher super.
                    Warum braucht man einen Ersatz? Was ist denn am phpmailer auszusetzen?

                    Kommentar


                    • #11
                      Zitat von pixelprinzessin Beitrag anzeigen
                      also das kam nicht von mir, dabei hatte mir jemand geholfen, weil ich den fehler schonmal hatte, und er damit behoben wurde, halt mit dem if else. Und nun ist er aber wieder da, seitdem ich die mehreren Fehlermeldungen mit eingebaut habe... das ist ja das komische...

                      Bist du sicher das sich an deiner Testumgebung nichts geändert hat? Es könnte zum Beispiel auch einfach ein Browserupdate sein. Dann hätte die alte Version das $_POST["Anhang"] zusätzlich gefüllt und die neue eben nicht mehr, weils ja überflüssig ist...

                      Kommentar


                      • #12
                        nee nee. bin heute schon den ganzen Tag mit dem FF drin und auch kein Update passiert Oder meinst du jetzt zb auch mal den Cache leeren??

                        Kommentar


                        • #13
                          Mir fällt grad auf das das hier doch gar keinen Sinn macht oder? Erst recht nicht mit dem Ausrufezeichen. Du fragst ja ab "wenn die variable nicht leer ist" "dann geb mir aus das keine datei dabei ist"

                          if(!empty(
                          $_POST['Anhang'])){
                          $Header .= "Datei: \n";
                          $Header .= "Es wurde keine Datei übergeben.";
                          }

                          Zeig doch mal dein Formular dazu

                          Kommentar


                          • #14
                            Code:
                            <?php
                            
                            $Empfaenger = "...";
                            $ip = getenv ("REMOTE_ADDR");
                            
                            if($_REQUEST['senden'])
                            {    
                                if ($_POST['email_address'] !== '') {
                                exit('<h1>Es ist ein Fehler aufgetreten!</h1>Sie haben ein Feld ausgefüllt, das nicht ausgefüllt weden darf.');
                                }
                              else {    
                                $fehler = array();
                                if(empty($_REQUEST['stueck']))
                                        {
                                        $fehler['stueck'] = "Bitte geben Sie eine Stückzahl an!";
                                        }
                                if(empty($_REQUEST['farbe']))
                                        {
                                        $fehler['farbe'] = "Bitte geben Sie eine Farbe an!";
                                        }
                                if(empty($_REQUEST['name']))
                                        {
                                    $fehler['name'] = "Bitte geben Sie Ihren Namen an!";
                                        }
                                if(empty($_REQUEST['email']))
                                        {
                                        $fehler['email'] = "Bitte geben Sie Ihre E-Mail Adresse an!";
                                        }
                                if(empty($_REQUEST['strasse']) || empty($_REQUEST['plzort']))
                                        {
                                        $fehler['strasse'] = "Bitte geben Sie Ihre gesamte Adresse an!";
                                        }                
                                if(count($fehler)>0){
                                        foreach ($fehler as $msg){ 
                                        echo "<p align=\"center\">$msg";
                                        }
                                        echo "<br /><br /><b><a href=\"javascript:history.back();\">zurück</a></b></p>";
                                        }
                                else
                                 {
                                    $Mailbetreff = "Bestellung Taschenkalender";
                            
                                    $Trenner = md5(uniqid(time()));
                            
                                    $Header = "From: ".$_REQUEST['email']; 
                                    $Header .= "\n"; 
                                    $Header .= "MIME-Version: 1.0"; 
                                    $Header .= "\n"; 
                                    $Header .= "Content-Type: multipart/mixed; boundary=$Trenner"; 
                                    $Header .= "\n\n"; 
                                    $Header .= "This is a multi-part message in MIME format"; 
                                    $Header .= "\n"; 
                                    $Header .= "--$Trenner"; 
                                    $Header .= "\n"; 
                                    $Header .= "Content-Type: text/plain"; 
                                    $Header .= "\n"; 
                                    $Header .= "Content-Transfer-Encoding: 8bit"; 
                                    $Header .= "\n\n"; 
                                    $Header .= "Sie haben folgende Nachricht erhalten: \n\n";
                                        if($Formularfeld!="senden" && $Formularfeld!="Anhang")
                                        {
                                            $Header .= "Stueckzahl: ".$stueck."\n";
                                            $Header .= "Motiv: ".$foto."\n";
                                            $Header .= "Bundeslandja: ".$bundeslandja."\n";
                                            $Header .= "Bundesland: " .$bundesland."\n";
                                            $Header .= "Abgerundete Ecken: ".$abgerundeteEcken."\n";
                                            $Header .= "Farbe: ".$farbe."\n";
                                            $Header .= "Andere Farbe (falls vorhanden): ".$farbeandere."\n";
                                            $Header .= "Adresseindruck: \n";
                                            $Header .= "- ".$adresseindruck1."\n";
                                            $Header .= "- ".$adresseindruck2."\n";
                                            $Header .= "- ".$adresseindruck3."\n";
                                            $Header .= "- ".$adresseindruck4."\n";
                                            $Header .= "Sprechzeiten: \n";
                                            $Header .= "- Mo: ".$montag1." / ".$montag2."\n";
                                            $Header .= "- Di: ".$dienstag1." / ".$dienstag2."\n";
                                            $Header .= "- Mi: ".$mittwoch1." / ".$mittwoch2."\n";
                                            $Header .= "- Do: ".$donnerstag1." / ".$donnerstag2."\n";
                                            $Header .= "- Fr: ".$freitag1." / ".$freitag2."\n";
                                            $Header .= "- Sa: ".$samstag1." / ".$samstag2."\n";
                                            $Header .= "Anrede: ".$anrede."\n";
                                            $Header .= "Titel: ".$titel."\n";
                                            $Header .= "Name: ".$name."\n";
                                            $Header .= "Straße: ".$strasse."\n";
                                            $Header .= "PLZ Ort: ".$plzort."\n";
                                            $Header .= "E-Mail: ".$email."\n";
                                            $Header .= "Telefon: ".$telefon."\n";
                                            $Header .= "Telefax: ".$telefax."\n";
                                            $Header .= "Nachricht: ".$nachricht."\n";
                                            $Header .= "IP: ".$ip."\n";
                                        }
                                    $Header .= "\nDatum/Zeit: ";
                                    $Header .= date("d.m.Y H:i:s");
                                    $Header .= "\n"; 
                                    $Header .= "--$Trenner"; 
                                    $Header .= "\n";
                                    if(!empty($_POST['Anhang'])){
                                    $Header .= "Datei: \n";
                                      $Header .= "Es wurde keine Datei übergeben.";
                                    } 
                                    else {
                                    $Header .= "Content-Type: ";
                                      $Header .= $_FILES['Anhang']['type'];
                                      $Header .= "; name=";
                                      $Header .= $_FILES['Anhang']['name'];
                                      $Header .= "\n";
                                      $Header .= "Content-Transfer-Encoding: base64";
                                      $Header .= "\n";
                                      $Header .= "Content-Disposition: attachment; filename=";
                                     $Header .= $_FILES['Anhang']['name'];
                                      $Header .= "\n\n";
                                      $Dateiinhalt = fread(fopen($_FILES['Anhang']['tmp_name'], "r"), $_FILES['Anhang']['size']);
                                      $Header .= chunk_split(base64_encode($Dateiinhalt));
                                      $Header .= "\n";
                                      $Header .= "--$Trenner--";
                                    }
                            
                                    mail($Empfaenger, $Mailbetreff, "", $Header); 
                                    echo"<p align=\"center\"><b>Vielen Dank für Ihre Bestellung!<br />Wir werden uns umgehend bei Ihnen melden!<br /><a href=\"javascript:history.back();\">zurück</a></p><b>";
                               }
                            } }
                            else
                            {
                            ?>
                             
                            <input type="hidden" />Bild anhängen:<input name="Anhang" size="20" type="file" />
                              ...
                            Hab nur mal das reingeschrieben worum es geht, denn das Formular ist ziemlich groß ^^ Hat nicht allles reingepasst jetz


                            oder braucht ihr das ganze formular? Ich hab aber auch absolut keine Ahnung wie ich das Problem lösen kann... nicht mal nen Ansatz..

                            Kommentar


                            • #15
                              Ja ne so war das nicht gedacht, ich wollte nur den reinen html code des formulars und wenns geht den kompletten

                              Kommentar

                              Lädt...
                              X