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

Captcha tut nicht...

devilseye

Neues Mitglied
hi folks
ich hab das Problem dass ich einen Captcha in das Kontaktformular einbinden möchte,
was auch einigermassen geht, zumindest wird das bild angezeig jedoch kann ich das
Formular abschicken auch wenn das Captcha nicht oder Falsch ausgefüllt ist.
session_start() wird in der index.php gestartet da formular.php dort included wird und
die session muss ja ganz am anfang stehen wenn ich das richtig gelesen habe. Ich weiss
dass es noch nicht wirklich sauber gecoded ist aber ich möchte halt einfach mal das es
funktioniert.

Danke schon im voraus

captcha.php
PHP:
<?php
## CAPTCHA ##

// Session starten
session_start();

// Größe des Bildes
$size_x = 70;
$size_y = 25;

// Erzeuge eine Zufallszahl
$zufallszahl = mt_rand("100000", "999999");

// Zufallszahl der Session-Variablen übergeben
$_SESSION["captcha_code"] = $zufallszahl;

// Erstelle das Bild mit der angegebenen Größe!
$bild = imageCreate($size_x, $size_y);

// Erstelle einen weißen Hintergrund
imageColorAllocate($bild, 255, 255, 255);

// Zufallsfarbe (RGB) erstellen
$farbe1 = mt_rand("0", "175");
$farbe2 = mt_rand("0", "175");
$farbe3 = mt_rand("0", "175");

// Verteile die Farben
$rahmen = imageColorAllocate($bild, 0, 0, 0); // Rahmenfarbe
$farbe  = imageColorAllocate($bild, $farbe1, $farbe2, $farbe3); // Textfarbe

// Hole die Zahlen der Punkte zum Zeichnen
$alle_punkte = ($size_x * $size_y)/15;

// Zeichne viele Punkte mit der selben Farbe des Textes
for ($zaehler = 0; $zaehler < $alle_punkte; $zaehler++) {

 // Erzeuge die Zufallspositionen der Punkte
 $pos_x = mt_rand("0", $size_x);
 $pos_y = mt_rand("0", $size_y);

 // Zeichne die Punkte
 imageSetPixel($bild, $pos_x, $pos_y, $farbe);
};

// Zeichne den Rahmen
imageRectangle($bild, 0, 0, $size_x-1, $size_y-1, $rahmen);

// Koordinaten der Position von der Zufallszahl
$pos_x = 8; // links
$pos_y = 5; // oben

// Zeichne die Zufallszahl
imageString($bild, 5, $pos_x, $pos_y, $zufallszahl, $farbe);

// Sende "browser header"
header("Content-Type: image/png");

// Sende das Bild zum Browser
echo imagePNG($bild);

// Lösche das Bild
imageDestroy($bild);
?>

formular.php
PHP:
<?php

error_reporting(0);
?>

<h1>Kontaktformular</h1>

<?php

require_once ( 'includes/library.php' );
if ( $_POST['name'] == "" or $_POST['vorname'] == "" or $_POST['mail'] == "" or !is_mail($_POST['mail']) ){
?>
<form action="index.php?menu=formular" method="post" >
<?php
    if ( $_POST['name'] == "" AND $_POST['abgesendet'] == "ja" ){
        echo '<span>Bitte einen Namen eingeben</span>'."\n".'<br />'."\n";
    }

    if ( $_POST['vorname'] == "" AND $_POST['abgesendet'] == "ja" ) {
        echo '<span>Bitte einen Vornamen eingeben</span>'."\n".'<br />'."\n";
    }

        if ( $_POST['mail'] <> "" )
        {
            if ( is_mail($_POST['mail']) == false )
            {
                echo '<span>E-Mail-Adresse ist Falsch - korrigieren</span>'."\n".'<br />'."\n";
                $_POST['mail'] = "";
            }
        }
        
        if ( $_POST['mail'] == "" AND $_POST['abgesendet'] == "ja" )
        {
            echo '<span>Bitte eine Email-Adresse eingeben</span>'."\n";
        }
        
        // Captcha überprüfen
        if ($_SESSION["captcha_code"] = ""  AND $_POST["captcha"] != $_SESSION["captcha_code"]) {
          echo '<span>Captcha ist Falsch bitte neu eingeben</span>';
        }
        
        // Session löschen
        unset($_SESSION['captcha_code']);

?>
        <p>
            <label for="name"><span>*</span>Name:
            <input type="text" name="name" value="<?php echo $_POST['name'] ; ?>" />
            </label>
        </p>

        <p>
            <label for="vorname"><span>*</span>Vorname:
            <input type="text" name="vorname" value="<?php echo $_POST['vorname'] ; ?>" />
            </label>
        </p>

        <p>
            <label for="mail"><span>*</span>Email:
            <input type="text" name="mail" value="<?php echo $_POST['mail'] ; ?>" />
            </label>
        </p>

        <p>
            <img src="captcha/captcha.php" width="70" height="25" alt="" style="vertical-align: middle;">
            <input type="text" name="captcha" size="6">
        </p>

        <input type="hidden" name="abgesendet" value="ja" />
        <input type="submit" value="Absenden" />
    </form>
<?php 
}else{
?>
<p>Vielen Dank für Ihr Intresse</p>
<?php
            $header     = 'From: artwebdesign.ch' . "\r\n";
            $empfaenger = "[email protected], [email protected]";
            $betreff    = "Webdesign Anfrage ";
            $inhalt     = "Anfrage von ". $_POST['name'] . $_POST['vorname'] ;
            $inhalt    .= "Anfrage von Email ". $_GET['mail'] ;

            mail ( $empfaenger, $betreff, $inhalt, $header ) ;

}
?>
 
Werbung:
Hallo.

PHP:
        if ($_SESSION["captcha_code"] = ""  [...]) {
Hier fehlt ein zweites Gleichheitszeichen. Möchtest du zwei Werte vergleichen, benötigst du grundsätzlich zwei Operationszeichen. Nur bei einer Wertezuweisung wird ein einzelnes Gleichheitszeichen verwendet.

Edit: In der selben Zeile ist vermutlich auch das AND falsch. Hier gehört ein OR hin.
 
ich versuch das gleich mal

Nein war nicht der Fehler also es war schon ein Fehler allerdings nicht jener der
den ich suche

EDIT
das OR macht nun dass die Fehleranzeige schon angezeigt wird wenn die Seite aufgerufen wird.
jedoch kann das Formular immernoch abgesendet werden wenn das Captcha nicht ausgefüllt ist.

EDIT 2 Zeile erweitert
PHP:
        if ($_SESSION["captcha_code"] == ""  OR $_POST["captcha"] != $_SESSION["captcha_code"] AND $_POST['abgesendet'] == 'ja' ) {
somit wird die Fehler anzeige nicht mehr angezeigt beim aufrufen der Seite

EDIT 3 Oh Gott ich depp ich habs raus ich hab vergessen bei der eingangsprüfung die abfrage zu für das captcha zu machen
danke aber trotzdem.

nun hab ich aber noch ein weiteres Problem die mail() tut nicht ich weiss nicht ob ich das am Falschen ort gesetzt habe oder
ob der Syntax Falsch ist.
 
Zuletzt bearbeitet:
Werbung:
tut auch nicht. Jedoch hab ich beim Hochladen bemerkt dass nur lokal das Problem
mit dem captcha behoben war hochgeladen allerdings aktzeptiert das Skript keine
Eingabe.

EDIT habs raus die session hab ich zu früh beendet war irgendwie logisch.
 
Zuletzt bearbeitet:
Zurück
Oben