Formularcheck mit captcha

Simi

Angesehenes Mitglied
Hi all,

Habe einen Formular gecoded, der eine captcha Abfrage enthält. Local (xampp) funktioniert alles super, jedoch auf dem Server wird das Bild nicht angezeigt. Muss beim Provider etwas enabled sein oder evtl. etwas in der php.ini verändern?

Hier mein Code:

Formular:

CODE
<html>
<head>
<title>Mailformular</title></head>
<body>
<form action="captcha.php?doit=check" method="post">
<br>Name:
<input type="text" name="name" size="15">
<br>E-Mail:
<input type="text" name="email" size="15">
<br>Telefon Nr:
<input type="text" name="telefon" size="15">
<br>Betreff:
<input type="text" name="betreff" size="15">
<br>Nachricht:<br>
<textarea name="nachricht" cols="40" rows="8"></textarea>
<br>
<img src="captcha.php?doit=gen">
<input type="text" name="sec_eingabe" size="5">
<br>
<input type="submit" value="Anfrage senden">
</form>
</body>
</html>




Captcha:


CODE

<?php
//Das Starten der Session
session_start();

//Wenn das Script die Eingabe Checken soll
if($_GET['doit'] == "check"){

if( $_POST['sec_eingabe'] == $_SESSION['captcha'] ){

//Löschen der Session-var
unset($_SESSION['captcha']);

//Datum der Sendung
$datum = date("d.m.Y - H:i");

//Hier bitte die Empfaenger-Mailadresse einfuegen
$empfaenger = "meine@adresse.ch";

//Zeilenende ersetzen
$suchen = "\r";
$ersetzen = "\n";
$kommentarp = str_replace($suchen,$ersetzen,$_POST["nachricht"]);
$betreff = $_POST['betreff'];

//Ausfuehren der Mailfunktion
if(mail("$empfaenger", "$betreff",
"
Name: ".$_POST["name"]."
E-Mail: ".$_POST["email"]."
Telefon Nr: ".$_POST["telefon"]."
Nachricht: ".$kommentarp."
Datum und Zeit: $datum
")){
echo('Folgende Angaben wurden versandt:<br><br>' . $_POST["name"] . '<br>' . $_POST["email"] . '<br>' . $_POST["telefon"] . '<br>' . $_POST["betreff"] . '<br>' . nl2br($kommentarp));
}

}
else {
echo("Bitte prüfen Sie Ihre Eingabe im Sicherheitsfeld!  <a href='mailform.php'>« zurück</a>");

}
}

//Wenn das Script ein Bild generieren soll
elseif ($_GET['doit'] == "gen"){

//Feldwert wird erstellt
$text = rand(1000,10000);

//Feldwert wird in Session-Array gespeichert
$_SESSION['captcha'] = $text;

header('Content-type: image/png');
$img = ImageCreateFromPNG('security_background.png');
$color = ImageColorAllocate($img, 0, 0, 0);
$ttf = 'arial.ttf';
$ttfsize = 25;
$angle = rand(0,5);
$text_x = rand(5,50);
$text_y = 35;
imagettftext($img, $ttfsize, $angle, $text_x, $text_y, $color, $ttf, $text);
imagepng($img);
imagedestroy($img);
}

?>




Evtl. kann mir jemand weiterhelfen...leider hatte ich mit Google nicht wirklich Erfolg.

Danke und Gruss
Simi
 
Hallo!

Auf dem Server muss php für die GD-Lib konfiguriert/compiliert sein. Mach auf dem Server einfach mal ein Script mit <? phpinfo();?> wenn es da nicht erwähnt wird, ist das das Problem. Ich bin mit Linux nicht so vertraut, aber ich glaube Arial.ttf ist da nicht in der Grundinstallation, daher kann es passieren, dass php einfach den Font nicht findet. Hier kannst du verwendbare Schriftarten runterladen: http://www.freetype.org/

Viel Erfolg!
 
Hi Maik,

Vielen Dank...ich glaube eben es liegt an der Schriftart...jedoch dachte ich Arial sei eine Standard Schriftart bei der GD Lib etwa nicht?
Was gibt es denn für Standard Schriftarten? Auf dem Link den du mir gegeben hast stosse ich ein bisschen auf Verwirrung, da mein Englisch nicht einwandfrei ist.

Danke und Gruss
Simi
 
Wenn dein Server mit GD-Lib konfiguriert ist, und auch schon freetype installiert ist, kannst du ja mal probieren, die Schriftart auf den Server zu laden (zb. arial). Dann müsste dein Script funktionieren.

Wenn das nicht geht, probier einfach mal das:

Kommentier die folgende Zeile aus
header('Content-type: image/png');

und ruf dein Script direkt im Browser mit einem passenden QueryString ( ?doit=gen ) auf, dann müsste eine PHP Fehlermeldung kommen, vielleicht hilft die weiter.
 
Notfalls einfach die entsprechende Schriftart hochladen und direkt darauf zugreifen.



MfG Sascha Ahlers

PS: Auf Linux muss Ariel nicht unbedingt vorhanden sein.
 
QUOTE
Wenn das nicht geht, probier einfach mal das:

Kommentier die folgende Zeile aus
header('Content-type: image/png');

und ruf dein Script direkt im Browser mit einem passenden QueryString ( ?doit=gen ) auf, dann müsste eine PHP Fehlermeldung kommen, vielleicht hilft die weiter.



Habe folgende Meldung:

Die Grafik "http://www.meinedomain.ch/captcha.php?doit=gen" kann nicht angezeigt werden, weil sie Fehler enthält.


QUOTE
Notfalls einfach die entsprechende Schriftart hochladen und direkt darauf zugreifen.



Dann kann ich die datei öffnen oder gar speichern.

Wo soll die Schrift denn auf dem Server hingepackt werden?

Danke und Gruss
Simi
 
QUOTE (Simi @ So 7.5.2006, 0:13) [...] Wo soll die Schrift denn auf dem Server hingepackt werden? [...]

Die Schrift kannst Du dort hinpacken, wo Du möchtest, Du muss nur den entsprechenden Pfad zu der Datei angeben, statt einfach nur den Dateinamen anzugeben (wie "arial.ttf").



MfG Sascha Ahlers
 
Hallo Sascha,

Das ist mir klar...es funktioniert aber trotzdem nicht. Von mir aus stimmt alles. Wenn jemand Zeit und Lust hat könnte er sich meine PHP Info Datei ansehen und mir sagen ob wirklich alles in Ordnung ist: PHP Info

Ich nehme an, dass auf Linux auch Standardsprachen vorhanden sind oder nicht? Arial muss es von mir aus nicht unbedingt sein.
rolleyes.gif


Danke im Voraus für eure Hilfe.

Gruss
Simi
 
Lad die Schriftart einfach auf den Server... Und dann machst du:
CODE
$ttf = "/srv/htdocs/blubb/test.ttf";
imagettftext($img, $ttfsize, $angle, $text_x, $text_y, $color, $ttf, $text);


Diese Funktion erfordert sowohl die GD- als auch die FreeType-Bibliothek.
Wenn die vorhanden sind (und das sind sie bei dir), muss das gehen.
Schau dir auch mal noch die Apache-Logs durch.
 
Eigentlich müsste der Programmcode von oben Funktionieren, wenn da nicht noch irgendein Fehler drin enthalten ist, den ich nun nicht so kontrollieren konnte, da ich nur den Programmcode für das Captcha an sich getestet habe.
Natürlich vorausgesetzt, dass alle Pfadangaben richtig sind.

Testumgebung: Apache 2.0.55 mit PHP 5.1.2.


<edit>
Ich habe aus Spass mal das Bild gelöschst, aus dem das Captcha erstellt wird, und sofort habe ich eine ähnliche Fehlermeldung:

The image “http://www.domain.tld/datei.php” cannot be displayed, because it contains errors.
</edit>



MfG Sascha Ahlers

PS: Seit wann gibt PHP eigentlich deutschsprachige Fehlermeldungen aus, ist das irgendeine spezielle Version?
 
So da bin ich wieder...


QUOTE
PS: Seit wann gibt PHP eigentlich deutschsprachige Fehlermeldungen aus, ist das irgendeine spezielle Version?



Keine Ahnung wieso es bei mir auf Deutsch ist...sehe ich auch zum ersten Mal.
biggrin.gif


Ich habe beim Provider nachgefragt und sie sagen mir es besteht kein Problem. Eigentlich sollte mein Script Problemlos funktionieren. Ich vermute es hat mit der Schrift zu tun. Denn Local brauche ich die Schrift nicht einmal in den Ordner zu kopieren und es läuft problemlos.


[Edit]
Ich habe den Fehler gefunden. Es fehlte nur der komplette Pfad.
rolleyes.gif
rolleyes.gif
rolleyes.gif

Danke an alle die mich unterstützt haben!
[/Edit]



Gruss
Simi
 
Kannst du hier deine Lösung veröffentlichen habe das selbe Problem.

Danke Hannes
 
QUOTE (JohannesG @ Mi 10.5.2006, 13:23) Kannst du hier deine Lösung veröffentlichen habe das selbe Problem. [...]

Die Lösung war ganz einfach die richtigen Pfade zu den Dateien anzugeben. Die Lösung steht ja oben schon, nur noch durch die richtigen Dateipfade ersetzen.



MfG Sascha Ahlers
 
Zurück
Oben