Formular mit Javascript php captcha einbinden

Hi,

ich hab' da auch noch einen Tipp zur horizontalen Ausrichtung des Formulars :)

Code:
<div style="text-align: middle;">

... existiert in der CSS-Spezifikation überhaupt nicht als gültiger Eigenschaftswert, dafür aber:

Code:
<div style="text-align: center;">


Der Wert middle wird für die vertikale Ausrichtung vertical-align genutzt.

mfg Maik
 
Habs jetzt genug lange versucht...Funktionieren tuts nicht...werde jetzt das captcha rausnehmen...und es so belassen...
 
Nun denn, musst du wissen, ob du dich zuspammen lassen willst. Du kannst natürlich auch wahlweise auf einen Captcha-Dienst wie Google ausweichen.

Einbauen könntest du das dann so:

0. Lösche die captcha.php
1. Lade die Library runter und entpacke recaptchalib.php, kopiere diese Datei an die Stelle wo ursprünglich die captcha.php lag.
2. Beschaffe die einen kostenlosen API-Key
3. Binde den folgenden Code in dein Script ein, was das Kontakt-Form enthält:
PHP:
require_once('recaptchalib.php');
$publickey = "..."; // you got this from the signup page

4. Ersetze den alten Prüf-Code

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

durch

PHP:
$resp = recaptcha_check_answer ($privatekey,
                                $_SERVER["REMOTE_ADDR"],
                                $_POST["recaptcha_challenge_field"],
                                $_POST["recaptcha_response_field"]);
$captcha_ok = $resp->is_valid;

5. An der Stelle, wo dein Bild+Eingabe-Feld war, fügst du diesen PHP-Code ein:

PHP:
echo recaptcha_get_html($publickey);

Aufgeben ist was für Feiglinge... Das machen Entwickler nicht. Die suchen nach Möglichkeiten, das, was erreicht werden soll, auf eine andere Art und Weise umzusetzen. :-)
 
ok das mit dem Feigling war genug Motivation nochmals dieses Thema aufzurollen.

Also ich habe nun das Kontaktformular folgender Masse angepasst.

Code:
<style type="text/css">
.style2 {
	text-align: left;
}
</style>
<div style="text-align: middle;">
 <h3>Bestellformular</h3>
<?php
require_once('recaptchalib.php');
$publickey = "HIER HABE ICH MEINEN KEY EINGEFüGT DEN ICH VON DER SEITE BEKOMMEN HABE"; // you got this from the signup page 
?>
recaptchalib.php ist vorhanden.

Dann habe ich noch folgenden Code angepasst.
Code:
<?php
$resp = recaptcha_check_answer ($privatekey,
	$_SERVER["REMOTE_ADDR"],
	$_POST["recaptcha_challenge_field"],
	$_POST["recaptcha_response_field"]);
$captcha_ok = $resp->is_valid;

// 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'];

Dann folgt das Formular
Nun noch die Ausgabe.

Code:
  <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 class="style2" scope="row"><b>Nachricht:</b></th>
   <td class="style2"><textarea name="nachricht" cols="5" rows="5"></textarea></td>
  </tr>
      <tr>
   <th class="style2" scope="row"><b>Sicherheit:</b></th>
   <td class="style2">
   <?php 
	echo recaptcha_get_html($publickey);
   ?>
</td>
  </tr>

Und die Ausgabe sieht folgender massen aus:

HTML:
To use reCAPTCHA you must get an API key from http://recaptcha.net/api/getkey

Was meinst du, was kann ich noch kontrollieren?
 

Anhänge

  • Unbenannt.png
    Unbenannt.png
    17,1 KB · Aufrufe: 34
HAHA, ich habe das Problem gefunden. Und zwar muss ich am anfang bei den Key auch den Privatekey angeben.

PHP:
<?php
require_once('recaptchalib.php');
$publickey = "mein_Keyr";
$privatekey = "Mein_key";
?>

Also die überprüfung funktioniert nun und wird auch angezeigt. Jetzt wenn ich aber das Formular ausfülle und einen falschen Code eingebe. Wird das Formular geleert, und nicht abgesendet. Zweiteres ist ja korrekt, weil die Eingabe nicht korrekt war. Aber ist es möglich das ich Daten im Formular belasse?

CodE:

HTML:
<style type="text/css">
.style2 {
	text-align: left;
}
</style>
<div style="text-align: middle;">
 <h3>Bestellformular</h3>
<?php
require_once('recaptchalib.php');
$publickey = "6Le5egoAAAAAAO3jB_I1d8PBSL0EFLRTMjO9fc2r";
$privatekey = "6Le5egoAAAAAAGs5BlA6d6IDSC-xsM3xMXGHk0fc";
?>

<?php
$resp = recaptcha_check_answer ($privatekey,
	$_SERVER["REMOTE_ADDR"],
	$_POST["recaptcha_challenge_field"],
	$_POST["recaptcha_response_field"]);
$captcha_ok = $resp->is_valid;

// 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 { 
}?>

<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 class="style2" scope="row"><b>Nachricht:</b></th>
   <td class="style2"><textarea name="nachricht" cols="5" rows="5"></textarea></td>
  </tr>
      <tr>
   <th class="style2" scope="row"><b>Sicherheit:</b></th>
   <td class="style2">
   <?php 
	echo recaptcha_get_html($publickey);
   ?>
</td>
  </tr>

  <tr>
     <th colspan="2"scope="row"><br>
    <input type="submit" value="Formular absenden">
	</th>
	</tr>
 </table>
</form>


</div>

  <tr>
   <th scope="row" class="style2"> <br>
   </th>
  </tr>

Wenn jemand nun das Formular ausfüllt und dann einen Falschen Code angibt (weil er es falsch gelesen hat) so muss er dann das ganze Formular nochmals ausfüllen...

Besten Dank
zyclop
 
Zuletzt bearbeitet:
Kannst du mir evtl. ein Bsp machen?

etwa so?

<th scope="row" class="style2" Value=$Post['vorname']><b>Vorname:</b></th>

Sorry aber von PHP habe ich wirklich keine Ahnung. Also allgemein das Programmieren liegt mir nicht so. Bin Systemtechniker und habe mir mein "kleines" Wissen durch try and error gelernt.

Besten Dank
zyclop
 
<th scope="row" class="style2" Value=$Post['vorname']><b>Vorname:</b></th>

Naja...fast ;)

Damit versuchst du einem th (=tablehead =Tabellenkopfzelle ) einen Wert zuzuweisen.
Probleme dabei:
1. th hat kein value attribut
2. bei deinem php code fehlt mindestens noch das <?php ?>
3. Formulardaten werden in Formularelementen "gespeichert" (also z.B. input, textarea, etc...)


Demnach wäre etwas in der Art "sinnvoller":
PHP:
<input type="text" name="vorname" size="35" maxlength="40" value="<?php echo $_POST['vorname']; ?>">

Das setzt natürlich vorraus das $_POST['vorname'] existiert, was eigentlich erst der Fall ist wenn das Formular abgeschickt wurde.
Bevor du also mit Fehlermeldungen überhäuft wirst, schreib vielleicht gleich sowas in der art:
PHP:
<input type="text" name="vorname" size="35" maxlength="40" value="<?php (isset($_POST['vorname'])) ? echo $_POST['vorname'] : ''; ?>">
 
PHP:
<input type="text" name="vorname" size="35" maxlength="40" value="<?php (isset($_POST['vorname'])) ? echo $_POST['vorname'] : ''; ?>">

Erstens müsste das nach meinem Empfinden einen Syntax-Fehler auslösen, da '' keine gültige Anweisung ist. Und zweitens nützt ein leeres value-Attribut keinem was, daher vielleicht eher:

PHP:
<input type="text" name="vorname" size="35" maxlength="40"<?php echo isset($_POST['vorname']) ? ' value="'.$_POST['vorname'].'"' : ''; ?>">
 
Habe jetzt so versucht:

PHP:
  <tr>
   <th scope="row" class="style2"><b>Vorname:</b></th>
   <td  class="style2">
Zeile 101 ist diese   <input type="text" name="vorname" size="35" maxlength="40" value="<?php (isset($_POST['vorname'])) ? echo $_POST['vorname'] : ''; ?>">
   </td>
   </tr>

Das ergibt:
"Parse error: syntax error, unexpected T_ECHO in /var/www/blabla on line 101"

Danach habe ich das versucht:

PHP:
  <tr>
   <th scope="row" class="style2"><b>Vorname:</b></th>
   <td  class="style2">
   <input type="text" name="vorname" size="35" maxlength="40" <?php echo isset($_POST['vorname']) ? ' value="'.$_POST['vorname'].'"' : ''; ?>>
   </td>
   </tr>

Das scheint zu funktionieren.

Besten Dank
Ihr seid alle wirklich super leute...vielen dank
 
Zurück