Formular mit Upload-Funktion

Gesperrt
MarcoB
Beiträge: 3
Registriert: Do 3. Nov 2005, 13:04
Kontaktdaten:

Formular mit Upload-Funktion

Beitrag von MarcoB » Mi 9. Nov 2005, 15:20

Hallo

Habe versucht das Webforumlar mit Upload Funktion so zu erweitern das mehrer datein hochgeladen werden können. Allerdings lädt er immer nur 3 Datein hoch und beim Empfang überschreibt er Datei 2 und 3 und ersetzt sie durch Datei 1. Heißt es kommt 3 mal Datei 1 an aber Datei 2 und 3 behalten ihre Namen. Datei 4 hingegen wird gar nicht beachtet.

Hier mal die Codes vielleicht kann mir ja jemand helfen

Das Formular

Code: Alles auswählen

<span class="Normal"> 
<table style="" border="0" cellpadding="1" width="100%"> 
<tbody> 
<tr> 
<td><span class="Normal">Firma:</span></td> 
<td></td> 
<td>###name:Firma; type:text; valid:text; size:50;mandatory:false###</td></tr> 
<tr> 
<td><span class="Normal">Anrede:</span></td> 
<td></td> 
<td>###name:Anrede; type:select; valid:text; size:1; option:bitte auswählen; option:Herr; option:Frau; value:bitte Auswählen###</td></tr> 
<tr> 
<td><span class="Normal">Name:*</span></td> 
<td></td> 
<td>###name:Name; type:text; valid:text; size:50; mandatory:true###</td></tr> 
<tr> 
<td><span class="Normal">Straße, Nr.:*</span></td> 
<td></td> 
<td>###name:Strasse; type:text; valid:text; size:40; mandatory:true### 
###name:Nr; type:text; valid:integer; size:5; mandatory:true###</td></tr> 
<tr> 
<td><span class="Normal">PLZ, Ort:*</span></td> 
<td></td> 
<td>###name:PLZ; type:text; valid:integer; size:5; mandatory:true### ###name:Ort; type:text; valid:text; size:40; mandatory:true###</td></tr> 
<tr> 
<td><span class="Normal">Land:</span></td> 
<td></td> 
<td>###name:Land; type:text; valid:text; size:50;mandatory:false###</td></tr> 
<tr> 
<td><span class="Normal">Telefon:*</span></td> 
<td></td> 
<td>###name:Telefon; type:text; valid:string; size:50; mandatory:true###</td></tr> 
<tr> 
<td><span class="Normal">E-Mail:*</span></td> 
<td></td> 
<td>###name:E-Mail; type:text; valid:email; size:50; mandatory:true###</td></tr> 
<tr> 
<td><span class="Normal">Datei anhängen:</span></td> 
<td></td> 
<td><input name="userfile1" type="file"> </td></tr> 
<tr> 
<td><span class="Normal">Datei anhängen:</span></td> 
<td></td> 
<td><input name="userfile2" type="file"> </td></tr> 
<tr> 
<td><span class="Normal">Datei anhängen:</span></td> 
<td></td> 
<td><input name="userfile3" type="file"> </td></tr> 
<tr> 
<td><span class="Normal">Datei anhängen:</span></td> 
<td></td> 
<td><input name="userfile4" type="file"> </td></tr> 
<tr> 
<td><span class="Normal">Mit der Bitte um:</span></td> 
<td></td> 
<td>###name:Betreff; type:select; valid:text; size:1; option:bitte 
auswählen; option:ein Angebot; option:Rückruf; value:bitte Auswählen###</td></tr> 
<tr> 
<td><span class="Normal">Mitteilung:</span></td> 
<td></td> 
<td>###name:Mitteilung; type:textarea; valid:string; rows:4; cols:38###</td></tr> 
<tr> 
<td colspan="3"> 
<p align="left"><br><input value="Anfrage senden" type="submit"> <br><br><br><span class="Normal">Diese Email wird an <a href="mailto:info@xxx.de">info@xxx.de</a> versendet. Felder die mit einem "*" gekennzeichnet sind müssen ausgefüllt werden.<br><br>Vielen Dank für Ihre Nachricht.</span></p></td></tr></tbody></table></span>
Input

Code: Alles auswählen

/*********************************************** 
* CONTENIDO MODUL - INPUT 
* 
* Modulname   :       w3concepts.form.v1 
* Author      :     Andreas Kummer 
* Copyright   :     mumprecht & kummer w3concepts 
* Created     :     20-08-2004 
* Modified    :     18-10-2005 (by halousi) 
************************************************/ 
echo "<table cellspacing=\"0\" cellpadding=\"10\" border=\"0\"><tr valign=\"top\">"; 
echo "<tr><td class=\"text_medium\">Zieladresse (alias@mydomain.com):</td>"; 
echo "<td><input type=\"text\" name=\"CMS_VAR[0]\" value=\"CMS_VALUE[0]\" size=\"30\" class=\"text_medium\" /></td></tr>"; 
echo "<tr class=\"text_medium\"><td>Betreff:</td>"; 
echo "<td><input type=\"text\" name=\"CMS_VAR[1]\" value=\"CMS_VALUE[1]\" size=\"30\" /></td></tr>"; 
echo "<tr class=\"text_medium\"><td>Antwortadresse (alias@mydomain.com):</td>"; 
echo "<td><input type=\"text\" name=\"CMS_VAR[2]\" value=\"CMS_VALUE[2]\" size=\"30\" /></td></tr>"; 
echo "<tr class=\"text_medium\"><td>Emailname (z.B. Vorname Name):</td>"; 
echo "<td><input type=\"text\" name=\"CMS_VAR[3]\" value=\"CMS_VALUE[3]\" size=\"30\" /></td></tr>"; 
echo "<tr class=\"text_medium\"><td>Hintergrundfarbe bei Fehlern (z.B. red):</td>"; 
echo "<td><input type=\"text\" name=\"CMS_VAR[4]\" value=\"CMS_VALUE[4]\" size=\"30\" /></td></tr>"; 
echo "</table>";
OutPut

Code: Alles auswählen

<?php 

/*********************************************** 
* CONTENIDO MODUL - OUTPUT 
* 
* Modulname   :     w3concepts.form.v1 
* Author      :     Andreas Kummer 
* Copyright   :     mumprecht & kummer w3concepts 
* Created     :     20-08-2004 
* Modified    :     20-08-2004 
* Modified    :     14-04-2005 by Mathias Rauh <m.rauh@rzwei.de> 
                         18-10-2005 by halousi (jetzt mit datei-anhang) 
*               - Support for attachments added 
************************************************/ 

class w3form { 

   var $email, $aufgedroeselt, $form, $formularFeld, $uid; 

   function w3form() { 
   } 

   function setAktion($aktion) { // Action-Adresse in Klasse übernehmen 
      $this->form['aktion'] = $aktion; 
   }    
    
   // PRIVATE 
   function sendEmail() { 
      $uid = md5(uniqid(rand())); 
      $this->aufdroeseln($this->suppress('sent','Submit')); 
      $this->generateEmailMessage(); 
      $header .= "MIME-Version: 1.0\n"; 
      $header .= "X-Mailer: PHP\n"; 
      $header .= "From: {$this->email['from']['name']} <{$this->email['from']['email']}>\n"; 
      $header .= "Reply-To: {$this->email['from']['email']}\n"; 
      $header .= "Cc: {$this->email['from']['email']}\n"; 
      $header .= "Return-Path: {$this->email['from']['email']}\n"; 
      if ($_FILES['userfile1']['name']) { 
         $datei1 = fread(fopen($_FILES['userfile1']['tmp_name1'],"r"),filesize($_FILES['userfile1']['tmp_name']));
         $datei1 = chunk_split(base64_encode($datei1));
		 
		 // 2
		 if ($_FILES['userfile2']['name'])
		 	{
			$datei2 = fread(fopen($_FILES['userfile2']['tmp_name'],"r"),filesize($_FILES['userfile2']['tmp_name']));
			$datei2 = chunk_split(base64_encode($datei2));
			}
			
		 // 3
		 if ($_FILES['userfile3']['name'])
		 	{
			$datei3 = fread(fopen($_FILES['userfile3']['tmp_name'],"r"),filesize($_FILES['userfile3']['tmp_name']));
			$datei3 = chunk_split(base64_encode($datei3));
			}
			
		 // 4
		 if ($_FILES['userfile4']['name'])
		 	{
			$datei4 = fread(fopen($_FILES['userfile4']['tmp_name'],"r"),filesize($_FILES['userfile4']['tmp_name']));
			$datei4 = chunk_split(base64_encode($datei4));
			}
          
         $header .= "Content-Type: multipart/mixed; boundary=$uid\n"; 
         $header .= "--$uid\n"; 
         $header .= "Content-Type: text/plain\n"; 
         $header .= "Content-Transfer-Encoding: 7bit\n"; 
         $header .= $this->email['message']; 
         $header .= "\n\n--$uid\n"; 

         $header .= "Content-Type: {$_FILES['userfile1']['type']}; name=\"{$_FILES['userfile1']['name']}\"\n"; 
         $header .= "Content-Disposition: attachment\n"; 
         $header .= "Content-Transfer-Encoding: base64\n\n"; 
         $header .= "$datei1\n"; 
         $header .= "--$uid\n";
		 
		 // 2
		 if($_FILES['userfile2']['name'])
		 	{
			$header .= "Content-Type: {$_FILES['userfile2']['type']}; name=\"{$_FILES['userfile2']['name']}\"\n";
			$header .= "Content-Disposition: attachment\n";
			$header .= "Content-Transfer-Encoding: base64\n\n";
			$header .= "$datei2\n";
			$header .= "--$uid\n";
			}
			
		 // 3
		 if($_FILES['userfile3']['name'])
		 	{
			$header .= "Content-Type: {$_FILES['userfile3']['type']}; name=\"{$_FILES['userfile3']['name']}\"\n";
			$header .= "Content-Disposition: attachment\n";
			$header .= "Content-Transfer-Encoding: base64\n\n";
			$header .= "$datei3\n";
			$header .= "--$uid\n";
			}
			
		 // 4
		 if($_FILES['userfile4']['name'])
		 	{
			$header .= "Content-Type: {$_FILES['userfile4']['type']}; name=\"{$_FILES['userfile4']['name']}\"\n";
			$header .= "Content-Disposition: attachment\n";
			$header .= "Content-Transfer-Encoding: base64\n\n";
			$header .= "$datei4\n";
			$header .= "--$uid\n";
			}
		 
         mail($this->email['adresses'],$this->email['subject'],'',$header); 
      } 
      else { 
         $header .= "Content-type: text/plain; charset=iso-8859-1\n"; 
         mail($this->email['adresses'],$this->email['subject'],$this->email['message'],$header); 
      } 
   } 

   // PRIVATE 
   function aufdroeseln($aufzudroeseln,$prefix = '') { 
      foreach ($aufzudroeseln as $key => $value) { 
         if (is_array($value)) { 
            $this->aufdroeseln($value,$key." "); 
         } else { 
            $this->aufgedroeselt["{$prefix}{$key}"] = $value; 
         } 
      } 
   } 

   // PRIVATE 
   function add2Message($key,$value) { 
      if (strlen($key) > 15 OR strlen($value) > 34) { 
         $this->email['message'] .= "$key\n$value\n"; 
      } else { 
      $this->email['message'] .= $key; 
      $this->email['message'] .= str_repeat(' ',15-strlen($key)); 
      $this->email['message'] .= "$value\n"; 
      } 
   } 

   // PRIVATE 
   function generateEmailMessage() { 
      if ($this->aufgedroeselt) foreach ($this->aufgedroeselt as $key => $value) { 
         $this->add2Message($key,$value);                    
      } // end if 
   } 

   // PRIVATE 
   function suppress() { 
      $suppress = func_get_args(); 
      foreach ($_POST as $key => $value) { 
         if (array_search($key,$suppress) === false) $fields[$key] = $value; 
      } 
      return $fields; 
   } 



   // PUBLIC 
   function addEmailAdress($email) { 
      if (empty($this->emailAdresses)) { 
         $this->email['adresses'] .= "$email"; 
      } else { 
         $this->email['adresses'] .= ", $email"; 
      } 
   } 

   // PUBLIC 
   function setEmailSubject($subject) { 
      $this->email['subject'] = $subject; 
   } 

   // PUBLIC 
   function setEmailFrom($email,$name) { 
      $this->email['from']['email'] = $email; 
      $this->email['from']['name'] = $name; 
   } 

   // PUBLIC 
   function setForm($form) { 
      $this->form['form'] = $form; 
   } 

   // PUBLIC 
   function setAnswer($answer) { 
      $this->form['answer'] = $answer; 
   } 

   // PUBLIC 
   function setBackgroundError($color) { 
      $this->form['colorError'] = $color; 
   } 

   // PRIVATE 
   function formularInterpretation(&$formular) { 
      $felder = split('###',$formular); 
      for ($i=1;$i<count($felder);$i=$i+2) { 
         $attributte = split(';',trim($felder[$i])); 
         foreach ($attributte as $attribut) { 
            $namewert = split(':',trim($attribut)); 
            if ($namewert[0] != 'option' && $namewert[0] != 'optionvalue') { 
               $feld["{$felder[$i]}"]["{$namewert[0]}"] = $namewert[1]; 
            } else { 
               $feld["{$felder[$i]}"]["{$namewert[0]}"][] = $namewert[1]; 
            } 
         } 
      } 
      return $feld; 
   } 

   // PRIVATE 
   function formularAusgabe($sent = false) { 
      echo '<form action="'.$this->form['aktion'].'" method="POST" enctype="multipart/form-data">'."\n"; 
      echo '<input type="hidden" name="sent" value="true" />'; 
      $formular = $this->form['form']; 
      $formulardaten = $this->formularInterpretation($formular); 
      $formular = split('###',$formular); 
      foreach ($formular as $formularteil) { 
         if (!empty($formulardaten["{$formularteil}"])) { 
            $this->formularFeld($formulardaten["{$formularteil}"],$sent); 
         } else { 
            echo $formularteil; 
         } 
      } 
      echo '</form>'; 
   } 

   // PRIVATE 
   function formularFeld($attribute,$sent) { 
      $parameter = "name=\"{$attribute['name']}\""; 
      if ($sent && !$this->formularFeldKorrekt($attribute)) $style ="style=\"background-color:{$this->form['colorError']};\""; 

      switch ($attribute['type']) { 
         case 'file': 
            if (!empty($attribute['size'])) $parameter .= " size=\"{$attribute['size']}\""; 
            echo "<input type=\"file\" $parameter class=\"standard\" $style />"; 
            break; 
         case 'text': 
            if (!empty($attribute['size'])) $parameter .= " size=\"{$attribute['size']}\""; 
            if (!empty($attribute['value'])) $value = $attribute['value']; 
            if (!empty($_POST["{$attribute['name']}"])) $value = $_POST["{$attribute['name']}"]; 
            echo "<input type=\"text\" $parameter value=\"$value\" class=\"standard\" $style />"; 
            break; 
         case 'password': 
            echo "<input type=\"password\" $parameter value=\"$value\" $style />"; 
            break; 
         case 'textarea': 
            echo "<textarea name=\"{$attribute['name']}\" cols=\""; 
            echo (empty($attribute['cols']))?('20'):($attribute['cols']); 
            echo "\" rows=\""; 
            echo (empty($attribute['rows']))?('2'):($attribute['rows']); 
            echo "\" wrap=\"virtual\" class=\"standard\" $style>$value</textarea>"; 
            break; 
         case 'select': 
            echo "<select $parameter class=\"standard\" $style>"; 
            for ($i=0;$i<count($attribute['option']);$i++) { 
               if (!empty($attribute['optionvalue'][$i])) { 
                  if (!empty($_POST["{$attribute['name']}"]) && $_POST["{$attribute['name']}"] == $attribute['optionvalue'][$i]) { 
                     echo "<option value=\"{$attribute['optionvalue'][$i]}\" selected=\"selected\">{$attribute['option'][$i]}</option>\n"; 
                  } else { 
                     if (empty($_POST["{$attribute['name']}"]) && !empty($attribute['optionvalue'][$i]) && $attribute['optionvalue'][$i] == $attribute['value']) { 
                        echo "<option value=\"{$attribute['optionvalue'][$i]}\" selected=\"selected\">{$attribute['option'][$i]}</option>\n"; 
                     } else { 
                        echo "<option value=\"{$attribute['optionvalue'][$i]}\">{$attribute['option'][$i]}</option>\n"; 
                     } 
                  } 
               } else { 
                  if (!empty($_POST["{$attribute['name']}"]) && $_POST["{$attribute['name']}"] == $attribute['option'][$i]) { 
                     echo "<option selected=\"selected\">{$attribute['option'][$i]}</option>\n"; 
                  } else { 
                     if (empty($_POST["{$attribute['name']}"]) && $attribute['option'][$i] == $attribute['value']) { 
                        echo "<option selected=\"selected\">{$attribute['option'][$i]}</option>\n"; 
                     } else { 
                        echo "<option>{$attribute['option'][$i]}</option>\n"; 
                     } 
                  } 
               } 
            } 
            echo "</select>"; 
            break; 
         case 'checkbox': 
            $formularbezeichner = preg_split('[\[|\]]',$attribute['name']); 
            if ($sent) { 
               if ($_POST["{$formularbezeichner[0]}"]["{$formularbezeichner[1]}"] == $attribute['value']) { 
                  //echo "<input type=\"checkbox\" $parameter value=\"{$attribute['value']}\" checked=\"checked\" class=\"formcheckbox\" />attrval="; 
                  echo "<input type=\"checkbox\" $parameter value=\"{$attribute['value']}\" class=\"formcheckbox\" />attrval="; 
               } else { 
                  echo "<input type=\"checkbox\" $parameter value=\"{$attribute['value']}\" class=\"formcheckbox\" />"; 
               } 
            } else { 
               if (!empty($attribute['selected']) && $attribute['selected'] == 'true') { 
                  echo "<input type=\"checkbox\" $parameter value=\"{$attribute['value']}\" checked=\"checked\" class=\"formcheckbox\" />attrsel="; 
               } else { 
                  echo "<input type=\"checkbox\" $parameter value=\"{$attribute['value']}\" class=\"formcheckbox\" />"; 
               } 
            } 
            break; 
         case 'radio': 
            if (!empty($_POST["{$attribute['name']}"])) { 
               if ($_POST["{$attribute['name']}"] == $attribute['value']) { 
                  echo "<input type=\"radio\" $parameter value=\"{$attribute['value']}\" checked=\"checked\"/>"; 
               } else { 
                  echo "<input type=\"radio\" $parameter value=\"{$attribute['value']}\" />"; 
               } 
            } else { 
               if (!empty($attribute['selected']) && $attribute['selected'] == 'true') { 
                  echo "<input type=\"radio\" $parameter value=\"{$attribute['value']}\" checked=\"checked\"/>"; 
               } else { 
                  echo "<input type=\"radio\" $parameter value=\"{$attribute['value']}\"/>"; 
               } 
            } 
            break; 
      } 
      if ($sent && !$this->formularFeldKorrekt($attribute)) echo "<span style=\"color:{$this->form['colorError']};\">   Bitte ausfüllen.</span>"; 
   } 

   // PRIVATE 
   function formularVollstaendig() { 

      $formular = $this->form['form']; 

      $felder = $this->formularInterpretation($formular); 

      foreach ($felder as $feld) { 
         if (!$this->formularFeldKorrekt($feld)) return false; 
      } 

      return true; 
   } 

   // PRIVATE 
   function success() { 
      $this->sendEmail(); 
      echo $this->form['answer']; 
   } 

   // PRIVATE 
   function formularFeldKorrekt(&$feld) { 

      // prüfung, ob pflichtfeld vorhanden 
      if (!empty($feld['mandatory']) && $feld['mandatory'] == 'true' && empty($_POST["{$feld['name']}"])) return false; 

      // wenn das formularfeld kein pflichtfeld und nicht vorhanden ist, true zurück geben 
      if (empty($_POST["{$feld['name']}"])) return true; 

      // regular expression prüfungen 
      if (!empty($feld['valid']) && $feld['valid'] == 'simpletext' && !eregi("^[öäüéàèâêîça-z-]*$",$_POST["{$feld['name']}"])) return false; 
      if (!empty($feld['valid']) && $feld['valid'] == 'text' && !eregi("^[ .,;!?()öäüéàèâêîça-z0-9-]*$",$_POST["{$feld['name']}"])) return false; 
      //if (!empty($feld['valid']) && $feld['valid'] == 'textmitumbruch' && !eregi("^[ \n\r.,;!?()öäüéàèâêîça-z0-9-]*$",$_POST["{$feld['name']}"])) return false; 
      if (!empty($feld['valid']) && $feld['valid'] == 'integer' && !eregi("^[0-9]*$",$_POST["{$feld['name']}"])) return false; 
      if (!empty($feld['valid']) && $feld['valid'] == 'float' && !eregi("^[0-9]*[.]{0,1}[0-9]*$",$_POST["{$feld['name']}"])) return false; 
      if (!empty($feld['valid']) && $feld['valid'] == 'date' && !eregi("^[0-9]{1,2}.[0-9]{1,2}.[0-9]{2}$",$_POST["{$feld['name']}"])) return false; 
      if (!empty($feld['valid']) && $feld['valid'] == 'email' && !eregi("^[öäüéàèâêîç_a-z0-9-]+(\.[öäüéàèâêîç_a-z0-9-]+)*@[öäüéàèâêîça-z0-9-]+(\.[öäüéàèâêîça-z0-9-]+)*$",$_POST["{$feld['name']}"])) return false; 

      // grössenbereich bei integer und float prüfen 
      if (!empty($feld['minvalue']) && $_POST["{$feld['name']}"] < $feld['minvalue']) return false; 
      if (!empty($feld['maxvalue']) && $_POST["{$feld['name']}"] > $feld['maxvalue']) return false; 

      // längenbereich bei allen typen prüfen 
      if (!empty($feld['minlength']) && strlen($_POST["{$feld['name']}"]) < $feld['minlength']) return false; 
      if (!empty($feld['maxlength']) && strlen($_POST["{$feld['name']}"]) > $feld['maxlength']) return false; 

      return true; 
   } 

   //PUBLIC 
   function process() { 
      if (!isset($_POST['sent'])) { 
         $this->formularAusgabe(); 
      } elseif ($this->formularVollstaendig()) { 
         $this->success(); 
      } else { 
         $this->formularAusgabe(true); 
      } 
   } 

} 

if ($edit) { 
   echo "<span class=\"Ueberschrift\">Formularkonfiguration</span>"; 
   echo "<span class=\"Normal\">Hier ist das Formular sowie der Text einzugeben, der zusammen mit dem Formular ausgegeben werden soll:</span>"; 
   echo "CMS_HTML[0]"; 
} else { 
   $aktion = $auth->url(); // Action-Adresse ist URL    
   $formular = new w3form(); 
   $formular->setAktion("$aktion"); // Action-Adresse an Klasse übergeben 
   $formular->addEmailAdress("CMS_VALUE[0]"); 
   $formular->setEmailSubject("CMS_VALUE[1]"); 
   //$formular->setEmailFrom("CMS_VALUE[2]","CMS_VALUE[3]"); 
   $formular->setEmailFrom($_POST['E-Mail'],"\"".$_POST['Name'].", ".$_POST['Vorname']."\""); 
   $formular->setBackgroundError("CMS_VALUE[4]"); 
   $formular->setForm("CMS_HTML[0]"); 
   $antwort = "<span class=\"Normal\">Vielen Dank für Ihre Anfrage, ".$_POST['Anrede']." ".$_POST['Name'].".<br />\nWir haben Ihre Nachricht erhalten und werden sie umgehend bearbeiten.<br><br>Sie erhalten eine Kopie Ihrer Anfrage an ".$_POST['E-Mail']." gesendet</span>"; 
   $formular->setAnswer("$antwort"); 
   $formular->process(); 
} 

?> 
Wäre schön wenn mir jemand helfen könnte
Gruss
Marco

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Fr 11. Nov 2005, 16:26

ich glaub bei mime sachen musst du dich selbst schlau machen...
das ist jedesmal ein wahnsinns aufwand das zu debuggen...

wenn du ne lösung findest sag bescheid...
*** make your own tools (wishlist :: thx)

Gesperrt