sdgfnnfg433d: Kontaktformular: methode Post geht nicht

Hi, mein Kontaktformular funktioniert leider nicht so wie es soll. Es gibt eine Fehlermeldung, dass method Post nicht erlaubt sei. Ich hoffe ihr könnt mir da helfen:

 <!DOCTYPE html> 
<html>
<head>
<meta charset="utf-8">
<title>Titel</title>
<link rel="stylesheet" href="style.css">
</head>
<body>

<form action="kontaktformular.php" method="post">
 <div id="kontaktformular">		
 <div class="kontaktformular_spalte"><div class="kontaktformular_bezeichnung">Vorname:</div> <input class="kontaktformular_feld" type="text" name="vorname" /></div>
 <div class="kontaktformular_spalte"><div class="kontaktformular_bezeichnung">Nachname:</div> <input class="kontaktformular_feld" type="text" name="nachname" /></div>
 <div class="kontaktformular_spalte"><div class="kontaktformular_bezeichnung">E-Mail:</div> <input class="kontaktformular_feld" type="text" name="e-mail" /></div>
 <div class="kontaktformular_spalte"><div class="kontaktformular_bezeichnung">Telefon:</div> <input class="kontaktformular_feld" type="text" name="telefon" /></div>
 <div class="kontaktformular_spalte"><div class="kontaktformular_bezeichnung">Stra&szlig;e:</div> <input class="kontaktformular_feld" type="text" name="strasse" /></div>
 <div id="kontaktformular_spalte_plz"><div class="kontaktformular_bezeichnung">PLZ:</div> <input id="kontaktformular_feld_plz" type="text" name="plz" /></div>
 <div id="kontaktformular_spalte_ort"><div class="kontaktformular_bezeichnung">Ort: </div><input id="kontaktformular_feld_ort" type="text" name="ort" /></div>
 <div id="kontaktformular_spalte_betreff"><div class="kontaktformular_bezeichnung">Betreff: </div><input id="kontaktformular_feld_betreff" type="text" name="betreff" /></div>
 <div id="kontaktformular_spalte_nachricht"><div class="kontaktformular_bezeichnung">Nachricht: </div><textarea id="kontaktformular_feld_nachricht" type="text" name="nachricht" ></textarea></div>
 <input type="submit" value=" Absenden " id="absenden" name="abschicken">
        </form>

</div>
</body>
</html>
#kontaktformular{
margin-left: 80px;
margin-top: 40px;
background: white;
box-shadow: 3px 3px 3px 3px #bbbbbb;
height: 700px;
width: 934px;
float: left;
}

.kontaktformular_spalte{
float: left;
margin-left: 50px;
margin-top: 20px;
width: 392px;
}

.kontaktformular_bezeichnung{
color: #555655;
}

.kontaktformular_feld{
width: 392px;
box-shadow: 1px 1px 7px 1px grey;
border-radius: 5px;
}

#kontaktformular_spalte_plz{
width: 122px;
margin-left: 50px;
margin-top: 20px;
float: left;
}

#kontaktformular_feld_plz{
width: 122px;
box-shadow: 1px 1px 7px 1px grey;
border-radius: 5px;
}

#kontaktformular_spalte_ort{
width: 265px;
margin-left: 5px;
margin-top: 20px;
float: left;
}

#kontaktformular_feld_ort{
width: 265px;
box-shadow: 1px 1px 7px 1px grey;
border-radius: 5px;
}

#kontaktformular_spalte_betreff{
width: 834px;
margin-left: 50px;
margin-top: 20px;
float: left;
}

#kontaktformular_feld_betreff{
width: 834px;
box-shadow: 1px 1px 7px 1px grey;
border-radius: 5px;
}

#kontaktformular_spalte_nachricht{
width: 834px;
margin-left: 50px;
margin-top: 20px;
float: left;
}

#kontaktformular_feld_nachricht{
width: 834px;
box-shadow: 1px 1px 7px 1px grey;
border-radius: 5px;
height: 250px;
}

#absenden{
float: right;
margin-right: 50px;
margin-top: 30px;
}
<?php
$Mail = "meinemail@abc.de"; 
$Betreff = "Kontaktformularnachricht";

  
  if(isset($_POST['abschicken'])){
   
    if(empty($_POST['vorname']) OR empty($_POST['nachname']) OR empty($_POST['e-mail']) OR empty($_POST['strasse']) OR empty($_POST['plz']) OR empty($_POST['ort']) OR empty($_POST['betreff']) OR empty($_POST['nachricht']) OR empty($_POST['telefon'])){ // Wenn eins der Felder nicht ausgefüllt wurde, dann wird darauf hingewiesen, dass man alle Felder ausfüllen muss.
      print "Bitte f&uuml;llen Sie alle Felder korrekt aus! \n";
    }

    else{

      $Abs_Mail = $_POST['e-mail']; 
      $Abs_Vorname = $_POST['vorname'];
	  $Abs_Nachname = $_POST['nachname'];
	  $Abs_Telefon = $_POST['telefon'];
	  $Abs_Strasse = $_POST['strasse'];
	  $Abs_Plz = $_POST['plz'];
      $Abs_Ort = $_POST['ort'];
	  $Abs_Betreff = $_POST['betreff'];
	  $Abs_nachricht = $_POST['nachricht'];
	  

      $Nachricht = "Vorname:$Abs_Vorname </br>
					Nachname:$Abs_Nachname</br>
					E-Mail:$Abs_Mail</br>
					Telefon:$Abs_Telefon</br>
					Strasse:$Abs_Strasse</br>
					Plz:$Abs_Plz</br>
					Ort:$Abs_Ort</br>
					Betreff:$Abs_Betreff</br>
					Nachricht:$Abs_nachricht ";
 
    
      $senden = mail($Mail, $Betreff, $Nachricht,"From: $Abs_Mail");
 

     if($senden){
        print "Ihre Mail wurde erfolgreich an uns versandt. 

";
      }
    
    }
  }
?>
  1. Hallo sdgfnnfg433d,

    magst du uns vielleicht den genauen Wortlaut der Fehlermeldung geben?

    Freundliche Grüße
    Christian

    1. Hallo sdgfnnfg433d,

      magst du uns vielleicht den genauen Wortlaut der Fehlermeldung geben?

      Freundliche Grüße
      Christian

      Method Not Allowed The requested method POST is not allowed for the URL /kontaktformular.php

      das wäre die Meldung

      1. Hallo,

        Method Not Allowed
        The requested method POST is not allowed for the URL /kontaktformular.php

        bietet denn dein Webhoster überhaupt PHP an? Es soll immer noch Gratis- oder Billighoster geben, bei denen das nicht der Fall ist. Und wenn keine serverseitig aktiven Inhalte unterstützt werden, dann wird oft auch die Methode POST einfach verboten, weil sie keinen Sinn mehr ergibt.

        So long,
         Martin

        --
        Nothing travels faster than the speed of light with the possible exception of bad news, which obeys its own special laws.
        - Douglas Adams, The Hitchhiker's Guide To The Galaxy
        1. bietet denn dein Webhoster überhaupt PHP an? Es soll immer noch Gratis- oder Billighoster geben, bei denen das nicht der Fall ist. Und wenn keine serverseitig aktiven Inhalte unterstützt werden, dann wird oft auch die Methode POST einfach verboten, weil sie keinen Sinn mehr ergibt.

          Mhh okay. Der Hoster schlägt auch selber ein CGI dafür vor. Das benutzt auch die Post methode. Da kann ich aber lediglich mit Name, Betreff, Email und Nachricht arbeiten

          1. Mal abgesehen vom POST Problem: dein HTML leidet an einer bösen div- und class-Seuche. Wenn Gunnar das sieht, exorziert er dich... ;-)

            Das erste div im form sieht aus als wäre es unnötig, die Beschriftungen macht man mit label und deine class-Angaben scheinen überflüssig, du kannst das mit CSS-Selektoren lösen die die Tagnamen ansprechen.

            Rolf

            1. @@Rolf b

              Mal abgesehen vom POST Problem: dein HTML leidet an einer bösen div- und class-Seuche. Wenn Gunnar das sieht, exorziert er dich... ;-)

              Schon passiert.

              Das erste div im form sieht aus als wäre es unnötig, die Beschriftungen macht man mit label und deine class-Angaben scheinen überflüssig, du kannst das mit CSS-Selektoren lösen die die Tagnamen ansprechen.

              Gut zusammengefasst.

              LLAP 🖖

              --
              “The best way to help people learn: answer their coding question an hour later, they’ll have likely figured it out by then.” —Todd Motto
              Selfcode: sh:) fo:} ch:? rl:) br:> n4:& va:| de:> zu:} fl:{ ss:| ls:# js:|
  2. @@sdgfnnfg433d

    mein Kontaktformular funktioniert leider nicht so wie es soll.

    Dein Kontaktformular funktioniert aus mehreren Gründen nicht.

    Datenschutz / User experience

    Du erwartest, dass jemand, der mit dir in Kontakt treten möchte, 9 Felder ausfüllt? Und seine Anschrift und Telefonnummer preisgibt? Ernsthaft? Wozu?

    Datensparsamkeit! AFAIK bist du dazu verpflichtet. Das heißt, du darfst nur die Daten erheben, die du bei einer Kontaktaufnahme wirklich benötigst. Das wäre wohl nur die E-Mail-Adresse.

    Mache deutlich, welche Felder Pflichtfelder sind. Auch im HTML mittels required-Attribut. Die anderen Felder lässt du am besten ganz weg.

    Barrierefreiheit

    Deine Eingabefelder haben keine Beschriftung. Sie müssen aber eine haben, damit Nutzer wissen, was sie in welches Feld eingeben sollen.

    Im Markup wäre also zu ändern:

     <div class="kontaktformular_spalte"><div class="kontaktformular_bezeichnung">Vorname:</div> <input class="kontaktformular_feld" type="text" name="vorname" /></div>
    

    in:

    <p>
      <label for="vorname">Vorname:</label>
      <input type="text" id="vorname" name="vorname" />
    </p>
    

    Und das bei allen Eingabefeldern.

    Statt des div hab ich mal p genommen. Die Klassen brauchst du nicht.

    Das <div id="kontaktformular"> brauchst du auch nicht. Das hattest du übrigens auch nicht richtig geschlossen.

     <div class="kontaktformular_spalte"><div class="kontaktformular_bezeichnung">Nachname:</div> <input class="kontaktformular_feld" type="text" name="nachname" /></div>
    

    Statt „Nachname“ solltest du besser „Familienname“ verwenden.

     <div class="kontaktformular_spalte"><div class="kontaktformular_bezeichnung">E-Mail:</div> <input class="kontaktformular_feld" type="text" name="e-mail" /></div>
    

    Statt type="text" wäre hier type="email" angebracht.

     <div class="kontaktformular_spalte"><div class="kontaktformular_bezeichnung">Telefon:</div> <input class="kontaktformular_feld" type="text" name="telefon" /></div>
    

    Statt type="text" wäre hier type="tel" angebracht.

     <div class="kontaktformular_spalte"><div class="kontaktformular_bezeichnung">Stra&szlig;e:</div> <input class="kontaktformular_feld" type="text" name="strasse" /></div>
    

    Warum verst&uuml;elst du das ß? Du solltest „Straße“ mit ß schreiben.

    (Den Artikel gab’s doch auch mal auf deutsch‽ Da war ja noch was … *Knoten-ins-Taschentuch-mach*)

     <input type="submit" value=" Absenden " id="absenden" name="abschicken">
    

    Für Buttons gibt es das button-Element. Verwende es:

    <button type="submit" id="absenden" name="abschicken">Absenden</button>
    

    Außerdem solltest du hier

    <html>
    

    die Sprache des Seiteninhalts angeben. (Warum?)

    Wenn dieser auf deutsch ist:

    <html lang="de">
    

    Damit sich der Seiteninhalt dem Viewport anpassen kann, ist noch die eine Angabe in den head hinzuzufügen

    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    

    und im Stylesheet keine Breiten in px festnageln, also nicht sowas wie

    #kontaktformular{
    height: 700px;
    width: 934px;
    }
    

    Mein Viewport ist – wie der vieler anderer – deutlich schmaler als 934px. Sinvoll wäre vielleicht max-width statt width. Und responsive design (deutsche Übersetzung).

    700px für die Höhe ist eine magic number – der Wert mag bei dir passen, aber nicht zwangsweise bei anderen. Sowas sollte man immer vermeiden.

    Wozu willst du da überhaupt eine Höhe angeben? Du willst eher einen clearfix verwenden.

    LLAP 🖖

    --
    “The best way to help people learn: answer their coding question an hour later, they’ll have likely figured it out by then.” —Todd Motto
    Selfcode: sh:) fo:} ch:? rl:) br:> n4:& va:| de:> zu:} fl:{ ss:| ls:# js:|
  3. @@sdgfnnfg433d

    mein Kontaktformular funktioniert leider nicht so wie es soll.

    Vor deinen Problemen mit Datenschutz, UX, Barrierefreiheit und dem nachgelagerten Problem mit dem POST ersteinmal die Frage:

    Wozu ein Kontaktformular?

    Und wenn eins, dann bitte zusätzlich zur Angabe deiner E-Mail-Adresse.

    LLAP 🖖

    --
    “The best way to help people learn: answer their coding question an hour later, they’ll have likely figured it out by then.” —Todd Motto
    Selfcode: sh:) fo:} ch:? rl:) br:> n4:& va:| de:> zu:} fl:{ ss:| ls:# js:|