gelöschter Benutzer

kontaktformular sendet nicht? (Seite 2)



gelöschter Benutzer
am 17.07.2011, 18:40 Uhr schrieb

Na ich dachte das wird über die Captcha erledigt?

<?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 String $possible enthält alle Zeichen, die verwendet werden sollen
$possible="ABCDEFGHJKLMNPRSTUVWXYZ23456789";
$str="";
while(strlen($str)<$len) {
$str.=substr($possible,(rand()%(strlen($possible))),1);
}
return($str);
}

$text = randomString(5); //Die Zahl bestimmt die Anzahl stellen
$_SESSION[\'captcha_spam\'] = $text;

header(\'Content-type: image/png\');
$img = ImageCreateFromPNG(\'captcha.PNG\'); //Backgroundimage
$color = ImageColorAllocate($img, 0, 0, 0); //Farbe
$ttf = $_SERVER[\'DOCUMENT_ROOT\']."/captcha/XFILES.TTF"; //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);
?>


matthes
Avatar matthes
Foren Moderator
Evil Genius
Content Halbgott (973 Beiträge)
am 17.07.2011, 22:31 Uhr schrieb matthes

Welche Datei und welche Stelle im Code das erledigen, kann ich vorher nicht wissen.
Es wäre für die Zukunft sehr hilfreich, wenn du Code in entsprechende Tags einschließen könntest, das verbessert die Lesbarkeit enorm:
[html][ php ][ /php ] für PHP
[ html ][ /html ] für reines HTML
jeweils ohne Leerstellen, das Forum war mit der Verschachtelung leider nicht einverstanden. [/html]

Ganz offensichtlich wird $_SESSION[\'captcha_spam\'] nicht korrekt gespeichert, denn wie wir bei der Ausgabe gesehen haben, ist die ganze Session leer.
Ich weiß jetzt gar nicht, wie die Sessions generiert werden und ob der Aufruf in einem neuen Request für das Bild vielleicht eine andere, eigene Session erzeugt...

Füge bitte mal in der Datei, die das Formular bereitstellt und in der kontaktsenden.php nach dem session_start(); folgendes ein:
echo session_id();

In der captcha.php fügst du stattdessen folgendes ein:
//Nach dieser Zeile:
$_SESSION[\'captcha_spam\'] = $text;
//diese Zeile ergänzen:
$text=session_id();


Jetzt sollte dir auf jeder Seite ein Wert ausgegeben werden, bzw. das Captcha sollte die ersten Zeichen eines Wertes darstellen. Wenn diese Werte nicht übereinstimmen, generiert das Captcha eine völlig neue, andere Sitzung als die, die von den anderen Dateien verwendet werden.


Eine Lösung wäre, vor jedem session_start(); eine session_id festzulegen, z.B. per
session_id(md5($_SERVER[\'REMOTE_ADDR\']));


Make Seitenreport great again!


gelöschter Benutzer
am 17.07.2011, 22:59 Uhr schrieb

Matthes schrieb:
Ich weiß jetzt gar nicht, wie die Sessions generiert werden und ob der Aufruf in einem neuen Request für das Bild vielleicht eine andere, eigene Session erzeugt...



Hi Matthes,

eine neue Session wird nur erzeugt wenn


  • keine existiert,

  • die aktuelle gelöscht wurde (session_destroy()),

  • oder die aktuelle ID nicht richtig übergeben wird (Cookies deaktiviert, Link rewrite).


Das sind zumindest die häufigsten Fehler.

Matthes schrieb:
Eine Lösung wäre, vor jedem session_start(); eine session_id festzulegen, z.B. per
session_id(md5($_SERVER[\'REMOTE_ADDR\']));



Damit würden alle User mit der selben IP in der gleichen Session stecken.


Ich vermute mal der Grund das die id nicht angezeigt wurde liegt hier:
<?php
session_start();
if(isset($_SESSION[\'captcha_spam\']) AND $_POST["sicherheitscode"] == $_SESSION[\'captcha_spam\']){
unset($_SESSION[\'captcha_spam\']);
?>


Es wäre wirklich hilfreiche beide Skript mal komplett zu sehen wie du sie aktuell hast und bitte auch formatiert.



Schöne Grüße
Thomas

PS: Es sollte text/html sein
$headers .= "Content-type: text_html";


matthes
Avatar matthes
Foren Moderator
Evil Genius
Content Halbgott (973 Beiträge)
am 18.07.2011, 10:32 Uhr schrieb matthes

Ja, dass Benutzer der gleichen IP in der gleichen Session landen, war mir schon klar. Es ging hier nur um ein kleines Beispiel und einen Test, um voranzukommen, wir können ja nicht immer eine komplette, absolut korrekte Lösung präsentieren.

Das unset() hatte ich zwar übersehen, aber das hat mit der leeren Session mMn nichts zu tun. Denn wenn der Captcha-Code vorhanden ist, funktioniert es ja nicht, also kommen wir gar nicht zu der Zeile, in der geunsettet wird.

sonnenwelt, nur zur Sicherheit, an welcher Stelle in der kontaktsenden.php hattest die Ausgabe von SESSION und POST eingefügt? Gleich zu Beginn?


Make Seitenreport great again!


gelöschter Benutzer
am 18.07.2011, 10:51 Uhr schrieb

Ooooooo man, eigentlich dachte ich hab schon richtig was gelernt, aber nun verlier ich voll die ü.

Hier mal die kontakt.html

[html]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de"><head>
<title>Unternehmensberatung</title>






<link rel="shortcut icon" href="http://www.xxxxxxxxxxxxxxxxxxxxx.de/images/favicon.ico">
<link rel="stylesheet" type="text/css" href="./assets/sf.css">
<link rel="stylesheet" type="text/css" href="./assets/sd.css">
<link rel="stylesheet" type="text/css" href="./assets/sc.css">
<script src="./assets/jq.js"></script>
<script>
function MM_validateForm() { //v4.0
if (document.getElementById){
var i,p,q,nm,test,num,min,max,errors=\'\',args=MM_validateForm.arguments;
for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=document.getElementById(args[i]);
if (val) { nm=val.name; if ((val=val.value)!="") {
if (test.indexOf(\'isEmail\')!=-1) { p=val.indexOf(\'@\');
if (p<1 || p==(val.length-1)) errors+=\'- \'+nm+\' must contain an e-mail address.\\n\';
} else if (test!=\'R\') { num = parseFloat(val);
if (isNaN(val)) errors+=\'- \'+nm+\' must contain a number.\\n\';
if (test.indexOf(\'inRange\') != -1) { p=test.indexOf(\':\');
min=test.substring(8,p); max=test.substring(p+1);
if (num<min || max<num) errors+=\'- \'+nm+\' must contain a number between \'+min+\' and \'+max+\'.\\n\'; <br /> } } } else if (test.charAt(0) == \'R\') errors += \'- \'+nm+\' is required.\\n\'; }
} if (errors) alert(\'The following error(s) occurred:\\n\'+errors);
document.MM_returnValue = (errors == \'\');
} }
</script>
</head>
<body>







Kontakt




Für Fragen und Terminvereinbarungen erreichen Sie mich unter:


 


xxxxxxxxxxxxxxx


xxxxxxxxxxxxx


xxxxxxxxxxxxxxx


xxxxxxxxxxxxxxx


 


Telefon: +49 xxxxxxxxxxxx


E-Mail: xxxxxxxxxxxxxxxxxxxxxx.de


 



<form action="/kontaktsenden.php" method="post" name="form1" id="form1" onsubmit="MM_validateForm(\'name\',\'\',\'R\',\'plz\',\'\',\'NisNum\',\'email\',\'\',\'RisEmail\',\'telefon\',\'\',\'RisNum\',\'sicherheitscode\',\'\',\'R\',\'nachricht\',\'\',\'R\');return document.MM_returnValue">

Ihre Nachricht:





Name:*





 


Straße,Nr.:





 


Postleitzahl:





 


Ort:





 


Ihre E-Mail-Adresse:*





 


Telefonnummer:*














 


 


</form>

 




</body>
</html>
[/html]



Und hier die kontaktsenden.php

<?php
session_start();
echo \'

\';

print_r($_SESSION);
print_r($_POST);
echo \'

\';
if(isset($_SESSION[\'captcha_spam\']) AND $_POST["sicherheitscode"] == $_SESSION[\'captcha_spam\']){
unset($_SESSION[\'captcha_spam\']);



/* Betreff und Email Variable */

$emailBetreff = \'Unternehmensberatung\';
$webmaster = \'xxxxxxxxxxxx.de\';

/* email formdaten */

$nameFeld = $_POST[\'name\'];
$nachrichtFeld = $_POST[\'nachricht\'];
$strasseFeld = $_POST[\'strasse\'];
$plzFeld = $_POST[\'plz\'];
$emailFeld = $_POST[\'email\'];
$telefonFeld = $_POST[\'telefon\'];
$ortFeld = $_POST[\'ort\'];

$body = <<<EOD <br />
Name: $nameFeld
Nachricht: $nachrichtFeld
Strasse: $strasseFeld
PlZ: $plzFeld
Email: $emailFeld
Telefon: $telefonFeld
Ort: $ortFeld
EOD;

$headers = "From: email\\r\\n";
$headers .= "Content-type: text_html\\r\\n";
$headers = mail($webmaster, $emailBetreff, $body, $headers);




}

else{
exit("Der Sicherheitscode ist falsch!!!");
}
?>



Ich sag mal daumendrück






gelöschter Benutzer
am 18.07.2011, 15:39 Uhr schrieb

sonnenwelt schrieb:
Und hier die kontaktsenden.php ....



Und das ist wirklich die komplette kontaktsenden.php?
Eine weiße Seite auf die der User geleitet wird nachdem er auf senden gedrückt hat.

Denn wenn vor
<?php
session_start();
auch nur eine Zeichen steht wird die Session nicht geladen, daher die Frage. Aber Matthes hat recht, das Problem liegt bei deiner Session.

Du lässt dir auch alle Fehler anzeigen?


UFOMelkor
Avatar UFOMelkor
Student
Content Meister (350 Beiträge)
am 18.07.2011, 16:22 Uhr schrieb UFOMelkor

@sonnenwelt
Kleinigkeit am Rande, da es mir gerade auffällt:

Statt
<?php
session_start();
echo \'

\';

print_r($_SESSION);
print_r($_POST);
echo \'

\';
if(isset($_SESSION[\'captcha_spam\']) AND $_POST["sicherheitscode"] == $_SESSION[\'captcha_spam\']){
unset($_SESSION[\'captcha_spam\']);

//ganz viel Code

}
else{
exit("Der Sicherheitscode ist falsch!!!");
}
?>

schreib lieber das Folgende:

<?php
session_start();
echo \'

\';

print_r($_SESSION);
print_r($_POST);
echo \'

\';
if(!isset($_SESSION[\'captcha_spam\']) OR $_POST["sicherheitscode"] != $_SESSION[\'captcha_spam\']){
exit("Der Sicherheitscode ist falsch!!!");
}

unset($_SESSION[\'captcha_spam\']);

//ganz viel Code

?>

Das macht den Code gleich viel einfacher zu lesen


Naturkosmetik in Bochum

Steppenhahn Ultramarathon-Community

romacron
JDev Xer
Content Gott (1224 Beiträge)
am 19.07.2011, 06:06 Uhr schrieb romacron

Ich denke der Lösungs-Ansatz ist nicht der Richtige.
Bisher hat keiner meiner Vorredner die fehlende Validierung usw. bemängelt. Du möchtest dein Script im Livebetrieb verwenden, da ist die Validierung zwingend erforderlich.

Dein Lernwille in allen Ehren: Ich denke du fragst einen der 3 Jungs ob sie dir das Script mit der ersten Lieferung, Validierung der Vars, sowie dem Weiterverarbeiten, in Ordnung bringen.
So wirst dein Kontaktformular ruhig schlafend einsetzen können.

Der Code wie er auf SR angezeigt wird ist schwer zu lesen. Im Normalfall öffnet man das mit nem Editor samt Syntax highlighter und sieht sofort was schief läuft.



gelöschter Benutzer
am 19.07.2011, 08:58 Uhr schrieb

@Ultima.....eigentlich gehört noch die echo...nachricht wurde versendet rein

@rancom.....dann bitte ich DICH mir das in Ordnung zu bringen. Die codes hab ich ja alle schon hier gepostet, kann sie dir aber auch noch mal schicken?

@all....wenn das selbst für euch so schwer ist da hat man ja als newbie null chance


matthes
Avatar matthes
Foren Moderator
Evil Genius
Content Halbgott (973 Beiträge)
am 19.07.2011, 10:16 Uhr schrieb matthes

romacron schrieb:
Ich denke der Lösungs-Ansatz ist nicht der Richtige.
Bisher hat keiner meiner Vorredner die fehlende Validierung usw. bemängelt. Du möchtest dein Script im Livebetrieb verwenden, da ist die Validierung zwingend erforderlich.


Ich hatte häufiger daran gedacht, aber darum ging es hier nicht. Wenn wir jedesmal dutzende weitere Baustellen öffnen und von der Fragestellung abweichen, kommen wir einer Lösung nie näher. Dieses Thema wäre mit Sicherheit noch angesprochen worden.

Da sonnenwelt meiner Bitte, für weitere Informationen zu sorgen, nicht nachkommt und romacron Code in einen externen Editor einfügt und sofort sieht, was schief läuft, könnte er ja für die Lösung sorgen.


Make Seitenreport great again!



« zurück zu: HTML5 & CSS

Das Seitenreport Forum hat aktuell 5275 Themen und 36110 Beiträge.
Insgesamt sind 48360 Mitglieder registriert.