wo muss der php code hin? bitte dringend um hilfe!

Hier werden Probleme rund um das Zahlen Captcha behandelt

Moderator: frameguard

wo muss der php code hin? bitte dringend um hilfe!

Beitragvon sfischer » 26.04.2007, 12:17

hallo!
ich bin unerfahren und teste schon eine weile!
wo kommen die code teile hin? der captcha ordner mit dadeien ist vorhanden und ich bekomme immer eine fehlermeldung
Code: Alles auswählen
<?php
session_start();
if(isset($_SESSION['captcha_spam']) AND $_POST["sicherheitscode"] == $_SESSION['captcha_spam']){
unset($_SESSION['captcha_spam']);

//
//
//Hier kommt das ursprüngliche Script hin.
//
//

}
?>

}else{
   die ("Der Sicherheitscode ist falsch!");
}

Code: Alles auswählen
<head>
</head>
<body>
<script language=JavaScript>
<!--
function isValid() {

   var msg = "";
   
   if (kontaktFormular.eMail.value.indexOf("@") < 1 ||
       kontaktFormular.eMail.value.indexOf(".") < 1) {
     msg += "- Die E-Mail-Adresse ist syntaktisch nicht korrekt.\n";
   }
   
   if(kontaktFormular.nachName.value == "") {
     msg += "- Leeres Feld: Nachname\n";
   }

   if(kontaktFormular.betreff1.value == "") {
     msg += "- Leeres Feld: Betreff\n";
   }

   if(kontaktFormular.nachricht.value == "") {
     msg += "- Leeres Feld: Nachricht\n";
   }
   
   if(msg == "") {
     return true;   
   }
   alert(msg);
   return false;
}
-->
</script>

<?php
 
  $formularAnzeigen = false;
  if (!empty($_POST["senden"]) && (
      empty($_POST["Name"]) ||
      empty($_POST["eMail"]) ||
      empty($_POST["betreff1"]) ||
      empty($_POST["nachricht"]))) {
    $formularAnzeigen = true;
    echo '<span style="color: #FF0000; font-size:12px;">Bitte alle Pflichtfelder ausf&uuml;llen.</span>';
  } else if (!empty($_POST["senden"]) &&
             !isEmail($_POST["eMail"])) {
    $formularAnzeigen = true; 
    echo '<span style="color: #FF0000; font-size: x-large;">Die E-Mail-Adresse ist nicht korrekt.</span>';
  } else if (empty($_POST["senden"])) {
    $formularAnzeigen = true; 
  }
  if ($formularAnzeigen) {
?>
<form name="kontaktFormular" method="post" action="<?=$_SERVER[PHP_SELF]; ?>" onSubmit="return isValid()">
<p>* = Pflichtfelder</p>
 
    <div class="kontakt">Name *<br/><input name="Name" type="text" value="<?=$_POST['Name']; ?>" / onFocus="this.style.backgroundColor='#fff'" onBlur="this.style.backgroundColor='#ffc'"></div>
   
    <div class="kontakt">Email *<br/><input name="eMail" type="text" id="eMail" value="<?=$_POST['eMail']; ?>" / onFocus="this.style.backgroundColor='#fff'" onBlur="this.style.backgroundColor='#ffc'"></div>

    <div class="kontakt">Telefon<br/><input name="Tel" type="text" value="<?=$_POST['Tel']; ?>" / onFocus="this.style.backgroundColor='#fff'" onBlur="this.style.backgroundColor='#ffc'"></div>   
       
    <div class="kontakt">Betreff *<br/><input name="betreff1" type="text" id="betreff1" value="<?=$_POST['betreff1']; ?>" size="50" / onFocus="this.style.backgroundColor='#fff'" onBlur="this.style.backgroundColor='#ffc'"></div>
     
    <div class="kontakt">Nachricht *<br/><textarea name="nachricht" cols="40" rows="4" style="overflow:auto" onFocus="this.style.backgroundColor='#fff'" onBlur="this.style.backgroundColor='#ffc'"><?=$_POST['nachricht']; ?></textarea></div>
     
    <div class="kontakt">Kopie an Sie?<br/><input name="kopie" type="checkbox" value="checked" <?=$_POST['kopie']; ?>></div>



   <tr>
<td><img src="captcha/captcha.php" border="0" title="Sicherheitscode"></td>
<td><input type="text" name="sicherheitscode" size="4"></td>
</tr>




    <div class="kontakt"><input name="senden" type="submit" value="Senden" /></div>
   </form>
<?php
  echo'';
  } else {
    $eMail = 'Nachricht:
----------
'.$_POST['nachricht'].'
       
Name:    '.$_POST['Name'].'
               
Email:   '.$_POST['eMail'].'
       
Telefon: '.$_POST['Tel'].'';
   
    if (@mail("info@email.de",$_POST['betreff1'],$eMail)) {
      echo "Ihre Nachricht wurde an mich verschickt, vielen Dank. ";
    } else {
      echo "Der Email-Verkehr funktioniert zur Zeit leider nicht.<br />";
    }
    if ($_POST['kopie']) {
      if (@mail($_POST['eMail'],$_POST['betreff1'],$eMail)) {
        echo "Sie haben eine Kopie der Nachricht zugeschickt bekommen.<br />";
      }
    }
  }
 
  function isEmail($email) {
    $nonascii      = "\x80-\xff";
    $nqtext        = "[^\\$nonascii\015\012\"]";
    $qchar         = "\\[^$nonascii]";
    $protocol      = "(?:mailto:)";
    $normuser      = "[a-zA-Z0-9][a-zA-Z0-9_.-]*";
    $quotedstring  = "\"(?:$nqtext|$qchar)+\"";
    $user_part     = "(?:$normuser|$quotedstring)";
    $dom_mainpart  = "[a-zA-Z0-9][a-zA-Z0-9._-]*\.";
    $dom_subpart   = "(?:[a-zA-Z0-9][a-zA-Z0-9._-]*\.)*";
    $dom_tldpart   = "[a-zA-Z]{2,5}";
    $domain_part   = "$dom_subpart$dom_mainpart$dom_tldpart";
    $regex         = "$protocol?$user_part\@$domain_part";
    if (preg_match("/^$regex$/",$email)) {
      return true;
    }
    return false;
  }
?>
</span>
</div>
</body>
</html>


vielen dank für die hilfe!!!
sfischer
 
Beiträge: 1
Registriert: 26.04.2007, 12:07

Beitragvon frameguard » 02.05.2007, 14:00

Hallo sfischer,

VOR <head> kommt erst einmal die Zeile:
<? php session_start(); ?>

Dann Dein Code wie gehabt, bis wieder <? kommt (dort kannst dann das "php" gleich weglassen).
Dort fügst Du ein:

if(isset($_SESSION['captcha_spam']) AND $_POST["sicherheitscode"] == $_SESSION['captcha_spam']){
unset($_SESSION['captcha_spam']);

und am Ende des Scripts, vor dem ?>, schließt Du die IF-Klammer wieder mit }.

Das
}else{
die ("Der Sicherheitscode ist falsch!");
}
ist nur eine Alternative dazu, die eine Fehlermeldung ausgibt (wenn Du nur die Klammer schließt, gibt es keine Fehlermeldung, es geschieht nur einfach nichts).
frameguard
 
Beiträge: 120
Registriert: 05.03.2007, 19:19
Wohnort: Wien

Beitragvon jfromm » 14.05.2007, 00:57

Ich habe das mal versucht nachzuvollziehen. Jedoch hab eich es nicht geschafft, mein Formular mit cpatcha funktionstüchtig zu bekommen. Wie unter bitte-helfen-ich-bin-echt-zu-bloed-t95.html#457 beschrieben, habe ich den Session-Start in die erste Zeile geschrieben. Das hat schon einmal die in anderen Beiträgen beschriebenen Fehlermeldungen beseitigt. Jedoch erscheint jetzt bei jedem Seitenaufruf nur noch die Meldung "Der Sicherheitscode ist falsch!", aber kein Formular.

Ich nehme an, es liegt an einer Kleinigkeit. Aber die finde ich als Laie nicht. Sitzt vielleicht die else-Anweisung an der falschen Stelle? Hat jemand eine Idee?

Die Ausgabe gibt's unter http://www.susann-fromm.de/kontakt.php

Code: Alles auswählen
<?php session_start(); ?>
<!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">
<head>
<?php include("include/meta.inc.php"); ?> 
</head>
<body onload="MM_preloadImages('images/galerie_1_hover.jpg','images/galerie_2_hover.jpg','images/galerie_4_hover.jpg','images/galerie_3_hover.jpg')">
<div id="kopf"></div>
<div id="bildwechsel"><?php include("include/bildwechsel.inc.txt"); ?> </div>
<div id="inhalt" style="margin:0 0 0 25px;"><span style="position: absolute; bottom: 0pt; width:270px;">
<h1 ><?php include("include/h1.inc.txt"); ?> </h1>
<h2>Kontakt</h2>
<!-- .......................................................................... -->
<!--                              Anfang Formular                               -->
<!-- .......................................................................... -->
<script language=JavaScript>
<!--
function isValid() {

   var msg = "";
   
   if (kontaktFormular.eMail.value.indexOf("@") < 1 ||
       kontaktFormular.eMail.value.indexOf(".") < 1) {
     msg += "- Die E-Mail-Adresse ist syntaktisch nicht korrekt.\n";
   }
   
   if(kontaktFormular.nachName.value == "") {
     msg += "- Leeres Feld: Nachname\n";
   }

   if(kontaktFormular.betreff1.value == "") {
     msg += "- Leeres Feld: Betreff\n";
   }

   if(kontaktFormular.nachricht.value == "") {
     msg += "- Leeres Feld: Nachricht\n";
   }
   
   if(msg == "") {
     return true;   
   }
   alert(msg);
   return false;
}
-->
</script>
<?php
// Beginn captcha pruefen
  if(isset($_SESSION['captcha_spam']) AND $_POST["sicherheitscode"] == $_SESSION['captcha_spam']){
  unset($_SESSION['captcha_spam']);   
// Ende captcha pruefen

  $formularAnzeigen = false;
  if (!empty($_POST["senden"]) && (
      empty($_POST["Name"]) ||
      empty($_POST["eMail"]) ||
      empty($_POST["betreff1"]) ||
      empty($_POST["nachricht"]))) {
    $formularAnzeigen = true;
    echo '<span style="color: #FF0000; font-size:12px;">Bitte alle Pflichtfelder ausf&uuml;llen.</span>';
  } else if (!empty($_POST["senden"]) &&
             !isEmail($_POST["eMail"])) {
    $formularAnzeigen = true; 
    echo '<span style="color: #FF0000; font-size: x-large;">Die E-Mail-Adresse ist nicht korrekt.</span>';
  } else if (empty($_POST["senden"])) {
    $formularAnzeigen = true; 
  }
  if ($formularAnzeigen) {
?>
<form name="kontaktFormular" method="post" action="<?=$_SERVER[PHP_SELF]; ?>" onSubmit="return isValid()">
<p>* = Pflichtfelder</p>
  <table width="250px">
    <tr><td>Name *<br/><input name="Name" type="text" value="<?=$_POST['Name']; ?>" / onFocus="this.style.backgroundColor='#fff'" onBlur="this.style.backgroundColor='#ffc'"></td></tr>
   
    <tr><td>Email *<br/><input name="eMail" type="text" id="eMail" value="<?=$_POST['eMail']; ?>" / onFocus="this.style.backgroundColor='#fff'" onBlur="this.style.backgroundColor='#ffc'"></td></tr>

    <tr><td>Telefon<br/><input name="Tel" type="text" value="<?=$_POST['Tel']; ?>" / onFocus="this.style.backgroundColor='#fff'" onBlur="this.style.backgroundColor='#ffc'"></td></tr>      
       
    <tr><td>Betreff *<br/><input name="betreff1" type="text" id="betreff1" value="<?=$_POST['betreff1']; ?>" size="50" / onFocus="this.style.backgroundColor='#fff'" onBlur="this.style.backgroundColor='#ffc'"></td></tr>
     
    <tr><td>Nachricht *<br/><textarea name="nachricht" cols="40" rows="4" style="overflow:auto" onFocus="this.style.backgroundColor='#fff'" onBlur="this.style.backgroundColor='#ffc'"><?=$_POST['nachricht']; ?></textarea></td></tr>
     
    <tr><td>Kopie an Sie?<br/><input name="kopie" type="checkbox" value="checked" <?=$_POST['kopie']; ?>></td></tr>

    <tr><td>Bitte geben Sie den Sicherheitscode ein<br/><img src="captcha/captcha.php" border="0" title="Sicherheitscode"><br/><input type="text" name="sicherheitscode" size="5" onFocus="this.style.backgroundColor='#fff'" onBlur="this.style.backgroundColor='#ffc'"></td></tr>

    <tr><td>&nbsp;</td></tr>
   
    <tr><td><input name="senden" type="submit" value="Senden" /></td></tr>

  </table>
</form>

<?php
  echo'';
  } else {
    $eMail = 'Nachricht:
----------
'.$_POST['nachricht'].'
       
Name:    '.$_POST['Name'].'
               
Email:   '.$_POST['eMail'].'
       
Telefon: '.$_POST['Tel'].'';
   
    if (@mail("mailbox@domain.de",$_POST['betreff1'],$eMail)) {
      echo "Ihre Nachricht wurde an mich verschickt, vielen Dank. ";
    } else {
      echo "Der Email-Verkehr funktioniert zur Zeit leider nicht.<br />";
    }
    if ($_POST['kopie']) {
      if (@mail($_POST['eMail'],$_POST['betreff1'],$eMail)) {
        echo "Sie haben eine Kopie der Nachricht zugeschickt bekommen.<br />";
      }
    }
  }
 
  function isEmail($email) {
    $nonascii      = "\x80-\xff";
    $nqtext        = "[^\\$nonascii\015\012\"]";
    $qchar         = "\\[^$nonascii]";
    $protocol      = "(?:mailto:)";
    $normuser      = "[a-zA-Z0-9][a-zA-Z0-9_.-]*";
    $quotedstring  = "\"(?:$nqtext|$qchar)+\"";
    $user_part     = "(?:$normuser|$quotedstring)";
    $dom_mainpart  = "[a-zA-Z0-9][a-zA-Z0-9._-]*\.";
    $dom_subpart   = "(?:[a-zA-Z0-9][a-zA-Z0-9._-]*\.)*";
    $dom_tldpart   = "[a-zA-Z]{2,5}";
    $domain_part   = "$dom_subpart$dom_mainpart$dom_tldpart";
    $regex         = "$protocol?$user_part\@$domain_part";
    if (preg_match("/^$regex$/",$email)) {
      return true;
    }
    return false;
  }
  }else{
  die ("Der Sicherheitscode ist falsch!");
  }
?>

<!-- ............................................................... -->
<!--                      Ende KontaktFormular                       -->
<!-- ............................................................... -->
</span>
</div>
<div id="navi"><?php include("include/navi.inc.txt"); ?></div>
<div id="fuss"><?php include("include/fuss.inc.txt"); ?></div>
</body>
</html>
jfromm
 
Beiträge: 7
Registriert: 14.05.2007, 00:29

Beitragvon frameguard » 14.05.2007, 01:05

Ähm, ich kann mich ja jetzt vertun, weil ich schon reichlich müd bin heute, aber: Irgendwie liest sich der Script für mich so, als ob der Sicherheitscode abgefragt würde, BEVOR ihn irgendwer eingeben kann... und das muß ja zwangsläufig zur Fehlermeldung führen.

Ich würde das nach dem "submit" einbauen und gleich da mit einem else die(); verbinden, also nicht erst am Schluß das die.
frameguard
 
Beiträge: 120
Registriert: 05.03.2007, 19:19
Wohnort: Wien

Beitragvon jfromm » 14.05.2007, 10:36

Hallo frameguard,

ich war auch nicht mehr der Wacheste. Das sieht heute Morgen nicht viel anders aus. Und ich komme einfach nicht mit der Code-Anpassung zurecht. Ich habe die vier Zeilen

Code: Alles auswählen
// Beginn captcha pruefen
  if(isset($_SESSION['captcha_spam']) AND $_POST["sicherheitscode"] == $_SESSION['captcha_spam']){
  unset($_SESSION['captcha_spam']);   
// Ende captcha pruefen


jetzt an den Anfang des PHP-Blocks nach dem </form> gesetzt. Soweit so gut. Ich finde aber nicht die Stelle, an der ich

Code: Alles auswählen
  }else{
  die ("Der Sicherheitscode ist falsch!");
  }


einfügen muss, damit das Ganze auch funktioniert. Im Besten Fall wird die Seite vollständig angezeigt, aber es wird eine leere Email generiert. Ein Captcha-Bild sehe ich auch nicht (fehler.php ist unauffällig).

Bist Du heute etwas wacher und kannst mir helfen?
jfromm
 
Beiträge: 7
Registriert: 14.05.2007, 00:29

Beitragvon frameguard » 14.05.2007, 15:19

Jetzt nimmer, nachdem ich stundenlang Adressen getippt habe wie ein Blöder. ;) Na Scherz beiseite.

In <img src="captcha/captcha.php" border="0" title="Sicherheitscode"> - ist da der Pfad und Scriptname korrekt? Weil wenn ja, müßte er das Bild korrekt anzeigen, ich sehe da keinen Fehler.
Notfalls probier's mit einem absoluten Pfad (statt captcha/captcha.php eben http://www.deine-domain.com/captcha/captcha.php).

Das }else{
die ("Der Sicherheitscode ist falsch!");
}

würde ich direkt nach // Ende captcha pruefen einfügen. Ist am sichersten, finde ich. ;)
frameguard
 
Beiträge: 120
Registriert: 05.03.2007, 19:19
Wohnort: Wien

Beitragvon jfromm » 15.05.2007, 09:38

Hallo frameguard,

ob relativver oder absoluter Pfad ist egal. In beiden Fällen wird kein Bild angezeigt. Schon beim ersten Seitenaufruf wird der Captcha-Code als falsch angemeckert. Zumindest wird jetzt keine leere Mail mehr abgeschickt.

Zum Debuggen:
www.susann-fromm.de/captcha/fehler.php
www.susann-fromm.de/captcha/phpinfo.php

Ich packe hier mal die aktuelle Scriptversion rein. Vielleicht kommen wir ja doch noch einmal zu einem guten Ergebnis:

Code: Alles auswählen
<?php session_start(); ?>
<!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">
<head>
<?php include("include/meta.inc.php"); ?> 
</head>
<body onload="MM_preloadImages('images/galerie_1_hover.jpg','images/galerie_2_hover.jpg','images/galerie_4_hover.jpg','images/galerie_3_hover.jpg')">
<div id="kopf"></div>
<div id="bildwechsel"><?php include("include/bildwechsel.inc.txt"); ?> </div>
<div id="inhalt" style="margin:0 0 0 25px;"><span style="position: absolute; bottom: 0pt; width:270px;">
<h1 ><?php include("include/h1.inc.txt"); ?> </h1>
<h2>Kontakt</h2>
<!-- .......................................................................... -->
<!--                              Anfang Formular                               -->
<!-- .......................................................................... -->
<script language=JavaScript>
<!--
function isValid() {

   var msg = "";
   
   if (kontaktFormular.eMail.value.indexOf("@") < 1 ||
       kontaktFormular.eMail.value.indexOf(".") < 1) {
     msg += "- Die E-Mail-Adresse ist syntaktisch nicht korrekt.\n";
   }
   
   if(kontaktFormular.nachName.value == "") {
     msg += "- Leeres Feld: Nachname\n";
   }

   if(kontaktFormular.betreff1.value == "") {
     msg += "- Leeres Feld: Betreff\n";
   }

   if(kontaktFormular.nachricht.value == "") {
     msg += "- Leeres Feld: Nachricht\n";
   }
   
   if(msg == "") {
     return true;   
   }
   alert(msg);
   return false;
}
-->
</script>
<?php
  $formularAnzeigen = false;
  if (!empty($_POST["senden"]) && (
      empty($_POST["Name"]) ||
      empty($_POST["eMail"]) ||
      empty($_POST["betreff1"]) ||
      empty($_POST["nachricht"]))) {
    $formularAnzeigen = true;
    echo '<span style="color: #FF0000; font-size:12px;">Bitte alle Pflichtfelder ausf&uuml;llen.</span>';
  } else if (!empty($_POST["senden"]) &&
             !isEmail($_POST["eMail"])) {
    $formularAnzeigen = true; 
    echo '<span style="color: #FF0000; font-size: x-large;">Die E-Mail-Adresse ist nicht korrekt.</span>';
  } else if (empty($_POST["senden"])) {
    $formularAnzeigen = true; 
  }
  if ($formularAnzeigen) {
?>
<form name="kontaktFormular" method="post" action="<?=$_SERVER[PHP_SELF]; ?>" onSubmit="return isValid()">
<p>* = Pflichtfelder</p>
  <table width="250px">
    <tr><td>Name *<br/><input name="Name" type="text" value="<?=$_POST['Name']; ?>" / onFocus="this.style.backgroundColor='#fff'" onBlur="this.style.backgroundColor='#ffc'"></td></tr>
   
    <tr><td>Email *<br/><input name="eMail" type="text" id="eMail" value="<?=$_POST['eMail']; ?>" / onFocus="this.style.backgroundColor='#fff'" onBlur="this.style.backgroundColor='#ffc'"></td></tr>

    <tr><td>Telefon<br/><input name="Tel" type="text" value="<?=$_POST['Tel']; ?>" / onFocus="this.style.backgroundColor='#fff'" onBlur="this.style.backgroundColor='#ffc'"></td></tr>      
       
    <tr><td>Betreff *<br/><input name="betreff1" type="text" id="betreff1" value="<?=$_POST['betreff1']; ?>" size="50" / onFocus="this.style.backgroundColor='#fff'" onBlur="this.style.backgroundColor='#ffc'"></td></tr>
     
    <tr><td>Nachricht *<br/><textarea name="nachricht" cols="40" rows="4" style="overflow:auto" onFocus="this.style.backgroundColor='#fff'" onBlur="this.style.backgroundColor='#ffc'"><?=$_POST['nachricht']; ?></textarea></td></tr>
     
    <tr><td>Kopie an Sie?<br/><input name="kopie" type="checkbox" value="checked" <?=$_POST['kopie']; ?>></td></tr>

    <tr><td>Bitte geben Sie den Sicherheitscode ein<br/><img src="captcha/captcha.php" border="0" title="Sicherheitscode"><br/><input type="text" name="sicherheitscode" size="5" onFocus="this.style.backgroundColor='#fff'" onBlur="this.style.backgroundColor='#ffc'"></td></tr>

    <tr><td>&nbsp;</td></tr>
   
    <tr><td><input name="senden" type="submit" value="Senden" /></td></tr>

  </table>
</form>

<?php
// Beginn captcha pruefen
  if(isset($_SESSION['captcha_spam']) AND $_POST["sicherheitscode"] == $_SESSION['captcha_spam']){
  unset($_SESSION['captcha_spam']);   
// Ende captcha pruefen
  }else{
  die ("Der Sicherheitscode ist falsch!");
  }

  echo'';
  } else {
    $eMail = 'Nachricht:
----------
'.$_POST['nachricht'].'
       
Name:    '.$_POST['Name'].'
               
Email:   '.$_POST['eMail'].'
       
Telefon: '.$_POST['Tel'].'';
   
    if (@mail("xxx@domain.de",$_POST['betreff1'],$eMail)) {
      echo "Ihre Nachricht wurde an mich verschickt, vielen Dank. ";
    } else {
      echo "Der Email-Verkehr funktioniert zur Zeit leider nicht.<br />";
    }
    if ($_POST['kopie']) {
      if (@mail($_POST['eMail'],$_POST['betreff1'],$eMail)) {
        echo "Sie haben eine Kopie der Nachricht zugeschickt bekommen.<br />";
      }
    }
  }
 
  function isEmail($email) {
    $nonascii      = "\x80-\xff";
    $nqtext        = "[^\\$nonascii\015\012\"]";
    $qchar         = "\\[^$nonascii]";
    $protocol      = "(?:mailto:)";
    $normuser      = "[a-zA-Z0-9][a-zA-Z0-9_.-]*";
    $quotedstring  = "\"(?:$nqtext|$qchar)+\"";
    $user_part     = "(?:$normuser|$quotedstring)";
    $dom_mainpart  = "[a-zA-Z0-9][a-zA-Z0-9._-]*\.";
    $dom_subpart   = "(?:[a-zA-Z0-9][a-zA-Z0-9._-]*\.)*";
    $dom_tldpart   = "[a-zA-Z]{2,5}";
    $domain_part   = "$dom_subpart$dom_mainpart$dom_tldpart";
    $regex         = "$protocol?$user_part\@$domain_part";
    if (preg_match("/^$regex$/",$email)) {
      return true;
    }
    return false;
  }
?>

<!-- ............................................................... -->
<!--                      Ende KontaktFormular                       -->
<!-- ............................................................... -->
</span>
</div>
<div id="navi"><?php include("include/navi.inc.txt"); ?></div>
<div id="fuss"><?php include("include/fuss.inc.txt"); ?></div>
</body>
</html>
jfromm
 
Beiträge: 7
Registriert: 14.05.2007, 00:29

Beitragvon frameguard » 15.05.2007, 14:14

Hm, in dem Script sehe ich sonst eigentlich keinen Fehler mehr.

Welche Dateien hast Du im captcha-Verzeichnis (alle auflisten, und auf Groß- und Kleinschreibung achten - die meisten Server sind Unix-basiert, d. h., es ist ein Unterschied, ob eine Datei zB XFILES.TTF oder xfiles.ttf heißt), und bitte poste doch den captcha.php-Script. Denn wenn der Script kein Bild erzeugt, muß irgendwo da das Problem liegen.
frameguard
 
Beiträge: 120
Registriert: 05.03.2007, 19:19
Wohnort: Wien

Beitragvon jfromm » 16.05.2007, 10:21

Im Verzeichnis /captcha liegen aktuell diese Dateien:

XFILES.TTF
captcha.PNG
captcha.php
fehler.php
phpinfo.php

Die unveränderte Datei captcha.php hat diesen Inhalt:

Code: Alles auswählen
<?php
   session_start();
   unset($_SESSION['captcha_spam']);

   function randomString($len) {
      srand(date("s"));
      //Der String $possible enthält alle Zeichen, die verwendet werden sollen
      $possible="ABCDEFGHJKLMNPRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789";
      $str="";
      while(strlen($str)<$len) {
        $str.=substr($possible,(rand()%(strlen($possible))),1);
      }
   return($str);
   }

   $text = randomString(5);  //Die Zahl bestimmt die Anzahl stellen
   $_SESSION['captcha_spam'] = $text;
         
   header('Content-type: image/png');
   $img = ImageCreateFromPNG('captcha.PNG'); //Backgroundimage
   $color = ImageColorAllocate($img, 0, 0, 0); //Farbe
   $ttf = $_SERVER['DOCUMENT_ROOT']."/captcha/XFILES.TTF"; //Schriftart
   $ttfsize = 25; //Schriftgrösse
   $angle = rand(0,5);
   $t_x = rand(5,30);
   $t_y = 35;
   imagettftext($img, $ttfsize, $angle, $t_x, $t_y, $color, $ttf, $text);
   imagepng($img);
   imagedestroy($img);
?>
jfromm
 
Beiträge: 7
Registriert: 14.05.2007, 00:29

Beitragvon frameguard » 16.05.2007, 11:31

Ich hab dieselben Dateien 1:1 auch auf meinen Server geladen, und da ging's zunächst auch nicht.
Ich habe dann die Zeile

$ttf = $_SERVER['DOCUMENT_ROOT']."/captcha/XFILES.TTF"; //Schriftart
(lautete bei mir wegen dem Testpfad natürlich ein bisschen anders)

abgeändert auf

$ttf = "XFILES.TTF"; //Schriftart

...und siehe da, plötzlich erzeugte das Captcha das gewünschte Bild. Woran das aber liegt (die Pfadangaben sind ja an sich korrekt, und bei meinem anderen Captcha vom GB funktioniert's ja auch mit Document Root usw.), ehrlich gestanden: Keine Ahnung.

Aber probier's mal, knick einfach bei der Schriftart die Pfadangabe und schreib nur den reinen Dateinamen hin.
frameguard
 
Beiträge: 120
Registriert: 05.03.2007, 19:19
Wohnort: Wien

Beitragvon jfromm » 16.05.2007, 12:06

Ok, mit dieser Änderung wird das Bild angezeigt. Bleibt noch das Problem, dass schon beim Seitenaufruf gemeldet wird, der Sicherheitscode sei falsch. Folglich wird auch der Seiteninhalt, der danach noch kommen müsste, nicht mehr angezeigt. Also müssten die Zeilen

Code: Alles auswählen
  }else{
  die ("Der Sicherheitscode ist falsch!");
  }

doch an einer anderen Stelle stehen. Denn die Überprüfung muss ja erst laufen, nachdem der User auf den Submit-Button geklickt hat, aber bevor die Email generiert wird. Und selbst wenn der Code falsch ist, soll der Rest der Seite ja auch noch vollständig angezeigt werden. Any ideas?

Und jetzt werde ich mal unverschämt: Gibt es hier vielleicht einen Experten, der folgendes zusammen packen kann:

Captcha-Basisscript
Captcha-Bild-Reload
Zufällig generierter Hintergrund

Und das ganze noch so, dass die ungeübten User - wie ich - einzelne Funktionen wahlweise weglassen können (z.B. durch Auskommentieren). Dann wäre doch allen Besuchern dieser wertvollen Seiten und willigen Spam-Bremsern enorm geholfen.
jfromm
 
Beiträge: 7
Registriert: 14.05.2007, 00:29

Beitragvon frameguard » 16.05.2007, 13:43

Stimmtja - hab ich total übersehen.

Die komplette Captcha-Prüfsequenz gehört nicht direkt nach dem Formular, sondern da:

echo'';
} else {
$eMail = 'Nachricht:
----------
'.$_POST['nachricht'].'

etc., und zwar:

<?php

echo'';
} else {

// Beginn captcha pruefen
if(isset($_SESSION['captcha_spam']) AND $_POST["sicherheitscode"] == $_SESSION['captcha_spam']){
unset($_SESSION['captcha_spam']);
// Ende captcha pruefen
}else{
die ("Der Sicherheitscode ist falsch!");
}

$eMail = 'Nachricht:
----------
'.$_POST['nachricht'].'

Name: '.$_POST['Name'].'

Email: '.$_POST['eMail'].'

Telefon: '.$_POST['Tel'].'';

etc., weil ja da erst der "Senden"-Teil des Scripts abgearbeitet wird. Upsi.

Das mit dem Zusammenfassen - auweia. *g* Vielleicht macht Rob das ja mal. Wobei das mit dem Bild-Reload, soweit ich mich dran erinnere, eh ziemlich einfach ist.
Von zufällig generierten Hintergrundbildern hingegen halte ich relativ wenig - da ist mMn die Gefahr zu hoch, daß den Sicherheitscode hinterher keiner mehr lesen kann, oder daß es wiederum zu einfach wird (bei phpBB zB wird sowas verwendet, einfach ein bißchen "Rauschen" als Hintergrundbild, und davor, deutlicher als deutlich lesbar und für den vertrotteltsten Spambot ein Paradies, der Sicherheitscode). ;)
frameguard
 
Beiträge: 120
Registriert: 05.03.2007, 19:19
Wohnort: Wien

Beitragvon jfromm » 21.05.2007, 10:10

Na suppi! Jetzt hat's geklappt. Danke.
jfromm
 
Beiträge: 7
Registriert: 14.05.2007, 00:29


Zurück zu Zahlen Captcha

Wer ist online?

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

cron