Bei Upload Name mitsenden PHP

Von: , 12.01.2010 03:35 Uhr

Guten Tag,


Ich habe folgendes Problem. Ich habe ein Uploadformular, wo ich den Besuchern meiner Seite die Möglichkeit gebe, ein Bild hochzuladen. Das klappt auch alles wunderbar. Nun möchte ich aber noch, das der User seinen Namen eingeben muss und der mir dann ebenfalls in der Mail mitgeschickt wird. Ich hab schon sehr viel getestet, komme aber nicht weiter.

Hier das Uploadformular

<form method="post" action="upload.php" enctype="multipart/form-data">
<p class="post">Datei auswählen</p><input type="file" name="uploadfile" size="7"/><p class="post">Dein Name</p><input name="Name" size="25" type="text"/><p class="post">Sicherheitscode</p><p class="post"> <img style="vertical-align:middle;" src="captcha_src/capmaker.php" alt="tattoo"/> <input name="cap" type="text" size="7"/></p><p class="post"><input type="submit" value="Datei hochladen"/></p><br/>
</form>

Das Inputfeld "Name" habe ich ja einfach hinbekommen..nun das Actionformular:<br><br>

<?php


$zielordner='upload/'; // ggf. Schreibrechte (CHMOD) erteilen!

$upload_limitieren=0; // mögliche Werte 0 und 1 (aus/an)
$upload_groesse=500; // in Kilobyte

$mailsenden=1; // mögliche Werte 0 und 1 (aus/an)
$emailadresse='[E-Mail-Adresse entfernt]';
$betreff='Neuer Upload';

$captcha_verwenden=1; // mögliche Werte 0 und 1 (aus/an)

$ip_sperre=0; // mögliche Werte 0 und 1 (aus/an)
$ip_sperrzeit=10; // in Minuten


$erlaubte_dateiendungen=array('jpg','jpeg','gif','png');

$erlaubte_mimetypen=array("text/plain","image/pjpg","image/pjpeg","image/gif","image/jpg","image/peng","image/jpeg","image/bmp","image/x-windows-bmp","image/tiff","image/x-tiff","application/plain", "application/x-photoshop","application/octet-stream","application/postscript","application/xms-word","application/mspowerpoint","application/powerpoint","application/vnd.ms-powerpoint","application/x-mspowerpoint","application/excel","application/x-excel","application/vnd.ms-excel","application/x-msexcel","application/zip","application/x-zip","application/x-compressed","application/x-zip-compressed","audio/mid","audio/mp3","application/x-winamp-plugin","interface/x-winamp-skin","audio/x-mp3");




$e[0]="Uploadfehler: Die erlaubte Dateigröße $upload_groesse kb ist überschritten";
$e[1]="Uploadfehler: Die Dateiendung ist nicht erlaubt.";
$e[2]="Uploadfehler: Der Mime-Typ der Datei ist fehlerhaft oder wird nicht unterstützt.";
$e[3]="Beim Upload ist ein Fehler aufgetreten.";
$e[4]="Uploadfehler: Keine Datei ausgewählt oder unbestimmter Fehler aufgetreten";

$e[5]="Der Sicherheitscode (Captcha) ist nicht korrekt";
$e[6]="Die IP-Sperre ist für $ip_sperrzeit Minuten aktiv.";

$e[200]="Der Upload war erfolgreich. Dein Bild wird nach erfolgreicher Prüfung freigeschalten. <br/>Du wirst in 3 Sekunden weitergeleitet. Sollte das nicht funktinieren, klicke bitte auf zurück.";



$datum=date("d.m.Y");
$uhrzeit=date("H:i");
$ausgabe='';


if($captcha_verwenden==1){

session_start();

if(isset($_POST['cap'])){$eingabe=mig($_POST['cap']);
if($eingabe=="" || $eingabe!=$_SESSION['cod']){$fehler=1; $ausgabe=$e[5].'<br>';}}

} //endcaptchaprüfung


if($ip_sperre==1){

##########################
$ip_sperrzeit_sec=$ip_sperrzeit*60;
// Ordner ipsperre durchscannen
$oeffnevz = openDir('ipsperre');
while($filename = readDir($oeffnevz)){
if($filename != "." && $filename != ".."){
// datei entfernen
if(file_exists('ipsperre/'.$filename)){$tsofthefile=filemtime('ipsperre/'.$filename)+$ip_sperrzeit_sec;
// fileatime funkt. scheinbar bei MS nicht richtig daher filemtime
if($tsofthefile<=time())[E-Mail-Adresse entfernt]
##########################



$ip1=$_SERVER['REMOTE_ADDR'];
if($ip1==""){if(getenv(HTTP_X_FORWARDED_FOR)){
$ip=getenv('HTTP_X_FORWARD_FOR');}else{$ip=getenv('REMOTE_ADDR');}}

##########################

if($ip1!=""){
// Prüfen ob IP schon vorhanden
if(file_exists('ipsperre/'.$ip1)){$fehler=1; $ausgabe=$e[6].'<br>';}
//speichern (erst nach erfolgreichem Upload)
/* $nix='';
$iplog = fopen('ipsperre/'.$ip1, "w+");
fwrite($iplog, $nix);
fclose($iplog); */
}
##########################
} //endipsperre



if(!isset($fehler)){

$uploadresult=dotheupload('uploadfile', $zielordner, $upload_limitieren, $upload_groesse, $erlaubte_dateiendungen, $erlaubte_mimetypen, $e, $ip_sperre);

## das dotheupload spuckt Array aus
## [0] wert 0 = Feld nicht gefüllt, kein Upload vorgenommen wert 1= Upload vorgenommen
## [1] wert 0 = Upload nicht erfoglreich wert 1= Upload erfolgreich
## [2] pfad und dateiname
## [3] string mit gesammelten Fehlermeldungen
## [4] Dateiendung (ohne Punkt)
#print_r($uploadresult);

if($uploadresult[0]==1){//Uploaddatei vorhanden
if($uploadresult[1]==0){$ausgabe.=$uploadresult[3];}
else{


###############################
## Mailsenden
if($mailsenden==1 && $emailadresse!="" && $betreff!=""){

$mailtext="

Upload ausgeführt am $datum, $uhrzeit Uhr
Datei: $uploadresult[2]

";


@mail($emailadresse, $betreff, $mailtext, $Name, "\nFrom: $emailadresse <tattoofan uploadformular>");

# manche Provider fordern aus Spamschutzgründen einen Zusatz (-f) im Mailbefehl. Sollte der
# Mailversand trotz mailsenden=1 nicht funktionieren, entfernen Sie das Rautesymbol (#) vor dem
# folgenden Mailbefehl:

# @mail($emailadresse, $betreff, $mailtext, $Name, "\nFrom: $emailadresse <tattoofan uploadformular>","-f $emailadresse");


#############
/* $testmail = fopen("mail.txt", "w+");
fwrite($testmail, $mailtext);
fclose($testmail); */
#############

} //endmailsenden
################################


$ausgabe.=$e[200];}
}else{$ausgabe.=$e[4];}

} //Fehler bei Captcha oder IP vorhanden

echo $ausgabe;
echo '<br><a href="javascript:history.back();">zurück</a><br>';



function dotheupload($feldname, $zielpfad, $upload_limitieren, $size_kb, $allowed_endings=array(), $from_mime=array(), $e=array(),$ip_sperre){


$errnumbers='';
$ucffeldname=ucfirst($feldname);

if($upload_limitieren==1){ //Limitierung eingeschaltet
if($_FILES[$feldname]['size'] > (1000*$size_kb)){$errnumbers.=$e[0].'<br>'; $fehler=1;}
}

if(!$_FILES[$feldname]['name']){$fehler=1; $interner_hinweis=0; /* Uploadfeld nicht gefüllt */ }else{ $interner_hinweis=1;}



if(!$_FILES[$feldname]['error'] && !isset($fehler)){ //

$endung = strrchr($_FILES[$feldname]['name'],'.'); // sucht das letzte Vorkommen e. Punktes
$endung_mp = strtolower($endung); // Endung mit Punkt
$endung = str_replace(".", "", strtolower($endung)); // Punkt weg

$mime = $_FILES[$feldname]['type'];


## Prüfung ob erlaubte Dateiendung okay geht
if(!in_array($endung, $allowed_endings)){$errnumbers.=$e[1].'<br>'; $fehler=1;}
if(!in_array($mime, $from_mime)){$errnumbers.=$e[2].'<br>'; $fehler=1;}


$zielname=str_replace($endung_mp, "", $_FILES[$feldname]['name']);
## Sonderzeichen rausfiltern
$zielname= strtolower(preg_replace('/[^a-zA-Z0-9_.+-]/', '', $zielname));

$pfile=$zielpfad.$zielname.'.'.$endung;


if(!isset($fehler)){

## falls vorhanden, suffix dran, wieder prüfen
$i=0; while(file_exists($pfile)){ $pfile=$zielpfad.$zielname.'_'.$i.'.'.$endung; $i++;}
## ODER
## checken ob eine so benannte datei schon existiert
#if(file_exists($pfile)){$errnumbers.=$e[3].'<br>'; $fehler=1;}

}


if(!isset($fehler)){

## uploadvorgang
@move_uploaded_file($_FILES[$feldname]['tmp_name'], $pfile);
@chmod($pfile, 0644);
## datei exisitert nicht?
if(!file_exists($pfile)){$errnumbers.=$e[3].'<br>'; $fehler=1;}

## wenn Datei exitiert, aber Dateigröße 0Byte, dann weglöschen und ERROR ausgeben.
if (get_size($pfile)=="0"){@unlink($pfile); $errnumbers.=$e[3].'<br>'; $fehler=1; }

}


// wenn bis hierher kein Fehler dann alles roger!
if(!isset($fehler)){$result=1; session_start(); session_unset(); session_start();
##########################
if($ip_sperre==1){
$ip1=$_SERVER['REMOTE_ADDR']; if($ip1==""){if(getenv(HTTP_X_FORWARDED_FOR)){
$ip=getenv('HTTP_X_FORWARD_FOR');}else{$ip=getenv('REMOTE_ADDR');}}
if($ip1!=""){$nix=''; $iplog = fopen('ipsperre/'.$ip1, "w+");
fwrite($iplog, $nix); fclose($iplog); }}
##########################
} else {$result=0;}
##########################


}


$ergebnisse=array(
'0' => $interner_hinweis,
'1' => $result,
'2' => $pfile,
'3' => $errnumbers,
'4' => $endung
);


return $ergebnisse;

} //endfunction


function get_size($path)
{
if(!is_dir($path))return filesize($path);
$dir = opendir($path);
while($file = readdir($dir))
{
if(is_file($path."/".$file))$size+=filesize($path."/".$file);
if(is_dir($path."/".$file) && $file!="." && $file !="..")$size +=get_size($path."/".$file);
}
return $size;
}


function mig($get){
$get=htmlentities(strip_tags($get));
$get=trim($get);
return $get;}

?>
<head>
<meta http-equiv="refresh" content="3; URL=http://www.provider.de/galerie/">
</head>

Wo kommt jetzt der Befehl für den Namen rein? Muss es eine "IF-Anweisung" sein? Ich habe es schon probiert, aber irgendwie komme ich da nicht weiter, da es ein fertiges Script war.

Vielen Dank für die Mühe

10 Antworten zu dieser Frage

  1. Antwort von nach 6 Stunden 0 hilfreich
    Re: Bei Upload Name mitsenden PHP

    Guten Tag,


    Ich habe folgendes Problem. Ich habe ein Uploadformular, wo
    ich den Besuchern meiner Seite die Möglichkeit gebe, ein Bild
    hochzuladen. Das klappt auch alles wunderbar. Nun möchte ich
    aber noch, das der User seinen Namen eingeben muss und der mir
    dann ebenfalls in der Mail mitgeschickt wird. Ich hab schon
    sehr viel getestet, komme aber nicht weiter.

    [...]

    Wo kommt jetzt der Befehl für den Namen rein? Muss es eine
    "IF-Anweisung" sein? Ich habe es schon probiert, aber
    irgendwie komme ich da nicht weiter, da es ein fertiges Script
    war.

    Vielen Dank für die Mühe
    Ich verstehe das Problem nicht ganz. Sie haben ein Formular mit einem Upload-Feld und einem Text-Feld. Sie übergeben das Formular mit POST. Bei der Auswertung des Formulars im Script stehen die Daten unter $_FILES bzw. $_POST zur Verfügung. Ihr Textfeld hat den Namen "cap". Dementsprechend können Sie im Script die Nutzereingabe aus $_POST["cap"] auslesen und auch per Mail weiterleiten.
    Oder was haben Sie vor?

    Beste Grüße,
    Sebastian Flad

    • Antwort von nach 22 Stunden 0 hilfreich
      Re^2: Bei Upload Name mitsenden PHP

      Hallo

      Danke für die Mühe

      Ich habs. habe die Anweisung:
      if(isset($_POST["name"]))
      {
      $name = $_POST["name"];
      }

      eingegeben. Es funktioniert

      Danke

  2. Antwort von nach 7 Stunden 0 hilfreich
    Re: Bei Upload Name mitsenden PHP

    Hallo,

    Wenn der Name in der Email mitgesendet werden soll, kannst du den Wert aus dem Feld in eine Variable eintragen.

    Die Variable sollte in der "IF-Anweisung" sein wo du das Formular absendest ( if(isset($_POST){ .. } ).

    Und bei ## Mailsenden trägst du in den Text die Variable $name o.a. ein.


    Falls dies nicht funktioniert, kann ich dir gerne Hilfe über icq geben: 203994833

    mfg


    --------------------------------------

    • Antwort von nach 10 Stunden 0 hilfreich
      Re^2: Bei Upload Name mitsenden PHP

      Hallo,

      Wenn der Name in der Email mitgesendet werden soll, kannst du
      den Wert aus dem Feld in eine Variable eintragen.

      Die Variable sollte in der "IF-Anweisung" sein wo du das
      Formular absendest ( if(isset($_POST){ .. } ).
      Hier habe ich nun das eingegeben:
      session_start();
      if(isset($_POST['name']));
      if(isset($_POST['cap'])){$eingabe=mig($_POST['cap']);
      if($eingabe=="" || $eingabe!=$_SESSION['cod']){$fehler=1; $ausgabe=$e[5].'<br>';}}
      Und bei ## Mailsenden trägst du in den Text die Variable $name
      o.a. ein.
      Und das habe ich hier gemacht:

      ## Mailsenden
      if($mailsenden==1 && $emailadresse!="" && $betreff!=""){

      $mailtext="

      Upload ausgeführt am $datum, $uhrzeit Uhr durch $name
      Datei: $uploadresult[2]

      ";

      Falls dies nicht funktioniert, kann ich dir gerne Hilfe über
      icq geben: 203994833

      mfg
      Leider hab ich kein ICQ, aber es tut sich dort nichts. Ich kann zwar beim Upload den Namen eingeben, (Feldname ist Name), aber es wird nichts angezeigt!?! Wo liegt mein Denkfehler? Ich bin ein bisschen überfordert.

      MfG

      --------------------------------------

      • Antwort von nach 11 Stunden 0 hilfreich
        Re^3: Bei Upload Name mitsenden PHP


        Hier habe ich nun das eingegeben:
        session_start();
        if(isset($_POST['name']));
        if(isset($_POST['cap'])){$eingabe=mig($_POST['cap']);
        if($eingabe=="" || $eingabe!=$_SESSION['cod']){$fehler=1;
        $ausgabe=$e[5].'<br>';}}

        Ist nicht richtig :D

        Du musst dort wo du Überprüfst ob das Formular abgesendet wurde die Variable vergeben.

        Oder trag genau davor, wo die Email generiert wird, bzw. der Email-Text in eine Variable geschrieben wird, die Variable $name so ein:

        $name = $_POST['Name'];

        Damit sollte es eigentlich funktionieren ;)

        • Antwort von nach 22 Stunden 0 hilfreich
          Re^4: Bei Upload Name mitsenden PHP

          hallo

          ich bedanke mich recht herzlich. es klappt nun wunderbar. danke für die mühe und die geduld. :)

          MfG, Nico

          • Antwort von nach einem Tag 0 hilfreich
            Re^5: Bei Upload Name mitsenden PHP

            Kein problem ;) [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

  3. Antwort von nach 14 Stunden 0 hilfreich
    Re: Bei Upload Name mitsenden PHP

    Guten Tag,
    in die <form> auf der Seite muss
    <input type="text" name="nick"> aber hast du ja soweit und dann in der php datei musst du den Namen wieder empfangen:
    $nick = $_POST["nick"]; einfach oben nach <php
    damit hast du in der Variable $nick den Namen gespeichert. Vorausgesetzt es wurde eingegeben. (eventuell kannst du das mit einer if abfrage abfragen:
    if(isset($_POST["nick"]))
    {
    $nick = $_POST["nick"];
    }
    und dann musst du das noch in den Mailtext mit übergeben, ich ergänze mal das Vorhandene:
    $mailtext="
    Upload ausgeführt am $datum, $uhrzeit Uhr
    Datei: $uploadresult[2]
    Vom: $nick
    ";
    Fertig ist der Lack.
    Wenn du Lust hast, dich näher mit PHP auseinander zu setzen, dann kann ich dir die Seite: http://www.php-einfach.de/ ans Herz legen. Dort ist PHP besonders einfach erklärt.
    Über eine kurze Antwort, ob es geklappt hat, würde ich mich natürlich freuen.
    mfg
    paul

  4. Antwort von nach 14 Stunden 0 hilfreich
    Re: Bei Upload Name mitsenden PHP

    Guten Tag,
    in die <form> auf der Seite muss
    <input type="text" name="nick"> aber hast du ja soweit und dann in der php datei musst du den Namen wieder empfangen:
    $nick = $_POST["nick"]; einfach oben nach <php
    damit hast du in der Variable $nick den Namen gespeichert. Vorausgesetzt es wurde eingegeben. (eventuell kannst du das mit einer if abfrage abfragen:
    if(isset($_POST["nick"]))
    {
    $nick = $_POST["nick"];
    }
    und dann musst du das noch in den Mailtext mit übergeben, ich ergänze mal das Vorhandene:
    $mailtext="
    Upload ausgeführt am $datum, $uhrzeit Uhr
    Datei: $uploadresult[2]
    Vom: $nick
    ";
    Fertig ist der Lack.
    Wenn du Lust hast, dich näher mit PHP auseinander zu setzen, dann kann ich dir die Seite: http://www.php-einfach.de/ ans Herz legen. Dort ist PHP besonders einfach erklärt.
    Über eine kurze Antwort, ob es geklappt hat, würde ich mich natürlich freuen.
    mfg
    paul

    • Antwort von nach 22 Stunden 0 hilfreich
      Re^2: Bei Upload Name mitsenden PHP

      Hallo Paul

      PEREKT!!!

      Danke, es funktioniert :)

      MfG, Nico

Jetzt auf diese Frage antworten.