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

kontaktformular - feste fenstergrösse von php generierter antwort

patrick1988

Gesperrt
hallo zusammen.

ich habe ein kontaktformar gemacht das aus der html seite auf eine php seiteverlinkt wo dann die per php generierte bestätignung angezeigt wird.

nun mein problem: php macht eine komplett neue seite auf, da ich das nicht möchte aber ich keine ahnung habe wie ich diese nachricht in der selben seite generieren kann, möchte ich dass wenigstens nur ein kleines fenster aufgeht mit der php bestätigung.

nun wie mache ich das?

ich bin ein blutiger anfänger in sachen php. habe auch schon gegoogelt aber hab da nur lösungen gefunden die sich auf einen link beziehen, und wenn man da dann draufklickt ist das fenster mit einer kleineren grösse. das hilft mir aber leider nicht.

muss ich da was in das action attribut reinschreiben von der html seite oder wie geht das?

hier mein code:

HTML:
<form method="post" action="../meldung.php">
            <label for="vorname">Vorname:</label><br />
            <input type="text" id="vorname" name="vorname" /><br />
            <label for="nachname">Nachname:</label><br />
            <input type="text" id="nachname" name="nachname" /><br />
            <label for="telefon">Telefon:</label><br />
            <input type="text" id="telefon" name="telefon" /><br />
            <label for="email">E-Mail:</label><br />
            <input type="text" id="email" name="email" /><br />
            <label for="service">Dienstleistung:</label><br />
            <select name="service">
              <option value="pcsupport">PC Support</option>
              <option value="diverses">Diverses</option>
            </select><br /><br />
           <label for="weiteres">Bemerkungen:</label><br />
           <textarea id="weiteres" name="weiteres"></textarea><br />
           <input type="submit" value="Rückruf Bitte" name="submit" />
         </form>

und das php:
PHP:
<?php
  $name = $_POST['vorname'] . ' ' . $_POST['nachname'];
  $telefon = $_POST['telefon'];
  $email = $_POST['email'];
  $service = $_POST['service'];
  $weiteres = $_POST['weiteres'];
  $an = '[email protected]';
  $betreff = 'Ein kunde möchte angerufen werden';
  $msg = "$name möchte gerne angerufen werden.\n" .
  "Bereich: $service\n" .  
  "Telefon: $telefon\n" .
  "Weitere Bemerkungen: $weiteres";
  "E-Mail: $email\n" .
  mail($an, $betreff, $msg, 'From:' . $email);
 
  echo 'Vielen Dank ' . $name;
  echo ' Sie werden schnellstmöglich unter ' . $telefon . '<br />';
  echo 'von unserer Abteilung ' . $service . 'angerufen.';
?>

gruss
 
schreibe das ganze einfach in eine datei rein. als erstes den php teil und dann den html teil (aber alles im body natürlich)
dann lässt du den php code nur ausführen, wenn das formular abgesendet wurde (if...) und den html teil nur, wenn das formular nicht abgesendet wurde. dann wird keine neue seite geöffnet und alles in der datei bearbeitet, etc.
 
das habe ich auch schon versucht. habe so ein script bearbeitet was ich auf einer seite gefunden habe, das lief zwar korrekt aber wen ich die datei dann .html lasse gibt der validierer eine menge fehler an. ausserdem musste ich meine .htaccess auf dem server abändern.

und wen ich die seiten in .php mache, wären alle seiten in php weil dieses formular ist so ein rückruf formular wo man mir schreiben kann wenn man mehr informationen haben möchte und daher von mir angerufen werden möchte. dieses formular ist auf allen seiten der homepage drauf.
und php dateien kann ich nicht validieren, und ich weis auch nicht wie sich das dann auf das ranking auswirkt..

ich kenne mich nur in html und css aus wie gesagt php ist neuland für mich

hier das andere script
PHP:
<?php
if(isset($_POST['abschicken'])){
    while(list($feld,$wert)=each($HTTP_POST_VARS)){
        $wert=preg_replace("/(content-type:|bcc:|cc:|to:|from:)/im", "",$wert);
           $$feld=$wert;
        if($feld!="abschicken"){
            $mailnachricht.=ucfirst($feld).": $wert\n";
        }
    }
    $mailnachricht.="\nDatum/Zeit: ". date("d.m.Y H:i:s");
    empty($nachname) ? $err[] = "<p>- Bitte den Nachnamen angeben.</p>" : false;
    empty($vorname) ? $err[] = "<p>- Bitte den Vornamen angeben.</p>" : false; 
    empty($telefon) ? $err[] = "<p>- Bitte die Telefonnummer angeben.</p>" : false; 
    empty($email) ? $err[] = "<p>- Bitte die E-Mail Adresse angeben.</p>" : false; 
    if(!empty($err)) {
        echo "<p>Bitte korrigieren Sie folgende Fehler:</p>";
        foreach($err as $fehler){
            echo $fehler;
        } ?>
        <form action="#" method="post">
        Name:<br />
        <input type="text" name="nachname" value="<?php echo $nachname; ?>" /><br />
        Vorname:<br />
        <input type="text" name="vorname" value="<?php echo $vorname; ?>" /><br />
        Telefon:<br />
        <input type="text" name="telefon" value="<?php echo $telefon; ?>" /><br />
        E-Mail:<br />
        <input type="text" name="email" value="<?php echo $email; ?>" /><br />
        Kategorie:<br />
        <select name="service"><?php echo $service; ?>
          <option value="pcsupport">PC Support</option>
          <option value="diverses">Diverses</option> 
        </select><br /><br />
        Bemerkungen:<br />
        <textarea rows="5" name="text"><?php echo $text; ?></textarea><br /><br />
        <input type="submit" name="abschicken" class="button" value="Formular absenden" />
        </form>
        <p>*Pflichtfelder</p>
<?php
    } else {
        $mailbetreff="Ein Kunde möchte Angerufen werden ".$_SERVER['HTTP_HOST'];       
        if(mail("[email protected]", $mailbetreff, $mailnachricht, "From: $email")){
            echo "<p>Vielen Dank für Ihre eMail!</p>";
        } else {
            echo "<p>Ein Fehler ist aufgetreten!</p>";
        }
    }
} else { ?>
        <form action="#" method="post">
        Name:<br />
        <input type="text" name="nachname" value="" /><br />
        Vorname:<br />
        <input type="text" name="vorname" value="" /><br />
        Telefon:<br />
        <input type="text" name="telefon" value="" /><br />
        E-Mail:<br />
        <input type="text" name="email" value="" /><br />
        Kategorie:<br />
           <select name="service">
          <option value="pcsupport">PC Support</option>
          <option value="diverses">Diverses</option> 
        </select><br /><br />
        Bemerkungen:<br />
        <textarea rows="5" name="text"></textarea><br /><br />
        <input type="submit" name="abschicken" value="Formular absenden"  />
        </form>
        <p>*Pflichtfelder</p>
<?php
}
?>
 
Zuletzt bearbeitet:
also grundsätzlich kannst du deine html-dateien einfach in *.php umbenennen, ohne weitere probleme. das wird dafür auch nötig sein (meine komplette website besteht nur aus php dateien^^)
wenn du das script auf jeder seite hast, dann speicher es in einer extra php datei ein. und füge es dann per
Code:
<?php include ($_SERVER['DOCUMENT_ROOT']."/pfad/meldung.php"); ?>
einfach an jeder stelle ein, wo das script stehen soll.
(vereinfacht auch die bearbeitung, weil du nur eine datei bearbeiten musst und nicht auf allen 10 seiten, wo das script steht.
ich würde das ganze mit deinem script in etwa so machen:

Code:
<?php
if (isset($_GET['abgesendet'])) {
  $name = $_POST['vorname'] . ' ' . $_POST['nachname'];
  $telefon = $_POST['telefon'];
  $email = $_POST['email'];
  $service = $_POST['service'];
  $weiteres = $_POST['weiteres'];
  $an = '[email protected]';
  $betreff = 'Ein kunde möchte angerufen werden';
  $msg = "$name möchte gerne angerufen werden.\n" .
  "Bereich: $service\n" .  
  "Telefon: $telefon\n" .
  "Weitere Bemerkungen: $weiteres";
  "E-Mail: $email\n" .
  mail($an, $betreff, $msg, 'From:' . $email);
 
  echo 'Vielen Dank ' . $name;
  echo ' Sie werden schnellstmöglich unter ' . $telefon . '<br />';
  echo 'von unserer Abteilung ' . $service . 'angerufen.';
} else {
?>  


<form method="post" action="../meldung.php?abgesendet=true">[/COLOR]  [COLOR=rgb(0, 0, 0)]
            <label for="vorname">Vorname:</label><br />
            <input type="text" id="vorname" name="vorname" /><br />
            <label for="nachname">Nachname:</label><br />
            <input type="text" id="nachname" name="nachname" /><br />
            <label for="telefon">Telefon:</label><br />
            <input type="text" id="telefon" name="telefon" /><br />
            <label for="email">E-Mail:</label><br />
            <input type="text" id="email" name="email" /><br />
            <label for="service">Dienstleistung:</label><br />
            <select name="service">
              <option value="pcsupport">PC Support</option>
              <option value="diverses">Diverses</option>
            </select><br /><br />
           <label for="weiteres">Bemerkungen:</label><br />
           <textarea id="weiteres" name="weiteres"></textarea><br />
           <input type="submit" value="Rückruf Bitte" name="submit" />
         </form>
<?php } ?>
und davor und dahinter halt noch den head, etc.
eventuell solltest du vorher auch noch eine überprüfung einbauen, ob die daten auch sinnvoll sind und wenn nicht, dann das formular doch anzeigen+fehlermeldungen
 
Zuletzt bearbeitet:
hallo hab das nun auf beide varianten ausprobiert das formular wird gesendet und alles läuft nur wird hier wieder eine neue seite geöffnet für den bestätigunstext..

im action muss doch nicht meldung.php stehn oder? an dem liegt es doch?

Edit:

habe meldung.php bei action dur den seitennamen ersetzt(windows_7.php) und jetzt funktioniert es, habe es allerdings nicht reingelinkt sondern das ganze formular auf der seite eingebaut, wen ich es jetzt mit <?php include ($_SERVER['DOCUMENT_ROOT']."/pfad/meldung.php"); ?>
einbinden möchte, steht da jetzt ja überall der seitentitel von der einen seite(windows_7.php) im action drinne, was ja nicht korekkt ist, wie behebe ich das nun?

gruss
 
Zuletzt bearbeitet:
Super das hat geklappt vielen dank für deine hilfe mustang.

habe jetzt nur das mit der überprüfung einbauen nicht ganz verstanden, wie meinst du das?

und wie baue ich die pflichtfelder in dieses formular ein?

PHP:
 empty($nachname) ? $err[] = "<p>- Bitte den Nachnamen angeben.</p>" : false;
    empty($vorname) ? $err[] = "<p>- Bitte den Vornamen angeben.</p>" : false; 
    empty($telefon) ? $err[] = "<p>- Bitte die Telefonnummer angeben.</p>" : false; 
    empty($email) ? $err[] = "<p>- Bitte die E-Mail Adresse angeben.</p>" : false; 
    if(!empty($err)) {
        echo "<p>Bitte korrigieren Sie folgende Fehler:</p>";
        foreach($err as $fehler){
            echo $fehler;
 
Zuletzt bearbeitet:
also wenn der user bei telefonnummer keine telefonnummer eingibt, dann soll das ja nicht abgesendet werden, sondern es soll eine fehlermeldung kommen, dass keine korrekte telefonnummer eingegeben wurde.
bei der emailadresse könnte man zum beispiel eine einfach überprüfung machen, ob ein @ im code vorhanden ist. wenn ja, dann die email als korrekt ansehen (gibt auch noch kompliziertere überprüfungen, aber das kannst du dir ja mal anschauen).
ich mach das mit den fehlermeldungen immer so:

Code:
<?php
if (isset($_GET['abgesendet'])) {

[COLOR=Red] if (!isset($_POST['vorname'])) { $fehler .= "Sie haben keinen Namen eingegeben<br />"; }
 if (!isset($_POST['telefon'])) { $fehler .= "Sie haben keine Telefonnummer eingegeben<br />"; }
 if ($_POST['email'] != str_replace("@","",$_POST["email"]) ) {
$fehler .= "Sie haben keine gültige Email-Adresse eingegeben<br />"; }[/COLOR]

[COLOR=SeaGreen]if ($fehler == "") {[/COLOR]

  $name = $_POST['vorname'] . ' ' . $_POST['nachname'];
  $telefon = $_POST['telefon'];
  $email = $_POST['email'];
  $service = $_POST['service'];
  $weiteres = $_POST['weiteres'];
  $an = '[email protected]';
  $betreff = 'Ein kunde möchte angerufen werden';
  $msg = "$name möchte gerne angerufen werden.\n" .
  "Bereich: $service\n" .  
  "Telefon: $telefon\n" .
  "Weitere Bemerkungen: $weiteres";
  "E-Mail: $email\n" .
  mail($an, $betreff, $msg, 'From:' . $email);
 
  echo 'Vielen Dank ' . $name;
  echo ' Sie werden schnellstmöglich unter ' . $telefon . '<br />';
  echo 'von unserer Abteilung ' . $service . 'angerufen.';
[COLOR=SeaGreen]}[/COLOR] else {
[COLOR=Red]echo $fehler;[/COLOR]
}

}

[COLOR=Red]if (!isset($_GET['abgesendet']) or $fehler != "") {[/COLOR]
?>  


<form method="post" action="../meldung.php?abgesendet=true">[/COLOR]  [COLOR=rgb(0, 0, 0)]
            <label for="vorname">Vorname:</label><br />
            <input type="text" id="vorname" name="vorname" /><br />
            <label for="nachname">Nachname:</label><br />
            <input type="text" id="nachname" name="nachname" /><br />
            <label for="telefon">Telefon:</label><br />
            <input type="text" id="telefon" name="telefon" /><br />
            <label for="email">E-Mail:</label><br />
            <input type="text" id="email" name="email" /><br />
            <label for="service">Dienstleistung:</label><br />
            <select name="service">
              <option value="pcsupport">PC Support</option>
              <option value="diverses">Diverses</option>
            </select><br /><br />
           <label for="weiteres">Bemerkungen:</label><br />
           <textarea id="weiteres" name="weiteres"></textarea><br />
           <input type="submit" value="Rückruf Bitte" name="submit" />
         </form>
<?php } ?>
zur erklärung:
ich überprüfe mit isset, ob eine variable gesetzt ist. mit !isset, ob eine nicht gesetzt ist. mit str_replace ersetze ich ein zeichen in einem string und überprüfe dann, ob die strings noch gleich sind. wenn die strings gleich sind, dann ist das zeichen nicht enthalten, wenn sie ungleich sind, dann ist es enthalten.

wenn eine fehler auftritt, dann erweitere ich die variable $fehler um eine weitere fehlermeldung (.= hängt an einen string einen weiteren string an).

und wenn meine variable $fehler leer ist, dann wird die mail gesendet. ist sie nicht leer, werden die fehlermeldungen ausgegeben und das formular noch einmal angezeigt.

außerdem solltest du bei deinem formular noch eine sicherheit einbauen:
Code:
$telefon = [URL="http://www.php.net/htmlspecialchars"]htmlspecialchars[/URL]($_POST['telefon'], ENT_QUOTES, 'UTF-8');
so solltest du das mit allen feldern machen. damit werden sonderzeichen, etc. in UTF-8 umgewandelt. falls dir also jemand einen code in deine eingabefelder reinschreibt, wird der code nicht ausgeführt.

hoffe das war verständlich^^

edit: hab schon an der richtigen antwort gearbeitet, obwohl ich dein edit nicht gesehen habe^^
 
hmm leider funktioniert das bei mir nicht, ich kann immernoch abschiken ohne eine email oder tel. anzugeben. muss ich noch was erweitern in diesem script?
 
füge mal das hier ein:
Code:
<?php
if (isset($_GET['abgesendet'])) {

[COLOR=Red]$fehler = "";[/COLOR]

 if (!isset($_POST['vorname'])) { $fehler .= "Sie haben keinen Namen eingegeben<br />"; }
 if (!isset($_POST['telefon'])) { $fehler .= "Sie haben keine Telefonnummer eingegeben<br />"; }
 if ($_POST['email'] != str_replace("@","",$_POST["email"]) ) {
$fehler .= "Sie haben keine gültige Email-Adresse eingegeben<br />"; }
vielleicht funktioniert die erweiterung des strings nicht

edit: hm geht auch nicht... warte ich teste mal^^
 
ne geht leider auch nicht hier mein code wie ich ihn eingefügt habe, vielicht habe ich ja was falsch gemacht
PHP:
<body>
<?php
if (isset($_GET['abgesendet'])) {
$fehler = "";
 if (!isset($_POST['vorname'])) { $fehler .= "Sie haben keinen Namen eingegeben<br />"; }
 if (!isset($_POST['telefon'])) { $fehler .= "Sie haben keine Telefonnummer eingegeben<br />"; }
 if ($_POST['email'] != str_replace("@","",$_POST["email"]) ) {
$fehler .= "Sie haben keine gültige Email-Adresse eingegeben<br />"; }
if ($fehler == "") {
 
  $name = $_POST['vorname'] . ' ' . $_POST['nachname'];
  $telefon = $_POST['telefon'];
  $email = $_POST['email'];
  $service = $_POST['service'];
  $weiteres = $_POST['weiteres'];
  $an = '[email protected]';
  $betreff = 'Ein kunde möchte angerufen werden';
  $msg = "$name möchte gerne angerufen werden.\n" .
  "Bereich: $service\n" .  
  "Telefon: $telefon\n" .
  "Weitere Bemerkungen: $weiteres";
  "E-Mail: $email\n" .
  mail($an, $betreff, $msg, 'From:' . $email);
 
  echo 'Vielen Dank ' . $name;
  echo ' Sie werden schnellstmöglich unter ' . $telefon . '<br />';
  echo 'von unserer Abteilung ' . $service . 'angerufen.';
} else {
echo $fehler;
}
}
if (!isset($_GET['abgesendet']) or $fehler != "") {
?>  

<form method="post" action="?abgesendet=true">
            <label for="vorname">Vorname:</label><br />
            <input type="text" id="vorname" name="vorname" /><br />
            <label for="nachname">Nachname:</label><br />
            <input type="text" id="nachname" name="nachname" /><br />
            <label for="telefon">Telefon:</label><br />
            <input type="text" id="telefon" name="telefon" /><br />
            <label for="email">E-Mail:</label><br />
            <input type="text" id="email" name="email" /><br />
            <label for="service">Dienstleistung:</label><br />
            <select name="service">
              <option value="pcsupport">PC Support</option>
              <option value="diverses">Diverses</option>
            </select><br /><br />
           <label for="weiteres">Bemerkungen:</label><br />
           <textarea id="weiteres" name="weiteres"></textarea><br />
           <input type="submit" value="Rückruf Bitte" name="submit" />
         </form>
<?php } ?>
 
guuut^^ jetzt hab ichs xD

hier der komplette code: auch mit UTF-8 codierung. sollte also auch einigermaßen sicher sein. gibt auch noch mehr, was man machen kann, aber denke das wird zu viel.

Code:
<?php
if (isset($_GET['abgesendet'])) {
$fehler = "";
 if ($_POST['vorname'] == "") { $fehler .= "Sie haben keinen Vornamen eingegeben<br />"; }
 if ($_POST['nachname'] == "") { $fehler .= "Sie haben keinen Nachnamen eingegeben<br />"; }
 if ($_POST['telefon'] == "") { $fehler .= "Sie haben keine Telefonnummer eingegeben<br />"; }
 if ($_POST['email'] == "") { $fehler .= "Sie haben keine E-Mail-Adresse eingegeben<br />"; }
 if ($_POST['email'] != "" and $_POST['email'] == str_replace("@","",$_POST["email"]) ) {
$fehler .= "Sie haben keine gültige Email-Adresse eingegeben<br />"; }

if ($fehler == "") {

 $_POST['textfeld'] = htmlspecialchars($_POST['textfeld'], ENT_QUOTES, 'UTF-8');

  $name = htmlspecialchars($_POST['vorname'] . ' ' . $_POST['nachname'], ENT_QUOTES, 'UTF-8');
  $telefon = htmlspecialchars($_POST['telefon'], ENT_QUOTES, 'UTF-8');
  $email = htmlspecialchars($_POST['email'], ENT_QUOTES, 'UTF-8');
  $service = htmlspecialchars($_POST['service'], ENT_QUOTES, 'UTF-8');
  $weiteres = htmlspecialchars($_POST['weiteres'], ENT_QUOTES, 'UTF-8');
  $an = '[email protected]';
  $betreff = 'Ein kunde möchte angerufen werden';
  $msg = "$name möchte gerne angerufen werden.\n" .
  "Bereich: $service\n" .  
  "Telefon: $telefon\n" .
  "Weitere Bemerkungen: $weiteres";
  "E-Mail: $email\n" .
  mail($an, $betreff, $msg, 'From:' . $email);
 
  echo 'Vielen Dank ' . $name;
  echo ' Sie werden schnellstmöglich unter ' . $telefon . '<br />';
  echo 'von unserer Abteilung ' . $service . 'angerufen.';
} else {
echo $fehler;
}

}

if (!isset($_GET['abgesendet']) or $fehler != "") {
?>  


<form method="post" action="?abgesendet=true">
            <label for="vorname">Vorname:</label><br />
            <input type="text" id="vorname" name="vorname" /><br />
            <label for="nachname">Nachname:</label><br />
            <input type="text" id="nachname" name="nachname" /><br />
            <label for="telefon">Telefon:</label><br />
            <input type="text" id="telefon" name="telefon" /><br />
            <label for="email">E-Mail:</label><br />
            <input type="text" id="email" name="email" /><br />
            <label for="service">Dienstleistung:</label><br />
            <select name="service">
              <option value="pcsupport">PC Support</option>
              <option value="diverses">Diverses</option>
            </select><br /><br />
           <label for="weiteres">Bemerkungen:</label><br />
           <textarea id="weiteres" name="weiteres"></textarea><br />
           <input type="submit" value="Rückruf Bitte" name="submit" />
         </form>
<?php } ?>
schau dir das am besten alles mal genau an, was da im einzelnen gemacht wird. wenn du etwas nicht verstanden hast, warum das gemacht wird, frag mich einfach.
ein formular war für mich auch das erste, was ich in php gemacht habe und hat mir auch ne menge gebracht (danke an basti93^^)

ps.: wenns klappt, kannst du mir ja auch eine bewertung geben^^
 
Zuletzt bearbeitet:
soo jetzt hats auch bei mir geklappt^^ vielen dank für deine geduld mustang, ja ich werde mir das gleich unter die lupe nehmen, ich habe auch ein buch php und mysql von kopf bis fuss von oraily gekauft, nur hatte ich nicht wirklich zeit das durchzulesen, weil ich erst die homepage online haben möchte, befohr ich mich da drauf stürze. hab mir gedacht ein formular wird wohl nicht so schwer sein, aber da bin ich wohl auf die nase gefallen^^ vielen dank nochmals gruss patrick
 
Zurück
Oben