Formular mit Javascript php captcha einbinden

zyclop

Erfahrenes Mitglied
Hallo zusammen

Ich habe folgendes Kontakformular:

PHP:
<style type="text/css">
.style2 {
	text-align: left;
}
</style>
<div style="text-align: middle;">
 <h3>Kontaktformular</h3>
 

<?php

if ($_SERVER['REQUEST_METHOD'] == "POST") {
$vorname = $_POST['vorname'];
$nachname = $_POST['nachname'];
$betreff = $_POST['betreff'];
$telenr = $_POST['telenr'];
$nachricht = $_POST['nachricht'];
$email = $_POST['email'];

 # Ihre E-Mail-Adresse
 $an ="support@next-it.ch";

 # Diese Nachricht wird an Ihre E-Mail-Adresse gesendet
 $text = "Hallo \n\n Du hast eine neue Nachricht von $vorname $nachname via Bestellformular von hosting.next-it.ch erhalten:\n\n
 Von:$vorname $nachname\n Formular: Kontakt \n E-Mail:$email\n Tel. Nr: $telenr\n Nachricht:\n  $nachricht\n\n.";
 $sent = @mail($an, $betreff, $text, "From: " . $email);
 if ($sent){
 	echo "<b>Ihre Nachricht wurde gesendet!</b>";
 }else{
 	echo "<b>Ihre Nachricht konnte leider nicht gesendet werden! Versuchen Sie es bitte nochmals.</b>";
 }
}
else { ?>

<script type="text/javascript">
function eingaben_ueberpruefen(){
 var mail = document.Formular.email.value;
 if (document.Formular.vorname.value.length < 3) { // Vorname mindestens 2 Zeichen
  alert("Sie haben noch keinen Vornamen eingegeben!")
  document.Formular.vorname.focus();
  return false;
 }

 else if (document.Formular.nachname.value.length < 3) { // Nachname mindestens 2 Zeichen
  alert("Bitte geben Sie Ihren Nachnamen ein");
  document.Formular.nachname.focus();
  return false;
 }
  else if (document.Formular.telenr.value.length < 3) { // Nachname mindestens 2 Zeichen
  alert("Bitte geben Sie Ihren Nachnamen ein");
  document.Formular.nachname.focus();
  return false;
 }

 else if (mail.length < 10 || mail.indexOf ('@',0) == -1 || mail.indexOf ('.',0) == -1) {
  alert("Bitte geben Sie eine gültige E-Mail-Adresse ein.")
  document.Formular.email.select();
  return false;
 }

 else if (document.Formular.betreff.value.length < 4) { // Betreff mindestens 9 Zeichen
  alert("Bitte geben Sie einen Betreff ein!")
  document.Formular.betreff.focus();
  return false;
 }

 else if (document.Formular.nachricht.value.length < 10) { // Nachricht mindestens 19 Zeichen
  alert("Bitte geben Sie eine Nachricht ein!")
  document.Formular.nachricht.focus();
  return false;
 }

 else
 return true;
}
</script>

<form name="Formular" method="post" onSubmit="return eingaben_ueberpruefen();">
 <table cellPadding="4" cellSpacing="2" border="1">
  <tr>
   <th scope="row" class="style2"><b>Vorname:</b></th>
   <td  class="style2"><input type="text" name="vorname" size="35" maxlength="40"></td>
  </tr>
    <tr>
     <th scope="row" class="style2"><b>Nachname:</b></th>
   <td  class="style2"><input type="text" name="nachname" size="35" maxlength="40"></td>
  </tr>
      <tr>
     <th scope="row" class="style2"><b>Tel. Nr.:</b></th>
   <td  class="style2"><input type="text" name="telenr" size="35" maxlength="40"></td>
  </tr>
  <tr>
   <th scope="row" class="style2"><b>E-Mail:</b></th>
   <td class="style2"><input type="text" name="email" size="35" maxlength="40"></td>
  </tr>
  <tr>
   <th class="style2" scope="row"><b>Betreff:</b></th>
   <td class="style2"><input type="text" name="betreff" size="45" maxlength="60"></td>
  </tr>
  <tr>
   <th colspan="2"  class="style2" scope="row">
    <b>Nachricht:</b><br><textarea name="nachricht" cols="45" rows="7"></textarea>
   </th>
  </tr>
  <tr >
   <th colspan="2"scope="row"><br>
    <input type="submit" value="Formular absenden">
   </th>
  </tr>
 </table>
</form>

<?php 
}
?>
</div>

Wie kann ich nun noch ein Captcha einbinden?

Besten Dank
zyclop
 
Zuletzt bearbeitet:
Folgendes Feld einbauen:

PHP:
<img src="captcha.php" border="0" title="Code"><input type="text" name="sicherheitscode" size="5">

Datei captcha.php:

PHP:
session_start();
   unset($_SESSION['captcha_spam']);

   function randomString($len) {
      function make_seed(){
         list($usec , $sec) = explode (' ', microtime());
         return (float) $sec + ((float) $usec * 100000);
      }
      srand(make_seed());

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

   $text = randomString(5);  //Anzahl der stellen
   $_SESSION['captcha_spam'] = $text;

   header('Content-type: image/png');
   $img = ImageCreateFromPNG('captcha_grundbild.PNG'); //Hintergrundimage
   $color = ImageColorAllocate($img, 0, 0, 0); //Textfarbe
   $ttf = $_SERVER['DOCUMENT_ROOT']."/XFILESF"; //Text-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);

Im übergebenden Script wie folgt auf das Captcha prüfen:
PHP:
session_start();
if(isset($_SESSION['captcha_spam']) AND $_POST["sicherheitscode"] == $_SESSION['captcha_spam'])
{
unset($_SESSION['captcha_spam']);
ECHO "Sicherheitscode OK!"; 
}

else
{
   die ("Der Sicherheitscode ist falsch!");
}
 
Also habe das nun eingefügt...

Code:
   <th colspan="2"  class="style2" scope="row">
    <b>Nachricht:</b><br><textarea name="nachricht" cols="45" rows="7"></textarea>
   </th>
  </tr>
  <tr >
 <img src="captcha.php" border="0" title="Code"><input type="text" name="sicherheitscode" size="5">
   <th colspan="2"scope="row"><br>
    <input type="submit" value="Formular absenden">
   </th>
  </tr>
 </table>
</form>

und die Datei captcha.php beinhaltet folgenden code

PHP:
session_start(); 
   unset($_SESSION['captcha_spam']); 

   function randomString($len) { 
      function make_seed(){ 
         list($usec , $sec) = explode (' ', microtime()); 
         return (float) $sec + ((float) $usec * 100000); 
      } 
      srand(make_seed()); 

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

   $text = randomString(5);  //Anzahl der stellen 
   $_SESSION['captcha_spam'] = $text; 

   header('Content-type: image/png'); 
   $img = ImageCreateFromPNG('captcha_grundbild.PNG'); //Hintergrundimage 
   $color = ImageColorAllocate($img, 0, 0, 0); //Textfarbe 
   $ttf = $_SERVER['DOCUMENT_ROOT']."/XFILESF"; //Text-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);

Aber wie muss ich nun die übergabe machen, dass es zuerst die punkte im formular überprüft und dann das captcha?

etwa so?

PHP:
<style type="text/css">
.style2 {
	text-align: left;
}
</style>
<div style="text-align: middle;">
 <h3>Bestellformular</h3>
 

<?php

if ($_SERVER['REQUEST_METHOD'] == "POST") {
$vorname = $_POST['vorname'];
$nachname = $_POST['nachname'];
$betreff = $_POST['betreff'];
$telenr = $_POST['telenr'];
$nachricht = $_POST['nachricht'];
$email = $_POST['email'];

 # Ihre E-Mail-Adresse
 $an ="support@next-it.ch";

 # Diese Nachricht wird an Ihre E-Mail-Adresse gesendet
 $text = "Hallo \n\nDu hast eine neue Nachricht von $vorname $nachname via Bestellformular von hosting.next-it.ch erhalten:\n\n
Von:$vorname $nachname\nFormular: hosting.next-it.ch\nE-Mail:$email\nTel. Nr: $telenr\nNachricht:\n$nachricht\n\n.";
 $sent = @mail($an, $betreff, $text, "From: " . $email);
 if ($sent){
 	echo "<b>Ihre Nachricht wurde gesendet!\n</b>";
 }else{
 	echo "<b>Ihre Nachricht konnte leider nicht gesendet werden! Versuchen Sie es bitte nochmals.</b>";
 }
}
else { ?>

<script type="text/javascript">
function eingaben_ueberpruefen(){
 var mail = document.Formular.email.value;
 if (document.Formular.vorname.value.length < 3) { // Vorname mindestens 2 Zeichen
  alert("Sie haben noch keinen Vornamen eingegeben!")
  document.Formular.vorname.focus();
  return false;
 }

 else if (document.Formular.nachname.value.length < 3) { // Nachname mindestens 2 Zeichen
  alert("Bitte geben Sie Ihren Nachnamen ein");
  document.Formular.nachname.focus();
  return false;
 }
  else if (document.Formular.telenr.value.length < 3) { // Nachname mindestens 2 Zeichen
  alert("Bitte geben Sie Ihren Nachnamen ein");
  document.Formular.nachname.focus();
  return false;
 }

 else if (mail.length < 10 || mail.indexOf ('@',0) == -1 || mail.indexOf ('.',0) == -1) {
  alert("Bitte geben Sie eine gültige E-Mail-Adresse ein.")
  document.Formular.email.select();
  return false;
 }

 else if (document.Formular.betreff.value.length < 4) { // Betreff mindestens 9 Zeichen
  alert("Bitte geben Sie einen Betreff ein!")
  document.Formular.betreff.focus();
  return false;
 }

 else if (document.Formular.nachricht.value.length < 10) { // Nachricht mindestens 19 Zeichen
  alert("Bitte geben Sie eine Nachricht ein!")
  document.Formular.nachricht.focus();
  return false;
 }

 else
 return true;
}
</script>
<?php
session_start(); 
if(isset($_SESSION['captcha_spam']) AND $_POST["sicherheitscode"] == $_SESSION['captcha_spam']) 
{ 
unset($_SESSION['captcha_spam']); 
ECHO "Sicherheitscode OK!";  
} 

else 
{ 
   die ("Der Sicherheitscode ist falsch!"); 
}  
?>
<form name="Formular" method="post" onSubmit="return eingaben_ueberpruefen();">
 <table cellPadding="4" cellSpacing="2" border="1">
  <tr>
   <th scope="row" class="style2"><b>Vorname:</b></th>
   <td  class="style2"><input type="text" name="vorname" size="35" maxlength="40"></td>
  </tr>
    <tr>
     <th scope="row" class="style2"><b>Nachname:</b></th>
   <td  class="style2"><input type="text" name="nachname" size="35" maxlength="40"></td>
  </tr>
      <tr>
     <th scope="row" class="style2"><b>Tel. Nr.:</b></th>
   <td  class="style2"><input type="text" name="telenr" size="35" maxlength="40"></td>
  </tr>
  <tr>
   <th scope="row" class="style2"><b>E-Mail:</b></th>
   <td class="style2"><input type="text" name="email" size="35" maxlength="40"></td>
  </tr>
  <tr>
   <th class="style2" scope="row"><b>Betreff:</b></th>
   <td class="style2"><input type="text" name="betreff" size="45" maxlength="60"></td>
  </tr>
  <tr>
   <th colspan="2"  class="style2" scope="row">
    <b>Nachricht:</b><br><textarea name="nachricht" cols="45" rows="7"></textarea>
   </th>
  </tr>
  <tr >
  <img src="captcha.php" border="0" title="Code"><input type="text" name="sicherheitscode" size="5">
   <th colspan="2"scope="row"><br>
    <input type="submit" value="Formular absenden">
   </th>
  </tr>
 </table>
</form>

<?php 
}
?>
</div>

Besten Dank
zyclop

So erscheint das Formular nicht sondern nur der Text:

Der Sicherheitscode ist falsch!
 
Zuletzt bearbeitet:
1. session_start() senden einen Header an den Browser, und muss daher in die erste Zeile des PHP-Scripts.
2. Deine Captcha-Prüfung kannst du so einbauen:

PHP:
$captcha_ok = false;
if(isset($_SESSION['captcha_spam']) AND $_POST["sicherheitscode"] == $_SESSION['captcha_spam']) 
{ 
  unset($_SESSION['captcha_spam']); 
  $captcha_ok = true;
} 

// Hier kommt das Senden der Mail
if ($_SERVER['REQUEST_METHOD'] == "POST" && $captcha_ok) {
$vorname = $_POST['vorname'];
$nachname = $_POST['nachname'];
$betreff = $_POST['betreff'];
$telenr = $_POST['telenr'];
$nachricht = $_POST['nachricht'];
$email = $_POST['email'];

 # Ihre E-Mail-Adresse
 $an ="support@next-it.ch";

 # Diese Nachricht wird an Ihre E-Mail-Adresse gesendet
 $text = "Hallo Enrik\n\nDu hast eine neue Nachricht von $vorname $nachname via Bestellformular von hosting.next-it.ch erhalten:\n\n
Von:$vorname $nachname\nFormular: hosting.next-it.ch\nE-Mail:$email\nTel. Nr: $telenr\nNachricht:\n$nachricht\n\n.";
 $sent = @mail($an, $betreff, $text, "From: " . $email);
 if ($sent){
     echo "<b>Ihre Nachricht wurde gesendet!\n</b>";
 }else{
     echo "<b>Ihre Nachricht konnte leider nicht gesendet werden! Versuchen Sie es bitte nochmals.</b>";
 }
}
else { ?>
 
Grob ohne zu prüfen würd ich es so machen:

PHP:
<style type="text/css"> 
.style2 { 
    text-align: left; 
} 
</style> 
<div style="text-align: middle;"> 
 <h3>Bestellformular</h3> 
  

<?php 

if ($_SERVER['REQUEST_METHOD'] == "POST") { 
$vorname = $_POST['vorname']; 
$nachname = $_POST['nachname']; 
$betreff = $_POST['betreff']; 
$telenr = $_POST['telenr']; 
$nachricht = $_POST['nachricht']; 
$email = $_POST['email']; 

<?php 
session_start();  
if(isset($_SESSION['captcha_spam']) AND $_POST["sicherheitscode"] == $_SESSION['captcha_spam'])  
{  
unset($_SESSION['captcha_spam']);  
$code="ok";
}  

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


if ($code=="ok")
{
 # Ihre E-Mail-Adresse 
 $an ="support@next-it.ch"; 

 # Diese Nachricht wird an Ihre E-Mail-Adresse gesendet 
 $text = "Hallo Enrik\n\nDu hast eine neue Nachricht von $vorname $nachname via Bestellformular von hosting.next-it.ch erhalten:\n\n 
Von:$vorname $nachname\nFormular: hosting.next-it.ch\nE-Mail:$email\nTel. Nr: $telenr\nNachricht:\n$nachricht\n\n."; 
 $sent = @mail($an, $betreff, $text, "From: " . $email); 
 if ($sent){ 
     echo "<b>Ihre Nachricht wurde gesendet!\n</b>"; 
 }else{ 
     echo "<b>Ihre Nachricht konnte leider nicht gesendet werden! Versuchen Sie es bitte nochmals.</b>"; 
 } 
} 
else { ?> 

<script type="text/javascript"> 
function eingaben_ueberpruefen(){ 
 var mail = document.Formular.email.value; 
 if (document.Formular.vorname.value.length < 3) { // Vorname mindestens 2 Zeichen 
  alert("Sie haben noch keinen Vornamen eingegeben!") 
  document.Formular.vorname.focus(); 
  return false; 
 } 

 else if (document.Formular.nachname.value.length < 3) { // Nachname mindestens 2 Zeichen 
  alert("Bitte geben Sie Ihren Nachnamen ein"); 
  document.Formular.nachname.focus(); 
  return false; 
 } 
  else if (document.Formular.telenr.value.length < 3) { // Nachname mindestens 2 Zeichen 
  alert("Bitte geben Sie Ihren Nachnamen ein"); 
  document.Formular.nachname.focus(); 
  return false; 
 } 

 else if (mail.length < 10 || mail.indexOf ('@',0) == -1 || mail.indexOf ('.',0) == -1) { 
  alert("Bitte geben Sie eine gültige E-Mail-Adresse ein.") 
  document.Formular.email.select(); 
  return false; 
 } 

 else if (document.Formular.betreff.value.length < 4) { // Betreff mindestens 9 Zeichen 
  alert("Bitte geben Sie einen Betreff ein!") 
  document.Formular.betreff.focus(); 
  return false; 
 } 

 else if (document.Formular.nachricht.value.length < 10) { // Nachricht mindestens 19 Zeichen 
  alert("Bitte geben Sie eine Nachricht ein!") 
  document.Formular.nachricht.focus(); 
  return false; 
 } 

 else 
 return true; 
} 
}
</script> 
<form name="Formular" method="post" onSubmit="return eingaben_ueberpruefen();"> 
 <table cellPadding="4" cellSpacing="2" border="1"> 
  <tr> 
   <th scope="row" class="style2"><b>Vorname:</b></th> 
   <td  class="style2"><input type="text" name="vorname" size="35" maxlength="40"></td> 
  </tr> 
    <tr> 
     <th scope="row" class="style2"><b>Nachname:</b></th> 
   <td  class="style2"><input type="text" name="nachname" size="35" maxlength="40"></td> 
  </tr> 
      <tr> 
     <th scope="row" class="style2"><b>Tel. Nr.:</b></th> 
   <td  class="style2"><input type="text" name="telenr" size="35" maxlength="40"></td> 
  </tr> 
  <tr> 
   <th scope="row" class="style2"><b>E-Mail:</b></th> 
   <td class="style2"><input type="text" name="email" size="35" maxlength="40"></td> 
  </tr> 
  <tr> 
   <th class="style2" scope="row"><b>Betreff:</b></th> 
   <td class="style2"><input type="text" name="betreff" size="45" maxlength="60"></td> 
  </tr> 
  <tr> 
   <th colspan="2"  class="style2" scope="row"> 
    <b>Nachricht:</b><br><textarea name="nachricht" cols="45" rows="7"></textarea> 
   </th> 
  </tr> 
  <tr > 
  <img src="captcha.php" border="0" title="Code"><input type="text" name="sicherheitscode" size="5"> 
   <th colspan="2"scope="row"><br> 
    <input type="submit" value="Formular absenden"> 
   </th> 
  </tr> 
 </table> 
</form> 

<?php  
} 
?> 
</div>
 
Hammer, Ihr seid einfach super.

Das einzige Problem das ich noch habe ist, dass das Bild nicht angezeigt wird.

Seite online unter: hosting.next-it.ch ---> Bestellung

gruss
zyclop
 
ja klar, ich trottel...habe es gemacht, leider funktioniert es immer noch nicht...zwar erstellt er jetzt ein bild aber anschauen kann man es nicht...link steht noch...
 
Zurück