Antworten auf deine Fragen:
Neues Thema erstellen

Antworten zum Thema „php - Kontaktformular umbauen“

Isometric

Powerproster

Hallo zusammen,

ich versuche gerade ein php - Kontaktformular zu verstehen und umzubauen.

Es handelt sich um dieses hier:
Dabei wird in der Seite kontakt.php eine Session gestartet und ein Formular aufgebaut.

Wenn man das Formular abschickt erfolgt die Auswertung in der Datei kontakt_ausw.php (hier startet noch mal eine Session) und dort wird dann auch die Ausgabe der Fehlermeldung gemacht.

PHP:
    if ($fehler == ""){
            echo '<h3>Kontaktformular</h3>;
                      
            // Sessionvariablen löschen
            unset($_SESSION['name']);
            unset($_SESSION['email']);
            unset($_SESSION['betreff']);
            unset($_SESSION['nachricht']);
       
    } else {
    echo '<h3>Kontaktformular</h3>';
    echo $fehler;
    echo '<p><a href="kontakt.php">zurück</a></p>';
    }
Ich hätte gerne die Ausgabe der Fehlermeldungen direkt auf der Startseite kontakt.php. Manuell kann man den ja Link zu dieser Seite betätigen, und die Eingaben dann korrigieren.

Versucht habe ich z.B. folgendes:
Aufruf der kontakt:php per exec.
Warning: exec(): PHP exec disable. in /volume1/web/captcha/kontakt_ausw.php on line 72
Das Ganze läuft auf einer Testumgebung auf einen Synology Diskstation.
 
Zuletzt bearbeitet:

Robbyn-

PHP / Flex Programmierer

AW: php - Kontaktformular umbauen

Vielleicht weil du hier hinten:

PHP:
echo '<h3>Kontaktformular</h3>

das '; vergessen hast?!
 

Isometric

Powerproster

AW: php - Kontaktformular umbauen

Ich hatte den Code gekürzt hier reingestellt. und zuviel gelöscht. :(
Im Original kommen noch mehrere Zeilen und das abschliessende ";".

Dieser Codeteil ist aber nicht die entscheidende Stelle, weil dort ausgeführt wird, wenn das Formular korrekt eingeben wurde.

Nach dem else stehen die Anweisungen die ausgeführt werden, wenn das Formular nicht korrekt ausgeführt wird.
 

Aelfry

Web Developer

AW: php - Kontaktformular umbauen

Wenn man das Formular abschickt erfolgt die Auswertung in der Datei kontakt_ausw.php (hier startet noch mal eine Session) und dort wird dann auch die Ausgabe der Fehlermeldung gemacht.
[...]
Ich hätte gerne die Ausgabe der Fehlermeldungen direkt auf der Startseite kontakt.php.
da sehe ich zwei Möglichkeiten
1) Auswertung auch in der kontakt.php
2) auto. Weiterleitung nach Auswertung und Ergebnis mitschicken (zur möglichen Fehlerausgabe)

Ich würde vermutlich Nr. 1 wählen, um sicher zu gehen, falls jemand das auto. weiterleiten deaktiviert hat.
 

Aelfry

Web Developer

AW: php - Kontaktformular umbauen

an der Variante 1 beiße ich mir zur Zeit die Zähne aus :mad:
wo hapert's denn genau?
du musst ja im Prinzip einfach den "Auswertungs-Code" mit einbauen und in bestimmten Fällen (z.B. wenn auf absenden geklickt wurde) ausführen.

wie ginge den Variante 2?
im Headbereich der kontakt_ausw.php muss das hier stehen
HTML:
<meta http-equiv="refresh" content="0; URL=http://www.deine-seite.de/kontakt.php?error=1">
mit Übergabe weiterer Infos (hier jetzt error=1) könntest du dann eine entsprechende Fehlerausgabe erzeugen.
 

Isometric

Powerproster

AW: php - Kontaktformular umbauen

wo hapert's denn genau?
du musst ja im Prinzip einfach den "Auswertungs-Code" mit einbauen und in bestimmten Fällen (z.B. wenn auf absenden geklickt wurde) ausführen.
Mit Sessions habe ich bis jetzt noch gar keine Erfahrung :(

Ich habe den php-Teil von kontakt_ausw.php in die kontakt.php kopiert und in eine Bedingung gesetzt, dass dieser Teil erst ausgeführt wird, wenn ich auf "eintragen" gedrückt habe.
Damit startet das Script schon mal durch.
Nach dem Drücken von "eintragen" kommt gleich die Fehlermeldung, dass schon eine Session läuft und die Variable ok in der Email-Funktion nicht gefunden wird. Außerdem wird das Captcha-Bild nicht regeneriert.
Notice: A session had already been started - ignoring session_start() in test.php on line 74
Notice: Undefined variable: ok in /volume1/web/kontakt/test.php on line 100
Das Löschen des zweiten Session-Starts bringt mich auch nicht weiter. Dann ist zwar die erste Fehlermeldung weg, aber die zweite bleibt und das Captcha-Bild wird auch nicht regeneriert.


PHP:
    // Header
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");    // Datum aus Vergangenheit
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
                                                         // immer geändert
    header("Cache-Control: no-store, no-cache, must-revalidate");  // HTTP/1.1
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");                          // HTTP/1.0
    
    // Alle Fehler und Notices anzeigen
    error_reporting(E_ALL);
    
    session_start();
    
    $CAPTCHA_TempString="";
    
    // Zufallsfunktion für Zahlen und Buchstaben
        function GetRandomChar() {
    
    // Zufallszahl generieren
        mt_srand((double)microtime()*1000000);
        $CAPTCHA_RandVal = mt_rand(1,2);
    
    // Buchstabensalat generieren jeh nachdem ob Randval 1 oder 2 ist
        switch ($CAPTCHA_RandVal) {
        case 1:
            // Zahlen 0-9
            $CAPTCHA_RandVal = mt_rand(48, 57);
            break;
        case 2:
            // Grosse Buchstaben
            $CAPTCHA_RandVal = mt_rand(65, 90);
            break;
        }
        
    // Zufallscode ausgeben
        return chr($CAPTCHA_RandVal);
    }
    
    // Zufallscode x-stellig ausgeben
        for ($i = 1; $i <= 6; $i++) {
           $CAPTCHA_TempString .= GetRandomChar();
    }

    // Text in Sessionvariable speichern
    if (isset($CAPTCHA_TempString)) {
        $_SESSION["CAPTCHA_RndText"] = str_replace('I','E',str_replace('0','3',str_replace('1','S',str_replace('B','F',str_replace('O','P',str_replace('4','A',str_replace('D','K',$CAPTCHA_TempString)))))));
    } else {
        die("Zufallscode konnte nicht generiert werden!");
    }
?>
Danach kommt der HTML-Teil, mit dem die nächste Datei aufgerufen wird

PHP:
    // Session starten und config.php includen
    session_start();
    include ("config.php");
    
    // CaptchaCodes abfragen
    $CAPTCHA_RandomText = "";
    if (isset($_POST['txtCode'])){
    $CAPTCHA_EnteredText = str_replace("<","",str_replace(">","",str_replace("'","",str_replace("[","",str_replace("]","",$_POST['txtCode'])))));
    }
    if (isset($_SESSION['CAPTCHA_RndText'])) {
    $CAPTCHA_RandomText = $_SESSION['CAPTCHA_RndText'];
    }

    // Eingabefelder abfragen
    $_SESSION['name'] = $_POST['name'];

    // Eingaben prüfen
    $fehler = "";

            if ($_SESSION['name'] == ""){ 
            $fehler .= "<li>Name fehlt!</li>";
            }
            }
            if ($CAPTCHA_EnteredText == $CAPTCHA_RandomText and isset($_POST['txtCode']) == true and isset($_SESSION['CAPTCHA_RndText'])){
            $captcha = true;
            } else {
            $fehler .= "<li>Captcha fehlt oder fehlerhaft!</li>";
            }
    echo '<div style="border: 1px #000 solid; width: 350px; padding: 5px;">';        
    if ($fehler == ""){
            echo '<h3>Kontaktformular</h3>
            <p>Email ist erfolgreich versendet worden!</p>';
            
            // Sessionvariablen löschen
            unset($_SESSION['name']);
            }
    } else {
    echo '<h3>Kontaktformular</h3>';
    echo $fehler;
    echo '<p><a href="kontakt.php">zurück</a></p>';
    }
    echo '</div>';    

    // Session unset
    unset($_SESSION['CAPTCHA_RndText']);
Ich bräuchte den Ansatz, wie ich es schaffe das Problem mit den beiden Sessions aus der Welt zu schaffen.
 

Duddle

Posting-Frequenz: 14µHz

AW: php - Kontaktformular umbauen

Du scheinst bestimmte Teile hier vor dem einfügen raus zu nehmen. Es wäre besser, wenn du lieber alles postest was du kannst und wo notwendig anonymisierst. Ich kann sonst nicht einschätzen was ein echter Fehler im Code und was ein Fehler deines Rausschnippelns ist.

Wird das Captcha erzeugt, wenn du es normal in der URL aufrufst? Wahrscheinlich ja, vorher funktionierte es ja auch.

Was genau ist jetzt test.php? Der untere Code ist jedenfalls nicht vollständig. Wie bindest du das Captcha ein?

Unabhängig davon noch ein Tipp: str_replace() kannst du auch mit einem Array aufrufen. Also beispielsweise:
PHP:
<?php
$CAPTCHA_EnteredText = str_replace("<","",str_replace(">","",str_replace("'","",str_replace("[","",str_replace("]","",$_POST['txtCode'])))));
?>
ist viel schwieriger zu lesen als
PHP:
<?php
$search = array("<",">","'","[","]");
$replace = "";
$CAPTCHA_EnteredText = str_replace($search, $replace, $_POST['txtCode']);
?>
Du kannst auch ein Array für $replace haben, dann wird das erste Element in $search mit dem ersten Element in $replace ersetzt usw. Aber das nur nebenbei.


Duddle
 

Isometric

Powerproster

AW: php - Kontaktformular umbauen

@Duddle:
erst mal vielen Dank für deinen Tipp mit dem besser lesbaren Code.
Ich versuche so etwas dann immer umzusetzen, da es nach einiger Zeit viel einfacher ist noch mal zu verstehen, was man selber programmiert hat.

Die Datei test.php ist die Datei, in der im Moment alles abläuft.

Ich setze jetzt mal den kompletten Code dieser Datei hier rein.

PHP:
<?
/***************************************************************************
 *                                                                          *
 *   copyright            : (C) 2008 Daniel Kauser                         *
 *   email                : danysahne333@mail.ru                           *
 *   website              : www.cb-talk.de/captcha.html                    *
 *                                                                         *
 *                                                                         *
 *                                                                         *
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   Diese Script ist gratis. Viele andere Scripte kosten viel Geld doch   *
 *   ich und zum Glück auch noch ein paar andere sind gegen sowas und      *
 *   bieten unsere Scripte gratis an. Deshalb löscht nicht den copyright   *
 *   von mir damit wir kein Stress kriegen                                   *
 *                                                                         *
 ***************************************************************************/
        
    // Header
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");    // Datum aus Vergangenheit
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
                                                         // immer geändert
    header("Cache-Control: no-store, no-cache, must-revalidate");  // HTTP/1.1
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");                          // HTTP/1.0
    
    // Alle Fehler und Notices anzeigen
    error_reporting(E_ALL);
    
    session_start();
    
    $CAPTCHA_TempString="";
    
    // Zufallsfunktion für Zahlen und Buchstaben
        function GetRandomChar() {
    
    // Zufallszahl generieren
        mt_srand((double)microtime()*1000000);
        $CAPTCHA_RandVal = mt_rand(1,2);
    
    // Buchstabensalat generieren jeh nachdem ob Randval 1 oder 2 ist
        switch ($CAPTCHA_RandVal) {
        case 1:
            // Zahlen 0-9
            $CAPTCHA_RandVal = mt_rand(48, 57);
            break;
        case 2:
            // Grosse Buchstaben
            $CAPTCHA_RandVal = mt_rand(65, 90);
            break;
        }
        
    // Zufallscode ausgeben
        return chr($CAPTCHA_RandVal);
    }
    
    // Zufallscode x-stellig ausgeben
        for ($i = 1; $i <= 6; $i++) {
           $CAPTCHA_TempString .= GetRandomChar();
    }

    // Text in Sessionvariable speichern
    if (isset($CAPTCHA_TempString)) {
        $_SESSION["CAPTCHA_RndText"] = str_replace('I','E',str_replace('0','3',str_replace('1','S',str_replace('B','F',str_replace('O','P',str_replace('4','A',str_replace('D','K',$CAPTCHA_TempString)))))));
    } else {
        die("Zufallscode konnte nicht generiert werden!");
    }
// +++++++ in diesen Teil habe ich die komplette Originaldatei kontakt_ausw.php übernommen
if(isset($_POST['eintrag']) AND $_POST['eintrag']=='eintragen')
{
    // Session starten und config.php includen
/*/ +++++++ isession_start() habe ich auskommentiert
        session_start();
// */
    include ("config.php");
    
    // CaptchaCodes abfragen
    $CAPTCHA_RandomText = "";
    if (isset($_POST['txtCode'])){
    $CAPTCHA_EnteredText = str_replace("<","",str_replace(">","",str_replace("'","",str_replace("[","",str_replace("]","",$_POST['txtCode'])))));
    }
    if (isset($_SESSION['CAPTCHA_RndText'])) {
    $CAPTCHA_RandomText = $_SESSION['CAPTCHA_RndText'];
    }

    // Eingabefelder abfragen
    $_SESSION['name'] = $_POST['name'];
    $_SESSION['email'] = $_POST['email'];
    $_SESSION['betreff'] = $_POST['betreff'];
    $_SESSION['nachricht'] = $_POST['nachricht'];
    
    $email_i = $_SESSION['email'];
    
    // Email Funktion
    function pruefe_mail($email_i) {
          if(strstr($email_i, "@")) {
            $email_i = explode ("@", $email_i);
            if(strstr($email_i[1], ".")) $ok = TRUE;
          }
          return $ok;
        }
    
    // Eingaben prüfen
    $fehler = "";
    if(!pruefe_mail($email_i) && !empty($email_i)) {
            $fehler .= "<li>Email fehlerhaft!</li>";
            }
            if ($_SESSION['name'] == ""){ 
            $fehler .= "<li>Name fehlt!</li>";
            }
            if ($_SESSION['email'] == ""){ 
            $fehler .= "<li>Email fehlt!</li>";
            }
            if ($_SESSION['betreff'] == ""){ 
            $fehler .= "<li>Betreff fehlt!</li>";
            }
            if ($_SESSION['nachricht'] == ""){ 
            $fehler .= "<li>Nachricht fehlt!</li>";
            }
            if ($CAPTCHA_EnteredText == $CAPTCHA_RandomText and isset($_POST['txtCode']) == true and isset($_SESSION['CAPTCHA_RndText'])){
            $captcha = true;
            } else {
            $fehler .= "<li>Captcha fehlt oder fehlerhaft!</li>";
            }
    echo '<div style="border: 1px #000 solid; width: 350px; padding: 5px;">';        
    if ($fehler == ""){
    // Email zumsammensetzen
    $email = "From: " . $_SESSION['email'];
    $nachrichtfertig = $_SESSION['name']. " schrieb: \n\n" . $_SESSION['nachricht'];
    $versand = mail($empfaenger, $_SESSION['betreff'], $nachrichtfertig, $email);
            if ($versand) {
            echo '<h3>Kontaktformular</h3>
            <p>Email ist erfolgreich versendet worden!</p>';
            
            // Sessionvariablen löschen
            unset($_SESSION['name']);
            unset($_SESSION['email']);
            unset($_SESSION['betreff']);
            unset($_SESSION['nachricht']);
            }
            
    } else {
    echo '<h3>Kontaktformular</h3>';
    echo $fehler;
    echo '<p><a href="kontakt.php">zurück</a></p>';
    }
    echo '</div>';    

    // Session unset
    unset($_SESSION['CAPTCHA_RndText']);
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <meta http-equiv="language" content="de" />
    <title>Kontaktformular</title>
</head>

<body>
<div style="border: 1px #000 solid; width: 350px; padding: 5px;">
<h3>Kontaktformular</h3>

<form method="post" action="test.php" name="kontakt">
    <table>
    <tr><td><p>Name: </p></td><td><p><input name="name" size="34" type="text" <?if (isset($_SESSION['name'])) { echo 'value="' . $_SESSION['name'] . '"'; }?>/></p></td></tr>
    <tr><td><p>Email: </p></td><td><p><input name="email" size="34" type="text" <?if (isset($_SESSION['email'])) { echo 'value="' . $_SESSION['email'] . '"'; }?>/></p></td></tr>
    <tr><td><p>Betreff: </p></td><td><p><input name="betreff" size="34" type="text" <?if (isset($_SESSION['betreff'])) { echo 'value="' . $_SESSION['betreff'] . '"'; }?>/></p></td></tr>
    <tr><td><p>Nachricht: </p></td><td><p><textarea name="nachricht" rows="3" cols="26"><?if (isset($_SESSION['nachricht'])) { echo  $_SESSION['nachricht'] ; }?></textarea></p></td></tr>
    
    <tr><td> </td><td><img border="0" src="captcha_img.php?PHPSESSID=<?echo session_id();?>&ver=<?echo time();?>" alt="" /></td></tr>
    <tr><td><p>Code: </p></td><td><p><input maxlength="6" name="txtCode" size="34" type="text" /></p></td></tr>
    <tr><td> </td><td><p><input class="button" type="submit" name="eintrag" value="eintragen" />&nbsp;<input class="button" type="reset" name="reset" value="l&ouml;schen" /></p></td></tr>
    </table>
    </div>
</form>
</body>
</html>
Das Script habe ich hier heruntergeladen:

und der Autor schreibt:
Probleme beim Einbau Bitte wenden Sie sich bei Problemen an entsprechende Foren wie phpforum.de. Bei wirklich dringenden Problemen schreiben Sie mir über das Kontaktformular eine Email.
 
Zuletzt bearbeitet:

Duddle

Posting-Frequenz: 14µHz

AW: php - Kontaktformular umbauen

Okay, das größte Problem war deine Reihenfolge. Du hast die Auswertung nach der Initialisierung. Während letzterer werden manche Dinge zurückgesetzt. Das führt dann zu Fehlern in der Auswertung. Im folgenden Code habe ich lediglich den Auswertungs-Block nach den Session-Start gesetzt, dann funktioniert das. Eine zweite Änderung ist in der Funktion pruefe_mail, in der $ok nicht korrekt initialisiert wird.
Ansonsten ist der Code unverändert.
PHP:
<?
/***************************************************************************
 *                                                                          *
 *   copyright            : (C) 2008 Daniel Kauser                         *
 *   email                : danysahne333@mail.ru                           *
 *   website              : www.cb-talk.de/captcha.html                    *
 *                                                                         *
 *                                                                         *
 *                                                                         *
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   Diese Script ist gratis. Viele andere Scripte kosten viel Geld doch   *
 *   ich und zum Glück auch noch ein paar andere sind gegen sowas und      *
 *   bieten unsere Scripte gratis an. Deshalb löscht nicht den copyright   *
 *   von mir damit wir kein Stress kriegen                                   *
 *                                                                         *
 ***************************************************************************/

// Header
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");    // Datum aus Vergangenheit
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
// immer geändert
header("Cache-Control: no-store, no-cache, must-revalidate");  // HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");                          // HTTP/1.0

// Alle Fehler und Notices anzeigen
error_reporting(E_ALL);

session_start();

if(isset($_POST['eintrag']) AND $_POST['eintrag']=='eintragen')
{
    // Session starten und config.php includen
/*/ +++++++ isession_start() habe ich auskommentiert
	session_start();
// */
include ("config.php");

// CaptchaCodes abfragen
$CAPTCHA_RandomText = "";
if (isset($_POST['txtCode'])){
    $CAPTCHA_EnteredText = str_replace("<","",str_replace(">","",str_replace("'","",str_replace("[","",str_replace("]","",$_POST['txtCode'])))));
}
if (isset($_SESSION['CAPTCHA_RndText'])) {
    $CAPTCHA_RandomText = $_SESSION['CAPTCHA_RndText'];
}

// Eingabefelder abfragen
$_SESSION['name'] = $_POST['name'];
$_SESSION['email'] = $_POST['email'];
$_SESSION['betreff'] = $_POST['betreff'];
$_SESSION['nachricht'] = $_POST['nachricht'];

$email_i = $_SESSION['email'];

// Email Funktion
function pruefe_mail($email_i) {
    $ok = FALSE;
    if(strstr($email_i, "@")) {
	$email_i = explode ("@", $email_i);
	if(strstr($email_i[1], ".")) $ok = TRUE;
    }
    return $ok;
}

// Eingaben prüfen
$fehler = "";
if(!pruefe_mail($email_i) && !empty($email_i)) {
    $fehler .= "<li>Email fehlerhaft!</li>";
}
if ($_SESSION['name'] == ""){ 
    $fehler .= "<li>Name fehlt!</li>";
}
if ($_SESSION['email'] == ""){ 
    $fehler .= "<li>Email fehlt!</li>";
}
if ($_SESSION['betreff'] == ""){ 
    $fehler .= "<li>Betreff fehlt!</li>";
}
if ($_SESSION['nachricht'] == ""){ 
    $fehler .= "<li>Nachricht fehlt!</li>";
}
if ($CAPTCHA_EnteredText == $CAPTCHA_RandomText and isset($_POST['txtCode']) == true and isset($_SESSION['CAPTCHA_RndText'])){
    $captcha = true;
} else {
    $fehler .= "<li>Captcha fehlt oder fehlerhaft!</li>";
}
echo '<div style="border: 1px #000 solid; width: 350px; padding: 5px;">';        
if ($fehler == ""){
    // Email zumsammensetzen
    $email = "From: " . $_SESSION['email'];
    $nachrichtfertig = $_SESSION['name']. " schrieb: \n\n" . $_SESSION['nachricht'];
    $versand = mail($empfaenger, $_SESSION['betreff'], $nachrichtfertig, $email);
    if ($versand) {
	echo '<h3>Kontaktformular</h3>
	    <p>Email ist erfolgreich versendet worden!</p>';

	// Sessionvariablen löschen
	unset($_SESSION['name']);
	unset($_SESSION['email']);
	unset($_SESSION['betreff']);
	unset($_SESSION['nachricht']);
    }

} else {
    echo '<h3>Kontaktformular</h3>';
    echo $fehler;
    echo '<p><a href="kontakt.php">zurück</a></p>';
}
echo '</div>';    

// Session unset
unset($_SESSION['CAPTCHA_RndText']);
}

$CAPTCHA_TempString="";

// Zufallsfunktion für Zahlen und Buchstaben
function GetRandomChar() {

    // Zufallszahl generieren
    mt_srand((double)microtime()*1000000);
    $CAPTCHA_RandVal = mt_rand(1,2);

    // Buchstabensalat generieren jeh nachdem ob Randval 1 oder 2 ist
    switch ($CAPTCHA_RandVal) {
    case 1:
	// Zahlen 0-9
	$CAPTCHA_RandVal = mt_rand(48, 57);
	break;
    case 2:
	// Grosse Buchstaben
	$CAPTCHA_RandVal = mt_rand(65, 90);
	break;
    }

    // Zufallscode ausgeben
    return chr($CAPTCHA_RandVal);
}

// Zufallscode x-stellig ausgeben
for ($i = 1; $i <= 6; $i++) {
    $CAPTCHA_TempString .= GetRandomChar();
}

// Text in Sessionvariable speichern
if (isset($CAPTCHA_TempString)) {
    $_SESSION["CAPTCHA_RndText"] = str_replace('I','E',str_replace('0','3',str_replace('1','S',str_replace('B','F',str_replace('O','P',str_replace('4','A',str_replace('D','K',$CAPTCHA_TempString)))))));
} else {
    die("Zufallscode konnte nicht generiert werden!");
}
// +++++++ in diesen Teil habe ich die komplette Originaldatei kontakt_ausw.php übernommen
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <meta http-equiv="language" content="de" />
    <title>Kontaktformular</title>
</head>

<body>
<div style="border: 1px #000 solid; width: 350px; padding: 5px;">
<h3>Kontaktformular</h3>

<form method="post" action="test.php" name="kontakt">
    <table>
    <tr><td><p>Name: </p></td><td><p><input name="name" size="34" type="text" <?if (isset($_SESSION['name'])) { echo 'value="' . $_SESSION['name'] . '"'; }?>/></p></td></tr>
    <tr><td><p>Email: </p></td><td><p><input name="email" size="34" type="text" <?if (isset($_SESSION['email'])) { echo 'value="' . $_SESSION['email'] . '"'; }?>/></p></td></tr>
    <tr><td><p>Betreff: </p></td><td><p><input name="betreff" size="34" type="text" <?if (isset($_SESSION['betreff'])) { echo 'value="' . $_SESSION['betreff'] . '"'; }?>/></p></td></tr>
    <tr><td><p>Nachricht: </p></td><td><p><textarea name="nachricht" rows="3" cols="26"><?if (isset($_SESSION['nachricht'])) { echo  $_SESSION['nachricht'] ; }?></textarea></p></td></tr>

    <tr><td> </td><td><img border="0" src="captcha_img.php?PHPSESSID=<?echo session_id();?>&ver=<?echo time();?>" alt="" /></td></tr>
    <tr><td><p>Code: </p></td><td><p><input maxlength="6" name="txtCode" size="34" type="text" /></p></td></tr>
    <tr><td> </td><td><p><input class="button" type="submit" name="eintrag" value="eintragen" />&nbsp;<input class="button" type="reset" name="reset" value="l&ouml;schen" /></p></td></tr>
    </table>
    </div>
</form>
</body>
</html>


Duddle
 

Isometric

Powerproster

AW: php - Kontaktformular umbauen

Super :lol:

ich schätze mal das hätte ich nicht hinbekommen :uhm:

dann werde ich mal weiter werkeln und das Formular weiter umbauen
 

Isometric

Powerproster

AW: php - Kontaktformular umbauen

Den Umbau habe ich bis jetzt hin bekommen.

Bis jetzt, da gibt es nämlich noch einen klitzekleinen :mad: Problempunkt, der sich heftig wehrt.

Durch die Session stehen ja alle Variablen im Formular drin, auch wenn ich über eine Kontrollseite noch mal ins Formular zurückspringe, um Eingaben zu ändern.

In dem Formular habe ich eine Vorauswahl, die ich über

Das funktioniert über JQuery mit diesem Codeblock:
HTML:
<script type="text/javascript">
$(document).ready(function(){ // alle Codes hier zwischen werden erst geladen, wenn die Seite fertig geladen ist
    
    // Voreinstellungen
    $('#auswahl div').hide(); // Blendet alle div mit id "auswahl" aus
    $('#auswahl div#liste1').show(); // Hiermit wird div mit id "liste1" zu Beginn schon eingeblendet
    
    $('#vorauswahl input[type=radio]').click(function(){ // führt folgenden Code beim Klick auf ein radio-Button aus
        $('#auswahl div').hide(); // Blendet wieder div mit id "auswahl" aus
        $('#'+$(this).val()).show(); // Einblenden der Liste --> Radio value => div ID des einzublendenen Elements
           });

});
</script>
Durch diesen Befehl wird also auch ein Div-Container wieder ausgeblendet, der beim Abschicken des Formulares eigentlich aktiv war:
$(document).ready(function(){ // alle Codes hier zwischen werden erst geladen, wenn die Seite fertig geladen ist
So sieht der Formularteil aus:
PHP:
<li id="li_2" >
<div id="auswahl">
    <div id="liste1">
    <label for="wert" ><?PHP echo $errorPicture['wert']; ?>Möglichkeit 1</label>
        <select size ="1" name="wert" class="<?PHP echo $errorClass['wert']; ?>">
            <option value="" <?PHP if(empty($_SESSION['wert'])) echo 'selected'; ?>>Bitte ausw&auml;hlen</option>
            <option value="2" <?PHP if($_SESSION['wert'] == "2") echo 'selected'; ?>>Liste 1 - Auswahl 1</option>
            <option value="1" <?PHP if($_SESSION['wert'] == "1") echo 'selected'; ?>>Liste 1 - Auswahl 2</option>
        </select>
    </div>
    
    <div id='liste2'>
    <label for="wert" ><?PHP echo $errorPicture['wert']; ?>Möglichkeit 2</label>
        <select size ="1" name="wert" class="<?PHP echo $errorClass['wert']; ?>">
            <option value="" <?PHP if(empty($_SESSION['wert'])) echo 'selected'; ?>>Bitte ausw&auml;hlen</option>
            <option value="2" <?PHP if($_SESSION['wert'] == "2") echo 'selected'; ?>>Liste 2 - Auswahl 2</option>
            <option value="1" <?PHP if($_SESSION['wert'] == "1") echo 'selected'; ?>>Liste 2 - Auswahl 2</option>
        </select>
    </div>
</div>
Hat jemand eine Idee, wie ich den Zustand des Formulars wieder herstellen kann, der beim Absenden vorhanden war ?
 
Zuletzt bearbeitet:

Duddle

Posting-Frequenz: 14µHz

AW: php - Kontaktformular umbauen

Du meinst, du möchtest bspw. Liste 2 einblenden lassen, falls beim Abschicken diese eingeblendet war?

Falls ja, wäre eine Lösung, einen Teil des JavaScript-Blockes auch von PHP erzeugen zu lassen und dort abhängig von Inhalten der Session eine Variable auf den gewünschten Wert zu initialisieren. Diese würde dann bestimmen, welcher Block beim ready() gezeigt wird.

Alternativ könntest du die eingeblendeten Teile in ein Cookie schreiben und dieses im ready() auslesen. So wird das normalerweise auch gemacht (hier im Forum ebenfalls mit den Seitenleisten).


Duddle
 

Isometric

Powerproster

AW: php - Kontaktformular umbauen

Falls ja, wäre eine Lösung, einen Teil des JavaScript-Blockes auch von PHP erzeugen zu lassen und dort abhängig von Inhalten der Session eine Variable auf den gewünschten Wert zu initialisieren. Diese würde dann bestimmen, welcher Block beim ready() gezeigt wird.
Da hab ich vor lauter Wald das Bäumchen nicht gesehen. Die Lösung klappt schon mal.

Alternativ könntest du die eingeblendeten Teile in ein Cookie schreiben und dieses im ready() auslesen. So wird das normalerweise auch gemacht (hier im Forum ebenfalls mit den Seitenleisten).
und wie funktioniert so was?
 

Duddle

Posting-Frequenz: 14µHz

AW: php - Kontaktformular umbauen

und wie funktioniert so was?
Naja, du setzt oder liest ein Cookie und entscheidest anhand dessen ob du ein Element einblendest oder nicht. Cookies sind letztlich auch nur Daten, genauso wie Sessions.

Wie du mit JS bzw. jQuery Cookies behandelst findest du per Google selbst.


Duddle
 

Isometric

Powerproster

AW: php - Kontaktformular umbauen

So, ich habe jetzt mal mit Cookie getestet, aber da muss ich immer 2x auf Absenden drücken, damit der Keks sich ändert. :mad:

Was mache ich falsch ?
PHP:
<?php
// Definition Variable für id_aktuell der Navigation
$seite = basename($_SERVER['PHP_SELF']) ; // Seite ohne Pfad, Definition Variable für id_aktuell der Navigation
$title = "Test";

session_start();

$errorFields = array('name',
                    'email'
                );    


if(isset($_POST['submit']))
{
    setcookie("gruppe", "", time() - 3600);
    $gruppe = $_POST['gruppe'];
    $_SESSION['name']         = $_POST['name'];
    $_SESSION['wert']         = $_POST['wert'];
    $_SESSION['wert1']         = $_POST['wert1'];
    $_SESSION['wert2']         = $_POST['wert2'];
    $_SESSION['email']         = $_POST['email'];
    $_SESSION['gruppe']     = $gruppe;
    setcookie("gruppe", $gruppe);
    setcookie("wert1", $_POST['wert1']);

    $error = FALSE;
    foreach($errorFields as $key => $value)
    {
        if(empty($_POST[$errorFields[$key]]))
        {
            $error = TRUE;
            $errorClass[$value] = 'errorField';
        }
    }
}

if(isset($_POST['submit']))
{
    if($error == TRUE)     $errorMessage = '<p><b>Achtung!</b><br>Es ist zu einem Fehler gekommen. Bitte füllen Sie die mit * markierten Pflichtfelder aus.</p>'; 
    else
    {
        // Alles ist in Ordnung
        // Daten können gespeichert werden
    $errorMessage = '<p><b> Ihre Eingabe war erfolgreich!</p>';
    // session_unset();
    }
            
}?>

<!DOCTYPE html>
<html>

<?php echo "<title>" . $title . "</title>"; ?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script><!-- jQuery Codes einbinden -->


<script type="text/javascript">
$(document).ready(function(){ // alle Codes hier zwischen werden erst geladen, wenn die Seite fertig geladen ist
    
    // Voreinstellungen
    $('#auswahl div').hide(); // Blendet alle div mit id "auswahl" aus
    <?php if($_COOKIE['gruppe'] == "liste2") { ?>
    $('#auswahl div#liste2').show(); // Hiermit wird div mit id "liste2" zu Beginn schon eingeblendet
    <?php } else { ?>
    $('#auswahl div#liste1').show(); // Hiermit wird div mit id "liste1" zu Beginn schon eingeblendet
    <?php } ?>    
    $('#vorauswahl input[type=radio]').click(function(){ // führt folgenden Code beim Klick auf ein radio-Button aus
        $('#auswahl div').hide(); // Blendet wieder div mit id "auswahl" aus
        $('#'+$(this).val()).show(); // Einblenden der Liste --> Radio value => div ID des einzublendenen Elements
        //$('#'+$(this).val()).slideDown('slow'); // Alternativ zum Einblenden
    });
});
</script>


</head>
<body>
<div id="container">

<div id="main" style="width: 750px;">
<h1>Formular</h1>
<?PHP echo $errorMessage; 
echo "<pre>";
print_r($_SESSION);
print_r($_COOKIE);
echo "</pre>";
?>
<form  action="<?PHP echo $script; ?>" method=post>
<ul>
    <fieldset>
    <li id="li_1" style="width: 550px;">
            <div id="vorauswahl" style="display: inline;">
            <label class="description" for="gruppe" >Vorauswahl: </label><br /><br />
            <input type="radio" name="gruppe" value="liste1" <?PHP if(($_SESSION['gruppe'] == "liste1") OR empty($_SESSION['gruppe'])) echo 'checked="checked"'; ?> />Möglichkeit 1
            <input type="radio" name="gruppe" value="liste2" <?PHP if($_SESSION['gruppe'] == "liste2") echo 'checked="checked"'; ?>/>Möglichkeit 2
            <br /><br />
        </div>
    </li>

    <li id="li_2" >
    <div id="auswahl">
        <div id="liste1">
        <label for="wert1" ><?PHP echo $errorPicture['wert1']; ?>Möglichkeit 1</label>
            <select name="wert1" class="<?PHP echo $errorClass['wert1']; ?>">
                <option value="" <?PHP if(empty($_SESSION['wert1'])) echo 'selected'; ?>>Bitte ausw&auml;hlen</option>
                <option value="Liste 1 - Auswahl 1" <?PHP if($_SESSION['wert1'] == "Liste 1 - Auswahl 1") echo 'selected'; ?>>Liste 1 - Auswahl 1</option>
                <option value="Liste 1 - Auswahl 2" <?PHP if($_SESSION['wert1'] == "Liste 1 - Auswahl 2") echo 'selected'; ?>>Liste 1 - Auswahl 2</option>
            </select>
        </div>
        
        <div id='liste2'>
        <label for="wert2" ><?PHP echo $errorPicture['wert']; ?>Möglichkeit 2</label>
            <select name="wert2" class="<?PHP echo $errorClass['wert2']; ?>">
                <option value="" <?PHP if(empty($_SESSION['wert2'])) echo 'selected'; ?>>Bitte ausw&auml;hlen</option>
                <option value="Liste 2 - Auswahl 1" <?PHP if($_SESSION['wert2'] == "Liste 2 - Auswahl 1") echo 'selected'; ?>>Liste 2 - Auswahl 1</option>
                <option value="Liste 2 - Auswahl 2" <?PHP if($_SESSION['wert2'] == "Liste 2 - Auswahl 2") echo 'selected'; ?>>Liste 2 - Auswahl 2</option>
            </select>
        </div>

    </div>    
    </li>

    </fieldset>
    
    <fieldset> 
    <legend> Addresse </legend>    
    <li>
            <label for="name" >Vor- u. Nachname *</label>
            <input id="name" name="name" value="<?PHP echo $_SESSION['name']; ?>">
    </li>

    <li>
        <label for="email" >E-Mail *</label>
        <input id="email" type="text" name="email" value="<?PHP echo $_SESSION['email']; ?>">
    </li>

    </li>
    <input name="submit" type="submit" value="Absenden" class="button">
    </fieldset>
</ul>


</form>

</div> <!-- Ende: main -->

</div><!-- Ende container -->
</body>
</html>
http://www.rettungshunde-kaiserslautern.de/test.php
 
Zuletzt bearbeitet:

Duddle

Posting-Frequenz: 14µHz

AW: php - Kontaktformular umbauen

Nein, du sollst mit JS oder jQuery den Cookie schreiben. Das ist völlig unabhängig von PHP. Dann musst du nur folgende Ereignisse behandeln:
  • Seite geladen: falls kein Cookie gesetzt ist, Standard-Gruppe einblenden. Ansonsten das Cookie auslesen und diese Gruppe einblenden
  • Gruppe wird geändert: Cookie setzen und die gewählte Gruppe reinschreiben sowie einblenden
Das war es schon.

Edit: das was du jetzt machst ist eine Mischung aus Lösungsansatz 1 und 2.


Duddle
 

Isometric

Powerproster

AW: php - Kontaktformular umbauen

Der Einbau der jQuery-Cookies stockt ein bisschen.

Ich habe aber ein neues Problem:
das Kontaktformularscript funktioniert auf einem Webserver nicht:

das Captcha-Bild wird nicht angezeigt :mad:

Hat jemand eine Idee, an was das liegen könnte?
Der Webserver läuft auf php 5.3, lokal habe ich auf einer Diskstation die gleiche php-Version. Auf einem Server mit php 5.2 läuft das Script problemlos.

Gibt es vielleicht im diesem Codeteil irgendeine Stelle, die bei PHP 5.3 zu Problemen führen kann, bzw. für die eine bestimmte Konfiguration erforderlich ist?
PHP:
    // Header
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");    // Datum aus Vergangenheit
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
                                                         // immer geändert
    header("Cache-Control: no-store, no-cache, must-revalidate");  // HTTP/1.1
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");                          // HTTP/1.0
 

Wellenbrecher1963

Aktives Mitglied

AW: php - Kontaktformular umbauen

vielleicht ist die gd2 Bibliothek nicht aktiviert und im Apache 2 eingebaut? Was für eine Fehlermeldung bekommst Du? Wenn die gd fehlt, bekommt man eigentlich eine Fehlermeldung zurück, in der Art: "Grafik konnte nicht erstellt werden". Wenn er die Grafik nicht laden kann, kommt der 404 Fehler.

Hast Du schon mal in die Logs vom Apache geschaut, was da der PHP Compiler so ausplaudert? In der Regel steht da ganz genau drinnen, was Apache so anmault. In der Regel dürfte es die error.log Datei sein. Müßte eigentlich auf Linux Systemen unter /var/log/apache2/ zu finden sein. Bei Windowsservern kenn ich mich nicht aus, aber da muss es ja auch ein Sub geben, in der der Apache oder IIP (oder wie der jetzt unter neuem System nun auch wieder heißt) schreibt.

so long,
Sylvio
 

Isometric

Powerproster

AW: php - Kontaktformular umbauen

Hi Sylvio,

der Hinweis mit der gd2 Bibliothek erscheint mir plausibel.

Das Script läuft ja eigentlich problemlos durch. Und in manchen Browsern sieht man an Stelle der Grafik ein Symbol, oder einen senkrechten Strich, wenn ich border für das img aktiviere.

Ich schau mal, ob ich an die Logs drankomme. Ansonsten ist das ein guter Ansatz für den Provider, wo der suchen muss.
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
175.189
Beiträge
2.582.077
Mitglieder
67.259
Neuestes Mitglied
SaschMasch1312
Oben