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...
 

Neue Beiträge

Zurück