Soweit geht alles ABER,

Hier werden Probleme rund um das Zahlen Captcha behandelt

Moderator: frameguard

Soweit geht alles ABER,

Beitragvon apophis171 » 03.04.2007, 00:15

ich habe in meinen kontaktformular Pflichtfelder. seit ich dieses script eingepflegt habe wird zwar noch geprüft ob alles eingegeben ist aber nicht mehr angezeigt (falls nichs eingegeben wurde)

Wie gesagt, das script funzt wunderbar und der code wird auch abgefragt aber das mit der feld prüfung will nicht mehr...

ich weiss nicht, ob es sinnvoll wäre den gesamten script hier mit einzufügen, weil er ziehmlich lang ist und auf mehrere dateien verteilt ist

mfg chriss

p.s. hier ist die seite, wo ich das script verwende http://apophis171.ap.funpic.de[/url]
apophis171
 
Beiträge: 16
Registriert: 03.04.2007, 00:08
Wohnort: Rathenow

Beitragvon frameguard » 05.04.2007, 13:33

Ohne Einblick in den Script können wir Dir da aber leider nicht helfen, weil die Fehlerursache kann auch zB einfach ein vergessenes ; sein (sowas hatte ich schon mal - stundenlang den Fehler gesucht, dann dahintergestiegen, daß ich einfach ein ; vergessen hatte *g*).
frameguard
 
Beiträge: 120
Registriert: 05.03.2007, 19:19
Wohnort: Wien

Beitragvon apophis171 » 05.04.2007, 20:57

Ich denke mal, das ist der teil, wo mein fehler drinn ist. weil ich an den rest von den captcha code (außer den sicherheitscode) nix geändert habe.

Code: Alles auswählen
<html>
<head>
<title>Schubi^2</title>
<style type="text/css">
<!--
body,td,th { color: #FFFFFF; }
body { background-color: #000000; }
-->
</style></head>
<body>
<form action="impress_out.php" method="post" class="form">
  <legend>Hinweis</legend>
  <p>Der Sicherheitscode dient dem Spamschutz. Dieses Feld <strong>muss</strong> ausgef&uuml;llt werden!<br>
  Hier gibt es weitere Informationen zum Spamschutz &gt;&gt; <br>
  <a href="http://www.stoppt-den-spam.info" target="_blank"><img src="http://www.stoppt-den-spam.info/images/banner/stoppt-den-spam-2.gif" alt="Stoppt den Spam" border="0"></a></p>
   <?php
     // captcha anfang
      session_start();
      function encrypt($string, $key) {
      $result = '';
      for($i=0; $i<strlen($string); $i++) {
         $char = substr($string, $i, 1);
         $keychar = substr($key, ($i % strlen($key))-1, 1);
         $char = chr(ord($char)+ord($keychar));
         $result.=$char;
      }
      return base64_encode($result);
      }
      $sicherheits_eingabe = encrypt($_POST["sicherheitscode"], "geheim");
      $sicherheits_eingabe = str_replace("=", "", $sicherheits_eingabe);
      if($sicherheits_eingabe == $_SESSION['captcha_spam']){
      unset($_SESSION['captcha_spam']);
     // captcha ende
               $name=$_POST["name"];
               $adresse=$_POST["adresse"];       
            $plzort=$_POST["plzort"];
            $tel=$_POST["tel"];
               $email=$_POST["email"];
            $www=$_POST["www"];
            $select=$_POST["select"];
            $text=$_POST["text"];
               $mail_to = "mein@email.com";
               $header="From: " 
                      ."$email"
                      ."";

               $subject="Sie bekommen eine E-Mail mit folgendem Inhalt";
               $merker="";
                   if (""==$sicherheits_eingabe)
               if (""==$name)
               if (""==$adresse)
               if (""==$plzort)
               if (""==$tel)
               if (""==$email)
               if (""==$www)
               if (""==$select)
               if (""==$text)
                {
               }
               if (""==$sicherheits_eingabe)
               {$merker="$merker Bitte geben Sie den Sicherheitscode ein <br>";}
               if (""==$name)
               {$merker="$merker Ihre Namen und Vornamen <br>";}
                   if (""==$email)
               {$merker="$merker Ihre e-Mail Adresse <br>";}
                   if (""==$select)
               {$merker="$merker Ihre Betreff<br>";}
                   if (""==$text)
               {$merker="$merker Ihre Nachricht <br>";
               {
               
            echo ("<div class=\"\"><br><br></br></p>Ergänzen Sie bitte die fehlenden Angaben im Kontaktformular,<br>damit wir mit Ihnen in Kontakt treten können:<p> <div class=\"error \"> $merker <p>");
                   }   
            }
         else
         {
            $Body="Folgende Nachricht ist soebend von ihren Kontaktformular auf apophis171.ap.funpic.de eingegangen:\n\n--------------------------------------------------\n\nName: $name\nAdresse: $adresse\nPLZ Ort: $plzort\nTelefonnummer: $tel\nE-Mail: $email\nInternet: $www\nBetreff: $select\nNachricht: $text\n\n--------------------------------------------------\n\nDiese E-Mail könnte  vertrauliche und/oder rechtlich geschützte Informationen enthalten. Wenn Sie nicht der richtige Adressat sind oder diese E-Mail irrtümlich erhalten haben, informieren Sie bitte sofort den Absender und vernichten Sie diese Mail. Das unerlaubte Kopieren sowie die unbefugte Weitergabe dieser Mail sind nicht gestattet.\n\nThis e-mail may contain confidential and/or privileged information. If you are not the intended recipient (or have received this e-mail in error) please notify the sender immediately and destroy this e-mail. Any unauthorised copying, disclosure or distribution of the material in this e-mail is strictly forbidden.";
            mail ("meine@email.com", "Kontaktformular","$Body","$header");
            echo ("<div class=\"txt12px_content\">Hallo <b>$name </b> vielen Dank für Ihre Nachricht.<br>
            Wir werden Ihre Nachricht umgehend bearbeiten.<br><br>
         
         <b>Name:</b> $name<br>
         <b>Adresse:</b> $adresse<br>
         <b>PLZ, Ort:</b> $plzort<br>
         <b>Telefonnummer:</b> $tel<br>
         <b>E-Mail:</b> $email<br>
         <b>Internet:</b> $www<br>
         <b>Betreff:</b> $select<br>
         <b>Nachricht:</b> $text<br></div>");
            }
         }
         ?>     

     <br>
     <br>
     <a class="locationCat" href="javascript:history.back()">[zur&uuml;ck]</a><br>
     <br>
     <br>
</form>
</body>
</html>
apophis171
 
Beiträge: 16
Registriert: 03.04.2007, 00:08
Wohnort: Rathenow

Beitragvon frameguard » 05.04.2007, 21:48

Also ganz 100%ig sicher bin ich mir da jetzt nicht, aber es könnte daran liegen:

if (""==$sicherheits_eingabe)
if (""==$name)
if (""==$adresse)
if (""==$plzort)
if (""==$tel)
if (""==$email)
if (""==$www)
if (""==$select)
if (""==$text)

Wenn also $sicherheits_eingabe ein Leerstring ist, dann prüft er erst, ob $name einer ist, wenn der ein Leerstring ist, prüft er weiter die adresse, usw. - d. h., wenn eine der Eingaben KEIN Leerstring ist, prüft er den Rest gar nicht mehr.

Ich würde das so schreiben:

if (""==$sicherheits_eingabe)
OR (""==$name)
OR (""==$adresse)
OR (""==$plzort)
OR (""==$tel)
OR (""==$email)
OR (""==$www)
OR (""==$select)
OR (""==$text)

Probier das mal. ;)

Übrigens: Warum die eigenwillige Syntax IF (geprüfter Wert == zu prüfender Wert)? Funktioniert zwar, aber üblich ist es eigentlich andersherum: IF (zu prüfender Wert == geprüfter Wert), also im obigen Beispiel: IF ($sicherheits_eingabe == '') ;)
frameguard
 
Beiträge: 120
Registriert: 05.03.2007, 19:19
Wohnort: Wien

Beitragvon apophis171 » 10.04.2007, 14:50

so, habe mal deinen vorschlag genommen, und ewig lange rumgetüftelt und irgedwie geht das nicht so wirklich. habe es auch mal in anderen varriationen probiert, aber es will nicht so wie ich das will :?

Also das captcha und formular funktionieren ja soweit aber die zu prüfenden sachen werden nicht ausgegeben.

Die eigenwillige syntax kommen wahrscheinlich daher, dass ich mir mal ne vorlage für ein kontaktformular von selfhtml geholt habe, und das noch nie überarbeitet habe, sondern immer nur erweitert. Aber recht hatteste. in meinen login script habe ich es "richtig" gemacht :D
apophis171
 
Beiträge: 16
Registriert: 03.04.2007, 00:08
Wohnort: Rathenow

Beitragvon frameguard » 10.04.2007, 15:22

Ok, ich versuch mal, das umzuschreiben:
Code: Alles auswählen
               $subject="Sie bekommen eine E-Mail mit folgendem Inhalt";
               $merker="";

// Ist eine der Variablen leer?
               if (""==$sicherheits_eingabe) OR (""==$name) OR (""==$adresse) OR (""==$plzort) OR (""==$tel) OR (""==$email) OR (""==$www) OR (""==$select) OR (""==$text) {

// Dann belege Merker

                     if (""==$sicherheits_eingabe)
                    {$merker=$merker." Bitte geben Sie den Sicherheitscode ein <br>";}
                    ELSE if (""==$name)
                    {$merker=$merker." Ihre Namen und Vornamen <br>";}
                    ELSE if (""==$email)
                    {$merker=$merker." Ihre e-Mail Adresse <br>";}
                    ELSE if (""==$select)
                    {$merker=$merker." Ihre Betreff<br>";}
                    ELSE if (""==$text)
                   {$merker=$merker." Ihre Nachricht <br>";}

// Ausgabe               

            echo ("<div class=\"\"><br><br></br></p>Ergänzen Sie bitte die fehlenden Angaben im Kontaktformular,<br>damit wir mit Ihnen in Kontakt treten können:<p> <div class=\"error \">". $merker ."<p>");

         }   
         else
         {
            $Body="Folgende Nachricht ist soeben von Ihrem Kontaktformular auf apophis171.ap.funpic.de eingegangen:\n\n--------------------------------------------------\n\nName: ".$name."\nAdresse: ".$adresse."\nPLZ Ort: ".$plzort."\nTelefonnummer: ".$tel."\nE-Mail: ".$email."\nInternet: ".$www."\nBetreff: ".$select."\nNachricht: ".$text."\n\n--------------------------------------------------\n\nDiese E-Mail könnte vertrauliche und/oder rechtlich geschützte Informationen enthalten. Wenn Sie nicht der richtige Adressat sind oder diese E-Mail irrtümlich erhalten haben, informieren Sie bitte sofort den Absender und vernichten Sie diese Mail. Das unerlaubte Kopieren sowie die unbefugte Weitergabe dieser Mail sind nicht gestattet.\n\nThis e-mail may contain confidential and/or privileged information. If you are not the intended recipient (or have received this e-mail in error) please notify the sender immediately and destroy this e-mail. Any unauthorised copying, disclosure or distribution of the material in this e-mail is strictly forbidden.";
            mail ("meine@email.com", "Kontaktformular",$Body,$header);
            echo ("<div class=\"txt12px_content\">Hallo <b>".$name." </b> vielen Dank für Ihre Nachricht.<br>
            Wir werden Ihre Nachricht umgehend bearbeiten.<br><br>
         
         <b>Name:</b> ".$name."<br>
         <b>Adresse:</b> ".$adresse."<br>
         <b>PLZ, Ort:</b> ".$plzort."<br>
         <b>Telefonnummer:</b> ".$tel."<br>
         <b>E-Mail:</b> ".$email."<br>
         <b>Internet:</b> ".$www."<br>
         <b>Betreff:</b> ".$select."<br>
         <b>Nachricht:</b> ".$text."<br></div>");
         }

// Es folgt Endif der Captcha-Abfrage

       }
         ?>     


Probier das einmal.
frameguard
 
Beiträge: 120
Registriert: 05.03.2007, 19:19
Wohnort: Wien

Beitragvon apophis171 » 10.04.2007, 20:11

also, das ging jetzt irgendwie auch nicht :cry:

werde es jetzt ganz einfach lösen die sache. werde als ausgabe einfach schreiben, dass alle gekennzeichneten felder ausgefüllt werden müssen. Es sei denn, du bist mit deinem latein noch nicht ganz am ende und hast noch ne lösung :D

wenn nicht bedanke ich mich trotzdem recht herzlich für die hilfe
apophis171
 
Beiträge: 16
Registriert: 03.04.2007, 00:08
Wohnort: Rathenow

Beitragvon frameguard » 10.04.2007, 23:09

Ich bin mit meinem Latein NIE am Ende. ;) Ich überschlaf das mal, vielleicht fällt mir ja noch was ein.
frameguard
 
Beiträge: 120
Registriert: 05.03.2007, 19:19
Wohnort: Wien

Beitragvon frameguard » 11.04.2007, 18:46

Also eigentlich SOLLTE der obige Script funktionieren.

Du könntest höchstens noch versuchen,

if (""==$sicherheits_eingabe)
{$merker=$merker." Bitte geben Sie den Sicherheitscode ein <br>";}
ELSE if (""==$name)
{$merker=$merker." Ihre Namen und Vornamen <br>";}
ELSE if (""==$email)
{$merker=$merker." Ihre e-Mail Adresse <br>";}
ELSE if (""==$select)
{$merker=$merker." Ihre Betreff<br>";}
ELSE if (""==$text)
{$merker=$merker." Ihre Nachricht <br>";}

durch

if (""==$sicherheits_eingabe) {$merker=." Bitte geben Sie den Sicherheitscode ein <br>";}
if (""==$name) {$merker=." Ihre Namen und Vornamen <br>";}
if (""==$email) {$merker=." Ihre e-Mail Adresse <br>";}
if (""==$select) {$merker=." Ihre Betreff<br>";}
if (""==$text) {$merker=." Ihre Nachricht <br>";}

zu ersetzen.

Und dann ist noch die Frage, wieso in

if (""==$sicherheits_eingabe) OR (""==$name) OR (""==$adresse) OR (""==$plzort) OR (""==$tel) OR (""==$email) OR (""==$www) OR (""==$select) OR (""==$text) {

mehr Variablen abgefragt werden als im obigen Scriptfragment. Wenn das nämlich alles Pflichteingaben sind, mußt Du für ALLE Fehlermeldungen generieren, wenn nicht, mußt Du die, die keine Pflichtfelder sind, aus der if-Zeile entfernen.
frameguard
 
Beiträge: 120
Registriert: 05.03.2007, 19:19
Wohnort: Wien

Beitragvon apophis171 » 12.04.2007, 14:55

hab das jetzt mal so gemacht:

Code: Alles auswählen
if (""==$sicherheits_eingabe or ""==$name or ""==$email or ""==$select or ""==$text)
               
if (""==$sicherheits_eingabe) {$merker="$merker Bitte geben Sie den Sicherheitscode ein <br>";}
if (""==$name) {$merker="$merker Ihre Namen und Vornamen <br>";}
if (""==$email) {$merker="$merker Ihre e-Mail Adresse <br>";}
if (""==$select) {$merker="$merker Ihre Betreff<br>";}
if (""==$text) {$merker="$merker Ihre Nachricht <br>"; {

der zeigt jetzt zwar immernoch nicht an, was noch fehlt (außer wenn man nur den Sicherheitscode eingegeben hat) aber wichtig ist ja, dass er prüft.

aufgefallen ist mir, dass er den rest nur prüfen tut, wenn man den sicherheitscode eingegeben hat...

hab auch mal die sachen die nicht geprüft werden sollen rausgenommen (is mir noch nie aufgefallen, dass die noch drin sind :roll: eigentlich sollte alles geprüft werden, was aber sinnlos ist...)

wenn ich jedes "or" in eine extra klammer schreibe, dann geht garnix.

mal noch ne andere Frage: was ist der eigentlich der Unterschied zwischen:
"or" und "OR", und "elseif" und "else if"?
apophis171
 
Beiträge: 16
Registriert: 03.04.2007, 00:08
Wohnort: Rathenow

Beitragvon frameguard » 12.04.2007, 15:11

Zwischen or und OR gibt's überhaupt keinen Unterschied, das ist einfach eine Gewohnheit von mir, Befehle - im Gegensatz zB zu Variablen - in Großbuchstaben zu schreiben, weil's den Code etwas übersichtlicher macht. ;)

Auch elseif und else if sind im Prinzip dasselbe, wobei ich aber nicht weiß, ob die Schreibung elseif von PHP überhaupt unterstützt wird.

Wenn Du eine IF-Bedingung setzt, dann kann das so aussehen:

IF (Bedingung)
{
tu dies und jenes
}
ELSE
{
tu halt was anderes
}

d. h., wenn die Bedingung erfüllt ist, tut er das eine, wenn nicht, das andere. Jetzt kann es aber sein, daß er das andere nicht in jedem Fall, in dem die Erstbedingung nicht erfüllt ist, tun soll, sondern nur, wenn noch eine zweite Bedingung zutrifft, dann schreibt man:

IF (Bedingung)
{
tu dies und jenes
}
ELSE IF (Bedingung)
{
tu halt was anderes
}

und da kann dann noch ein "normales" ELSE folgen, das dann geschieht, wenn weder die erste noch die zweite Bedingung erfüllt sind.

Und deshalb die getrennte Schreibweise "else if": Das Else ist im Prinzip immer ein Else, das drangehängte IF ist einfach ein IF, das ELSE durchgeführt wird. ;)

Ich frage mich allerdings, wieso Du den Code nicht so übernimmst, wie ich ihn geschrieben habe. So, wie Du das schreibst:

if (""==$name) {$merker="$merker Ihre Namen und Vornamen <br>";}

ist, wenn Du irgendwo zu einem
echo $merker;
kommst, die Ausgabe:
$merker Ihre Namen und Vornamen


statt, wie geplant, nur
Ihre Namen und Vornamen


(bzw., bei if (""==$email) {$merker="$merker Ihre e-Mail Adresse <br>";}, wäre das dann
$merker Ihre e-Mail Adresse

statt nur
Ihre e-Mail Adresse

oder, wenn davor auch Name und Vorname fehlen:
Ihre Namen und Vornamen
Ihre e-Mail Adresse


Deshalb hatte ich ja oben den Code geändert auf

if (""==$email) {$merker=$merker."Ihre e-Mail Adresse <br>";}

usw.
frameguard
 
Beiträge: 120
Registriert: 05.03.2007, 19:19
Wohnort: Wien

Beitragvon apophis171 » 12.04.2007, 15:36

ups... :oops:

ich hatte nochmal komplett von vorne angefangen d.h. ich habe mir den ursprünglichen script nochmal vorgenommen und bin nochmal alles ganz langsam durchgegangen.

das hatt ich völlig übersehen, sorry.

hat sich aber trotzdem nix geändert :(
apophis171
 
Beiträge: 16
Registriert: 03.04.2007, 00:08
Wohnort: Rathenow

Beitragvon frameguard » 12.04.2007, 16:16

Probieren wir einmal etwas ganz anderes:

VOR der Zeile $sicherheits_eingabe = encrypt($_POST["sicherheitscode"], "geheim"); fügst Du folgende Funktion ein:

function eingabepruefung($merker)
{
if (""==$sicherheits_eingabe) {$merker=$merker." Bitte geben Sie den Sicherheitscode ein <br>";}
if (""==$name) {$merker=$merker." Ihre Namen und Vornamen <br>";}
if (""==$email) {$merker=$merker." Ihre e-Mail Adresse <br>";}
if (""==$select) {$merker=$merker." Ihre Betreff<br>";}
if (""==$text) {$merker=$merker." Ihre Nachricht <br>"; }

return $merker;
}

und dann unten, wo die Prüfung stattfinden soll:

$merker="";
$merker=eingabepruefung($merker);

if ($merker!="")
{

echo ("<div class=\"\"><br><br></br></p>Ergänzen Sie bitte die fehlenden Angaben im Kontaktformular,<br>damit wir mit Ihnen in Kontakt treten können:<p> <div class=\"error \">". $merker ."<p>");

}
else
{

$Body="Folgende Nachricht ist soeben von Ihrem Kontaktformular auf apophis171.ap.funpic.de eingegangen:\n\n--------------------------------------------------\n\nName: ".$name."\nAdresse: ".$adresse."\nPLZ Ort: ".$plzort."\nTelefonnummer: ".$tel."\nE-Mail: ".$email."\nInternet: ".$www."\nBetreff: ".$select."\nNachricht: ".$text."\n\n--------------------------------------------------\n\nDiese E-Mail könnte vertrauliche und/oder rechtlich geschützte Informationen enthalten. Wenn Sie nicht der richtige Adressat sind oder diese E-Mail irrtümlich erhalten haben, informieren Sie bitte sofort den Absender und vernichten Sie diese Mail. Das unerlaubte Kopieren sowie die unbefugte Weitergabe dieser Mail sind nicht gestattet.\n\nThis e-mail may contain confidential and/or privileged information. If you are not the intended recipient (or have received this e-mail in error) please notify the sender immediately and destroy this e-mail. Any unauthorised copying, disclosure or distribution of the material in this e-mail is strictly forbidden.";
mail ("meine@email.com", "Kontaktformular",$Body,$header);
echo ("<div class=\"txt12px_content\">Hallo <b>".$name." </b> vielen Dank für Ihre Nachricht.<br>
Wir werden Ihre Nachricht umgehend bearbeiten.<br><br>

<b>Name:</b> ".$name."<br>
<b>Adresse:</b> ".$adresse."<br>
<b>PLZ, Ort:</b> ".$plzort."<br>
<b>Telefonnummer:</b> ".$tel."<br>
<b>E-Mail:</b> ".$email."<br>
<b>Internet:</b> ".$www."<br>
<b>Betreff:</b> ".$select."<br>
<b>Nachricht:</b> ".$text."<br></div>");
}

Ist vielleicht etwas eleganter und sollte dasselbe bewirken wie Dein Script, nur daß eine Funktion das 1. IF ersetzt. Übergeben wird ein leerer Merker, und wenn der von der Funktion mit irgendwas gefüllt wird, wird die Fehlermeldung ausgegeben.

Probier das mal. Aber 1:1 rüberkopieren. ;)
frameguard
 
Beiträge: 120
Registriert: 05.03.2007, 19:19
Wohnort: Wien

Beitragvon apophis171 » 12.04.2007, 16:47

hab es diesmal 1:1 übernommen :) , aber jetzt merkt der merker garnix mehr... bzw. da wird nix übergeben. auch wenn alle felder ausgefüllt werden, will er, dass ich die pflichtfelder ausfülle.

mit dieser variante kann ich auch nicht viel anfangen, deswegen kann ich auch nicht so viel rumprobieren.

aber wenn ich das jetzt richtig verstanden habe, dann ist es genau das selbe nur halt als function, oder sehe ich das jetzt falsch?
apophis171
 
Beiträge: 16
Registriert: 03.04.2007, 00:08
Wohnort: Rathenow

Beitragvon frameguard » 12.04.2007, 16:57

Im Prinzip ja. Nur umgehen wir damit die OR-Konstruiererei, die ziemlich fehleranfällig ist. ;)

Versuch mal, die Funktion NACH

$name=$_POST["name"];
$adresse=$_POST["adresse"];
$plzort=$_POST["plzort"];
$tel=$_POST["tel"];
$email=$_POST["email"];
$www=$_POST["www"];
$select=$_POST["select"];
$text=$_POST["text"];
$mail_to = "mein@email.com";
$header="From: "
."$email"
."";

einzufügen statt davor. Sollte zwar wurscht sein, weil aufgerufen wird sie ja erst weiter unten, aber bitte, den Versuch ist's wert - weil sonst blick ich's echt nicht mehr. ;)
frameguard
 
Beiträge: 120
Registriert: 05.03.2007, 19:19
Wohnort: Wien

Nächste

Zurück zu Zahlen Captcha

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

cron