Spamsicheres Formular - Problem mit generierter Grafik
markus567
- php
Hallo
Ich habe ein Problem mit einem Script für ein "spamsicheres Formular". Und zwar habe ich eine Grafik generiert, in der 2 zahlen stehen, die man dann in ein anderes Feld addiert eingeben soll. Die Grafik habe ich hinbekommen, nur jetzt habe ich das Problem, dass ich nichts anderes in die Seite eintragen kann, denn dann erhalte ich folgende Fehlermeldung:
Warning: Cannot midify header information - headers already sent by (output started at C:\xampp...\form.php:2) in C:\xampp...\form.php on line 3
In Zeile 3 steht folgendes:
header('Content-Type: image/png');
Leider weiß ich nicht, wie ich das umschreiben kann, sodass ich keine Fehlermeldung erhalte. Hat jemand von euch eine Ahnung?
mfg
markus
Hi!
Warning: Cannot midify header information - headers already sent by (output started at C:\xampp...\form.php:2) in C:\xampp...\form.php on line 3
Leider weiß ich nicht, wie ich das umschreiben kann, sodass ich keine Fehlermeldung erhalte. Hat jemand von euch eine Ahnung?
Diese Fehlermeldung findet Google ungefähr 2,5 Millionen mal. Es gibt keine anderen Lösungen, als zu vermeiden, dass irgendwas ausgegeben wird, bevor Header verändernde Funktionen aufgerufen werden. Gängige Lösungswege sind:
Lo!
Hi,
Warning: Cannot midify header information - headers already sent by (output started at C:\xampp...\form.php:2) in C:\xampp...\form.php on line 3
In Zeile 3 steht folgendes:
Das ist uninteressant, da - wie die Fehlermeldung ja aussagt - die störende Ausgabe bereits in Zeile 2 stattfindet.
Leider weiß ich nicht, wie ich das umschreiben kann, sodass ich keine Fehlermeldung erhalte.
Indem Du die Ausgabe, die in form.php in Zeile 2 stattfindet (output started at C:\xampp...\form.php:2) nicht machst.
cu,
Andreas
Hi,
Ich habe ein Problem mit einem Script für ein "spamsicheres Formular". Und zwar habe ich eine Grafik generiert, in der 2 zahlen stehen, die man dann in ein anderes Feld addiert eingeben soll. Die Grafik habe ich hinbekommen, nur jetzt habe ich das Problem, dass ich nichts anderes in die Seite eintragen kann
Dann machst du wohl den üblichen (mir trotzdem unverständlichen) Newbie-Denkfehler, Bilddaten und HTML in einer Ressource ausliefern zu wollen.
Bilder bindet man in HTML allgemein mit <img src="XYZ" alt="..."> ein.
Ob XYZ dabei eine physisch auf dem Server vorhandene Grafik-Datei, oder auch ein Script, welches dynamisch Bilddaten ausgibt, referenziert, ist unerheblich.
MfG ChrisB
Okay danke schonmal für die Antworten. habs jetzt soweit hinbekommen, dass es keine Fehlermeldung mehr gibt, dafür aber Sonderzeichen. Also wenn ich einfach nur mein Script ausgeben lasse, kommt die Grafik, alles läuft einwandfrei. Aber wenn ich auch nur irgendwo ein echo "bla"; hinmache, bekomme ich bei der Ansicht "bla"und danach ganz viele Sonderzeichen usw... Woran kann das liegen? Das Script funktioniert ja eigentlich.
Ich berechne zuerst die Graifk und gebe sie dann aus mit:
imagePng($image);
Weiß jemand wieso ich Sonderzeichen erhalte?
Zur Änderung: Ich habe das header('Content-Type: image/png') rausgenommen, was vorher für die Fehlermeldung gesorgt hatte
mfg
markus
Hi,
Also wenn ich einfach nur mein Script ausgeben lasse, kommt die Grafik, alles läuft einwandfrei. Aber wenn ich auch nur irgendwo ein echo "bla"; hinmache, bekomme ich bei der Ansicht "bla"und danach ganz viele Sonderzeichen usw... Woran kann das liegen?
Daran, dass du immer noch blödsinniger Weise unterschiedliche Ressourcentypen in einer zu vermischen versuchst.
imagePng($image);
>
> Weiß jemand wieso ich Sonderzeichen erhalte?
\*Weil\* ein Bild nun mal aus "Sonderzeichen" besteht.
> Zur Änderung: Ich habe das header('Content-Type: image/png') rausgenommen, was vorher für die Fehlermeldung gesorgt hatte
Das solltest du drin lassen, damit der Browser auch weiss, dass er die nachfolgenden "Sonderzeichen" als Bilddaten interpretieren soll.
Nur die unsinnige Vermischung von Daten in einer Ressource, die solltest du unterlassen.
MfG ChrisB
--
Light travels faster than sound - that's why most people appear bright until you hear them speak.
Also eigentlich hast du ja jetzt 'ne Menge Tipps, dass du die Datenart nicht vermischen sollst. Ums ganz kurz zu sagen: Wenn du eine Grafik ausgibst solltest du idR kein echo() verwenden.
Ich wollte dir aber ganz nebenbei im Sinne der Barrierearmut empfehlen auf Captcha zu verzichten. Inzwischen können Maschinen die Dinger oft besser lesen als Menschen und sehbehinderte Personen sind vollkommen ausgeschlossen (insbesondere Blinde, aber auch sehschwache Leute haben Probleme).
Es gibt 1001 möglichkeiten ein Formular barrierefrei zu erstellen und dennoch eine geringe Spam-Problematik zu haben. Bei unpopulären Formularen (also nicht standarisierten wie in Forensoftware z.B.) reicht oft schon ein vorbelegtes <select> in dem man eine bestimmte Auswahl treffen muss, die darüber geschrieben steht. Unsichtbare (nicht "hidden") <inputs> die "E-Mail" heißen nützen auch oder eine Inhaltsprüfung auf (bestimmte) URLs. Oder mehrere submit-button, von denen nur der eine mitten drin funktioniert (und alle anderen mit CSS versteckt wurden) oder oder oder... wie gesagt 1001 Möglichkeiten, manche sind barrierefrei und andere sind nur barrierearm. Aber Captcha sind böse! (Captcha mit auditiver Komponente sind akzeptabel aber immer noch nicht gut).
Und letzten Endes wäre da noch die Möglichkeit einen Spam-Schutz in der Programmierung vor zu sehen (also irgendwo ein "verarbeite Formular-submit nur wenn (true)") aber erstmal noch nichts diesbezüglich zu unternehmen. Mit etwas Glück bleibst du eine Weile Spamfrei und kümmerst dich dann wenn es soweit ist.