• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Formular: Fehler-Meldung beim Abschicken

mel

Neues Mitglied
Hallo zusammen,

ich bin absoluter Anfänger was PHP anbelangt... habe bei einem Formular ein PHP-Skript ("check.php") hinterlegt, in dem die Empfänger-Adresse angegeben ist und die Formular-Felder geprüft werden sollen. Hab mich mittels eines Buches, das wohl auch nicht mehr das neueste ist, durchgekämpft, ist also wahrscheinlich etwas umständlich.

Leider kommt beim Abschicken immer diese Fehlermeldung:
Parse error
: syntax error, unexpected T_VARIABLE in /serv/www/www.xyz.de/data/check.php on line 80

Hier mein PHP-Code (wie gesagt: ziemlich stümperhaft vermutlich):

PHP:
<?php
 <?php
  
  $vorname=$HTTP_POST_VARS['vorname'];
  $nachname=$HTTP_POST_VARS['nachname'];
  $strasse=$HTTP_POST_VARS['strasse'];
  $hausnummer=$HTTP_POST_VARS['hausnummer'];
  $plz=$HTTP_POST_VARS['plz'];
  $ort=$HTTP_POST_VARS['ort'];
  $telefon=$HTTP_POST_VARS['telefon'];
  $mail=$HTTP_POST_VARS['mail'];
  $nachricht=$HTTP_POST_VARS['nachricht'];
    
  $zeichen_name="aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZäÄöÖüÜß- ";
  $zeichen_strasse="0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZäÄöÖüÜß -. ";
  $zeichen_hausnummer="0123456789- ";
  $zeichen_plz="0123456789";
  $zeichen_telefon="0123456789/-+()";
  $zeichen_mail="0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrR sStTuUvVwWxXyYzZ-._@";
  $zeichen_nachricht="0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZäÄöÖüÜß -./-+()!$%&/=?€@*'#_<>|²³{[]}`´° ";
  $a=0;
  $b="";
  $laenge=0;
  
  
  if($mail!="") {
      $mailtext.="Vorname: ";
  $mailtext=$vorname;
      $mailtext.="\n";
  
      $mailtext.="Nachname: ";
      $mailtext=$nachname;
      $mailtext.="\n";
  
      $mailtext.="Strasse: ";
      $mailtext=$strasse;
      $mailtext.="\n";
  
      $mailtext.="Hausnummer: ";
      $mailtext=$hausnummer;
      $mailtext.="\n";
  
      $mailtext.="Postleitzahl: ";
      $$mailtext=$plz;
      $mailtext.="\n";
  
      $mailtext.="Ort: ";
      $mailtext=$ort;
      $mailtext.="\n";
  
      $mailtext.="Telefon: ";
      $mailtext=$telefon;
      $mailtext.="\n"; 
  
      $mailtext.="E-Mail-Adresse: ";
      $mailtext=$mail;
      $mailtext.="\n"; 
  
      $mailtext.="Nachricht: ";
      $mailtext=$nachricht;
      $mailtext.="\n"; 
  
      $absender="From:";
      $absender.=$mail;
  
      $antwort="Vielen Dank für Ihre Anfrage!\n"
      $antwort.="Wir werden diese schnellstmöglich bearbeiten und uns mit Ihnen in Verbindung setzen."
      $antwort.="\n\n--------------\n\nDas war Ihre Anfrage:\n\n";
      $antwort.=$nachricht;
  
      mail("[email protected]","Ihre Anfrage","$mailtext,$absender);
      mail($mail, "Re: Ihre Anfrage",$antwort,"From: [email protected] \nBCC: [email protected]");
  
  print("Ihre Anfrage wurde erfolgreich verschickt.");
  
      }
      else {
          print("Sie haben keine E-Mail-Adresse angegeben.<br />");
  print"<a href='xyz.html'>Zur&uuml;ck</a>");
  }
  
  
  if($vorname=="") {
      print("<b>Bitte Vornamen eingeben</b><br />");
  }
  else {
      $laenge=strlen($vorname);
      for($a=0;$a<$laenge;$a++) {
  $b=substr($vorname,$a,1);
          if(strstr($zeichen_name,$b)==false) {
              print("<b>Vorname: Ung&uuml;ltige Zeichen, bitte &uuml;berpr&uuml;fen</b><br />");
              break;
          }
      }        
  }
  
  
  if($nachname=="") {
      print("<b>Bitte Nachnamen eingeben</b><br />");
  }
  else {
      $laenge=strlen($nachname);
      for($a=0;$a<$laenge;$a++) {
  $b=substr($nachname,$a,1);
          if(strstr($zeichen_name,$b)==false) {
              print("<b>Nachname: Ung&uuml;ltige Zeichen, bitte &uuml;berpr&uuml;fen</b><br />");
              break;
          }
      }        
  }
  
  
  if($strasse=="") {
      print("<b>Bitte Strasse eingeben</b><br />");
  }
  else {
      $laenge=strlen($strasse);
      for($a=0;$a<$laenge;$a++) {
  $b=substr($strasse,$a,1);
          if(strstr($zeichen_strasse,$b)==false) {
              print("<b>Strasse: Ung&uuml;ltige Zeichen, bitte &uuml;berpr&uuml;fen</b><br />");
              break;
          }
      }        
  }
  
  
  if($hausnummer=="") {
      print("<b>Bitte Hausnummer eingeben</b><br />");
  }
  
  else {
      $laenge=strlen($hausnummer);
      for($a=0;$a<$laenge;$a++) {
  $b=substr($hausnummer,$a,1);
          if(strstr($zeichen_hausnummer,$b)==false) {
              print("<b>Hausnummer: Ung&uuml;ltige Zeichen, bitte &uuml;berpr&uuml;fen</b><br />");
              break;
          }
      }        
  }
  
  
  
  if($plz=="") {
      print("<b>Bitte Postleitzahl eingeben</b><br />");
  }
  else {
      $laenge=strlen($plz);
      for($a=0;$a<$laenge;$a++) {
  $b=substr($plz,$a,1);
          if(strstr($zeichen_plz,$b)==false) {
              print("<b>Postleitzahl: Bitte nur Zahlen eingeben, keine Buchstaben</b><br />");
              break;
          }
      }        
  }
  
  
  
  if($ort=="") {
      print("<b>Bitte Ort eingeben</b><br />");
  }
  }
  else {
      $laenge=strlen($ort);
      for($a=0;$a<$laenge;$a++) {
  $b=substr($ort,$a,1);
          if(strstr($zeichen_name,$b)==false) {
              print("<b>Ort: Ung&uuml;ltige Zeichen, bitte &uuml;berpr&uuml;fen</b><br />");
              break;
          }
      }        
  }
  
  
  
  if($telefon=="") {
      print("<b>Bitte Telefonnummer eingeben</b><br />");
  }
  else {
      $laenge=strlen($telefon);
      for($a=0;$a<$laenge;$a++) {
  $b=substr($telefon,$a,1);
          if(strstr($zeichen_telefon,$b)==false) {
              print("<b>Telefonnummer: Bitte nur Zahlen eingeben, keine Buchstaben</b><br />");
              break;
          }
      }        
  }
  
  
  if($mail=="") {
      print("<b>Bitte E-Mail-Adresse eingeben</b><br />");
  }
  else {
      $laenge=strlen($mail);
      for($a=0;$a<$laenge;$a++) {
          $b=substr($mail,$a,1);
          if(strstr($zeichen_mail,$b)==false) {
  print("<b>E-Mail-Adresse: Ung&uuml;ltige Zeichen, bitte &uuml;berpr&uuml;fen</b><br />");
              break;
          }
      }        
  }
  
  
  ?>
?>
 
Zuletzt bearbeitet:
Werbung:
$HTTP_POST_VARS ist veraltet, das verwerndet man seit ende PHP3 nicht mehr.

PHP:
<?php
      $antwort="Vielen Dank für Ihre Anfrage!\n"
      $antwort.="Wir werden diese schnellstmöglich bearbeiten und uns mit Ihnen in Verbindung setzen."
?>

hier fehlen semikola.

Nils aka XraYSoLo
 
Parse error: syntax error, unexpected T_VARIABLE in /serv/www/www.xyz.de/data/check.php on line 80
Neben den Fehler den Nils gefunden hat, ist nähe Zeile 80 hier noch ein Schreibfehler:
PHP:
  print"<a href='akquise.html'>Zur&uuml;ck</a>");
Mfg

Edit: Folgende Fehler noch gefunden:
PHP:
      $mailtext.="Nachname: ";
      $mailtext=$nachname; ## (hier wird $mailtext überschrieben, sowie auch die folgenden $mailtext=xxx (fehlender Punkt))
      $mailtext.="\n";

  mail("[email protected]","Ihre Anfrage","$mailtext,$absender);
 
Zuletzt bearbeitet:
Werbung:
Wo Du Dir die Antwort zusammensetzt, fehlen Dir in den ersten beiden Zeilen (beim Antwort zusammensetzen) die Semikolons.

Gruß thuemmy

PS. da war ich wohl etwas arg langsam...
 
Hi Leute,

danke erstmal für eure Tipps... hab das mal korrigiert und das Formular lässt sich nun abschicken... halleluja :D

2 Probleme hab ich aber noch:

1. Die Umlaute, Sonderzeichen.. werden in der Mail nicht richtig dargestellt. Hab versucht das mittels HTML-Entities zu lösen, aber funktioniert nicht. Was muss ich denn eintragen, dass die Zeichen richtig übertragen werden?

2. Problem ist auch noch, dass ich ja eigentlich Zeichen für jedes Feld vorgegeben hab, die enthalten sein dürfen und nach denen entsprechend geprüft wird. Bei ungültigen Zeichen kommt zwar eine entsprechende Meldung, das Formular lässt sich aber dennoch abschicken. Wie kann ich denn verhindern, dass es abgeschickt wird? Sonst hat das ja keinen Sinn..

Beispiel:
Ihre Anfrage wurde erfolgreich verschickt.Nachname: Ungültige Zeichen, bitte überprüfen

Grüße
mel
 
Werbung:
1. Die Umlaute, Sonderzeichen.. werden in der Mail nicht richtig dargestellt. Hab versucht das mittels HTML-Entities zu lösen, aber funktioniert nicht. Was muss ich denn eintragen, dass die Zeichen richtig übertragen werden?
Dazu musst du der Mail den Zeichensatz im Header angeben, den du verwenden willst.
 
in ergänzung zu struppi: utf8_encode() wirkt dann und wann wunder, wenn sich zeichensätze beißen.
anbei, tausch' mal sämtliche $HTTP_POST_VARS gegen $_POST aus. ich kenne server, die die alten globalen gar nicht mehr ausführen.

Nils aka XraYSoLo
 
Werbung:
zwei variablen können nicht mit kommata getrennt werden.

PHP:
<?php
$mailtext .= $vorname.",".$nachname;
?>

Nils aka XraYSoLo
 
zwei variablen können nicht mit kommata getrennt werden.

PHP:
<?php
$mailtext .= $vorname.",".$nachname;
?>
Nils aka XraYSoLo

danke, leider hatte ich meine Frage wohl vorhin in dem Moment gelöscht, als du geantwortet hattest... hatte nämlich die Lösung schon gefunden gehabt. Aber danke trotzdem :D

Ich hab nun aber noch nach wie vor das Problem, dass sich mein Formular abschicken lässt, auch wenn ungültige Zeichen in eines der Felder eingetragen wird. Wo liegt denn da der Fehler in meinem Code?

Beispiel:
Ihre Anfrage wurde erfolgreich verschickt. Strasse: Ungültige Zeichen, bitte überprüfen
 
Ich hab nun aber noch nach wie vor das Problem, dass sich mein Formular abschicken lässt, auch wenn ungültige Zeichen in eines der Felder eingetragen wird. Wo liegt denn da der Fehler in meinem Code?
Nun, zum einen: Welcher Sinn steht hinter deinen "break"'s? Soweit ich weis, unterbricht es nur Schleifen und Switch-artike Dinge.

Deine Abfragen der Eingaben sind sehr... "plump" gestaltet. Du solltest nicht if $var == "" Prüfen... Dafür gibt es empty oder isset.
Zudem solltest du die Benutzereingaben kontrollieren, um "schädlichen Code" abzuwehren. Ich behaupte, wenn du mir ein Forumlar mit diesem Script vor gibst, kann ich mit deinem jetzigen Script Werbe/Spammails an tausende E-Mail Adressen versenden.

Das Problem an deinem Script ist auch, das du die Abfragen der Vars auf Inhalt ganz am Ende gesetzt hast, also nachdem die E-Mail schon versendet wurde. Logischer weise sollte hier klar sein, das hier die Abfragen keinen Sinn ergeben.

Ich hoffe, ich konnte dir einen Schirtt zur Problemlösung einblick verschaffen.

Mfg
 
Werbung:
@mel:

Zudem: DRY -- don't repeat yourself. Hier mal beispielhaft ein entsprechend überarbeiteter Code. (Die Sicherheitsbedenken bleiben bestehen.) Anstatt der langen Buchstaben-Prüfmuster solltest du dir mal reguläre Ausdrücke anschauen oder die Überprüfung ganz weglassen. Eine Hausnummer kann zum Beispiel auch "34, Appartement 6B2" lauten, Leute heißen "André" oder "Nikolaevič".

PHP:
<?php

function check($value, $field)
{
    if (empty($value)) {
        return array('Bitte ' . $field['desc'] . ' angeben');
    }

    $test   = $field['check'];
    $laenge = strlen($value);

    for ($a = 0; $a < $laenge; $a++) {
        if (strstr($test, substr($value, $a, 1)) === false) {
            return array($field['desc'] . ': Ungültige Zeichen, bitte überprüfen');
        }
    }

    return array();
}

/* Testdaten */
$_POST['vorname']    = 'Herbert';
$_POST['nachname']   = 'Meyer';
$_POST['strasse']    = 'Nachtigallenstraße';
$_POST['hausnummer'] = '12';
$_POST['plz']        = '12345';
$_POST['telefon']    = '12345-4321';
$_POST['mail']       = '[email protected]';
$_POST['nachricht']  = 'Hallo Welt!';

$fields = array();
$data   = array();
$errors = array();

$fields['vorname']    = array('desc'  => 'Vorname',
                              'check' => 'aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZäÄöÖüÜß- ');
$fields['nachname']   = array('desc'  => 'Nachname',
                              'check' => 'aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZäÄöÖüÜß- ');
$fields['strasse']    = array('desc'  => 'Straße',
                              'check' => '0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZäÄöÖüÜß -. ');
$fields['hausnummer'] = array('desc'  => 'Hausnummer',
                              'check' => '0123456789- ');
$fields['plz']        = array('desc'  => 'PLZ',
                              'check' => '0123456789');
$fields['telefon']    = array('desc'  => 'Telefon',
                              'check' => '0123456789/-+()');
$fields['mail']       = array('desc'  => 'Mail',
                              'check' => '0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrR sStTuUvVwWxXyYzZ-._@');
$fields['nachricht']  = array('desc'  => 'Nachricht',
                              'check' => '0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZäÄöÖüÜß -./-+()!$%&/=?€@*\'#_<>|²³{[]}`´° ');

// POST-Daten auslesen
foreach ($fields as $key => $unused) {
    $data[$key] = (isset($_POST[$key])) ? trim($_POST[$key]) : '';
}

// Daten überprüfen
foreach ($data as $key => $value) {
    $errors = array_merge($errors, check($value, $fields[$key]));
}

if (count($errors) == 0) {
    $mailtext = '';
    foreach ($data as $key => $value) {
        $mailtext .= $fields[$key]['desc'] . ': ' . $value . "\n";
    }

    $absender = "From: " . $data['mail'];

    $antwort = "Vielen Dank für Ihre Anfrage!\n"
             . "Wir werden diese schnellstmöglich bearbeiten und uns mit Ihnen in Verbindung setzen."
             . "\n\n--------------\n\nDas war Ihre Anfrage:\n\n"
             . $data['nachricht'];

    if (!mail("[email protected]", "Ihre Anfrage", $mailtext, $absender)) {
        $errors[] = 'Mail 1 konnte nicht verschickt werden.';
    }
    if (!mail($data['mail'], "Re: Ihre Anfrage", $antwort,
        "From: [email protected] nBCC: [email protected]")
    ) {
        $errors[] = 'Mail 2 konnte nicht verschickt werden.';
    }
}



/* Ausgabe */

if (count($errors) > 0) {
    foreach ($errors as $error) {
        echo '<p><strong>' . htmlspecialchars($error) . '</strong></p>';
    }
} else {
    echo 'Ihre Anfrage wurde erfolgreich verschickt.';
}
 
Zurück
Oben