Zur Navigation

übergabe von 2 javascript variablen zu einem php Kontaktformular [2]

11 Jörg Kruse

Welche Infos werden benötigt und wie kann ich den Webspace nutzen?

Damit meinte ich, dass du diese Seite irgendwo hochlädtst, dass man sie sich mal anschauen kann. Eine Beipielseite, die das Problem verdeutlicht, reicht ja. Oder du postest den Quellcode der relevanten Frame-Dateien, so dass man die Seiten nachbauen kann.

Das ganze ist halt etwas komplexer, wenn JavaScript über Frame-Grenzen hinweg arbeiten soll. Und da muss man den Gesamtaufbau kennen. Zudem wird dann der Ablauf für mich auch verständlicher, so das wir nicht Gefahr laufen, aneinander vorbeizureden :)

3. Das Bild wird vergrößert dargestellt und die Adresse des Künstlers mit allen Daten (email usw.) eingeblendet. Möchte der Besucher jetzt mit dem Künstler Kontakt aufnehmen, aktiviert er den Button email mit onclick.
Jetzt verzweigt er in das js-script (function email() wie bekannt, und soll das die email-Adresse und die Nummer des angewählten Bild an das Kontaktformular (Kontakt.php) übergeben. Um so mit den Künstler Kontakt aufzunehmen.

Das kann, wie ich in Beitrag 7 bereits geschrieben habe, eine gefährliche Angelegenheit sein. Spammer suchen, auch automatisiert, Formulare, die sie manipulieren können, um darüber Spam zu versenden. Wenn die Empfängeradresse mit dem Formular mitgesendet wird, dann ist dieses Formular manipulierbar. Und so etwas kann auch böse Folgen für den Betreiber des Formulars haben.

Sicherer wäre es, wenn statt der Emailadresse nur eine ID übergeben wird, die das PHP-Script anschließend in eine Emailadresse übersetzen kann

31.10.2014 09:52

12 hadida

Guten Morgen Jörg,

ich habe gestern noch die gesamte (unfertige) Webseite beim Provider
hochgeladen.
In den nächsten 10 Minuten schalte ich die Webseite frei.
Über Galerie-Bilder kommst Du zu der Seite auf der unten rechts der Button
Mail-Adresse steht. Mit der Betätigung (onclick) wird die function () emailadresse aufgerufen. Erst hier ist die Adresse bekannt.
Jetzt soll da kontaktformular aufgerufen werden.
Links unten befindet sich meine Kontaktadresse.

Gruß hadida

Hier folgt die komplette Seite kontakt.php
<?php
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Kontaktformular.org
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


// Einstellungen
//Übernahme der emailadresse
$emailadr = $_REQUEST['emailadr'];
echo $emailadr;

// Ihre E-Mailadresse
$ihre_emailadresse = $emailadr;

// Absender || Muster(From: NAME <EMAIL>) // Beispiel: 'From: Max Mustermann <max@musterdomain.tld>'
$email_absender = 'From: Kontaktformular <system@domain.tld>';

// Betreff
$email_betreffzeile = 'Kontaktformular-Anfrage';

$upload_groesse=250; // maximale Uploadgroees in Kilobyte

// Hinweismeldungen

#Nicht alle Felder ausgef&uuml;llt
$errormessage[0] = 'Fehler, Sie haben nicht alle Felder ausgef&uuml;llt:';
#Kein Name eingegeben
$errormessage[1] = '<br />- Ung&uuml;ltiger Name';
#Ung&uuml;ltige E-Mailadresse eingegeben
$errormessage[2] = '<br />- Ung&uuml;ltiger E-Mailadresse';
#Kein Betreff eingegeben
$errormessage[3] = '<br />- Ung&uuml;ltiger Betreff';
#Keine Nachricht eingegeben
$errormessage[4] = '<br />- Ung&uuml;ltige Nachricht';
#Ung&uuml;ltiger Sicherheitscode
$errormessage[5] = '<br />- Ung&uuml;ltiger Sicherheitscode';
#Ung&uuml;ltiger Zeichen (Spamverdacht)
$errormessage[6] = '<br />- Ung&uuml;ltige Zeichen entdeckt';


// Hinweismeldungen fuer den Upload
$e[0]="Uploadfehler: Die erlaubte Dateigroesse $upload_groesse kb ist ueberschritten";
$e[1]="Uploadfehler aufgetreten, bitte laden Sie nur die angegebenen Datei-Typen hoch";
$e[2]="Uploadfehler: unbestimmter Fehler aufgetreten";



#Alle Felder sind OK
$okay = 'Vielen Dank f&uuml;r Ihre Nachricht, wir werden Sie demn&auml;chst bearbeiten!<br /><br />';




// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


#######################################
session_start();
error_reporting(0);
#######################################


if(isset($_POST['submit'])) {
#######################################

$name = check($_POST['name']);
$email = check($_POST['email']);
$betreff = check($_POST['betreff']);
$nachricht = check($_POST['nachricht']);
$homepage = check($_POST['homepage']);

#######################################

$ip = $_SERVER['REMOTE_ADDR'];
$host = gethostbyaddr($ip);

#######################################

$zeit = time();
$datum = date ("d.m.Y", $zeit);
$uhrzeit = date ("H:i:s", $zeit);
$message ='';

#######################################




if($name==''){$message = $errormessage[1]; $fehler = 1;}

if(!preg_match('#^([a-zA-Z0-9\.\_\-]+)@([a-zA-Z0-9\.\-]+\.[A-Za-z][A-Za-z]{1,4})$#', $email)){
$message .= $errormessage[2]; $fehler = 1;
}

if($betreff==''){$message .= $errormessage[3]; $fehler = 1;}

if($nachricht==''){$message .= $errormessage[4]; $fehler = 1;}

if($_POST['code']=="" || strtolower($_POST['code'])!=$_SESSION['captcha_code']){
$message .= $errormessage[5];
$fehler = 1;
}

if(ehi_check()!=0){$message .= $errormessage[6]; $fehler = 1;}






#######################################
#######################################


if(isset($fehler)){
$fehler_message = '<span style="color:red">' . $errormessage[0];
$fehler_message .= $message.'</span><br /><br />';
$message = $fehler_message;
}else{$message = '';}



#######################################
#######################################


if(!isset($fehler) && !empty($_FILES[uploadfile]['name'])){

@include("upload.src.php");

// falls Fehler mit dem Upload, hier uebergeben
if($uploadresult[1]==0){
$fehler=1;
$message.='<span style="color:red">'.$ausgabe.'</span><br /><br />';
}

}




#######################################
#######################################

if(!isset($fehler)){

//wenn Uploadatei, dann
if($uploadresult[1]==1){

$datei="uploaddateien/".$zieldateinamemitendung;
$name_des_bildes=$zieldateinamemitendung;
$grenze="grenzlinie";

$headers = '';
$headers .= "MIME-Version: 1.0\r\n";
$headers.="Content-Type: multipart/mixed;\n\tboundary=$grenze\n";

$botschaft ="";
$botschaft.="\n--$grenze\n";
$botschaft.="Content-transfer-encoding: 7BIT\r\n";
$botschaft.="Content-type: text/plain\n\n";


$email_nachricht = "-- Kontakformularanfrage --\n\nBetreff: $betreff";
$email_nachricht .= "\nName: $name\nE-Mailadresse: $email\nHomepage: $homepage\n\n";
$email_nachricht .= "Nachricht:\n$nachricht\n\nIP: $ip\nHost: $host\n";
$email_nachricht .= "gesendet am $datum um $uhrzeit.";

$botschaft.= "$email_nachricht \n";

$botschaft.="\n\n";
$botschaft.="\n--$grenze\n";
$botschaft.="Content-Type: application/octetstream;\n\tname=$name_des_bildes\n";
$botschaft.="Content-Transfer-Encoding: base64\n";
$botschaft.="Content-Disposition: attachment;\n\tfilename=$name_des_bildes\n\n";
$zeiger_auf_datei=@fopen($datei,"rb");
$inhalt_der_datei=@fread($zeiger_auf_datei,filesize($datei));
@fclose($zeiger_auf_datei);
$inhalt_der_datei=chunk_split(base64_encode($inhalt_der_datei));
$botschaft.=$inhalt_der_datei;
$botschaft.="\n\n";
$botschaft.="--$grenze";



@mail($ihre_emailadresse, $email_betreffzeile, $botschaft, $headers);


}else{

$email_nachricht = "-- Kontakformularanfrage --\n\nBetreff: $betreff";
$email_nachricht .= "\nName: $name\nE-Mailadresse: $email\nHomepage: $homepage\n\n";
$email_nachricht .= "Nachricht:\n$nachricht\n\nIP: $ip\nHost: $host\n";
$email_nachricht .= "gesendet am $datum um $uhrzeit.";

// Mail senden
@mail($ihre_emailadresse, $email_betreffzeile, $email_nachricht, $email_absender);


}

//Variablen resetten
$name = '';
$betreff = '';
$email = '';
$nachricht = '';
$homepage = '';

$meldung=$okay;


} else {
$meldung=$message;
}




#######################################
#######################################



} //endissetsubmit
else{$meldung='';}


// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
?>


<!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">
<head>

<title>Kontaktformular</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta http-equiv="content-style-type" content="text/css" />
<meta http-equiv="content-script-type" content="text/javascript" />

<style type="text/css">
body,td,th{font-family:Verdana,Arial,Helvetica,sans-serif;font-size:12px;color:#333333;}
body{background-color: #FFFFFF;}
a:link, a:visited, a:active{color:#0066FF;text-decoration:none;}
a:hover{text-decoration: underline;}

#wrapper { position: absolute; background-color: #de913f; margin-top: 0px; margin-left: 0px; width: 800px; height:500px;
border-top: 0px solid #8C3330; border-left: 0px solid #8C3330; border-right: 0px solid #8C3330; border-bottom: 0px solid #8C3330;}

</style>

<script type="text/javascript">
function reload_captcha(){
var nd = new Date();
var src="captcha.php?"+nd;
document.getElementById("captcha").src= src;
}
</script>

</head>
<body>
<div id="wrapper">

<p><strong>Kontaktformular:</strong></p>
<form name="kontaktformular" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">

<table style="width:500px">
<tr><td colspan="2"><?php echo $meldung; ?></td></tr>
<tr>
<td style="width:150px"><strong>Name:</strong></td>
<td><input name="name" type="text" value="<?php echo $name; ?>" size="40" maxlength="100" /></td>
</tr>
<tr>
<td style="width:150px"><strong>E-Mail Adresse:</strong><br /></td>
<td><input name="email" type="text" id="email" value="<?php echo $email; ?>" size="40" maxlength="100" /></td>
</tr>
<tr>
<td style="width:150px"><strong>Betreff:</strong></td>
<td><input name="betreff" type="text" value="<?php echo $betreff; ?>" size="40" maxlength="50" /></td>
</tr>
<tr>
<td style="width:150px"><strong>Homepage:</strong></td>
<td><input name="homepage" type="text" value="<?php echo $homepage; ?>" size="40" maxlength="50" /></td>
</tr>
<tr>
<td style="width:150px"><strong>Nachricht:</strong></td>
<td><textarea name="nachricht" cols="40" rows="10" style="white-space: nowrap;"><?php echo $nachricht; ?></textarea></td>
</tr>


<tr>
<td style="width:150px"><strong>Datei uploaden (jpg,gif,png,pdf)</strong></td>
<td> <input type="file" name="uploadfile">
</td>
</tr>

<tr>
<td style="width:150px">&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td style="width:150px"><strong>Sicherheitscode:</strong></td>
<td><img id="captcha" src="captcha.php" alt="captcha" border="1" /><br />
<a href="javascript:void(0);" onclick="reload_captcha();">Neuer Code?</a></td>
</tr>
<tr>
<td style="width:150px"><strong>Sicherheitscode <br />
wiederholen: </strong></td>
<td><input name="code" type="text" size="20" maxlength="50" /></td>
</tr>
<tr>
<td style="width:150px">&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td style="width:150px">&nbsp;</td>
<td><input type="submit" value="Abschicken" name="submit" />
<!-- Hinweis darf nicht entfernt werden! -->
<p><span style="font-size:10px; font-family:Verdana, Arial, Helvetica, sans-serif">
&copy; Script Powered by <a target="_blank" href="http://www.kontaktformular.org" title="kostenloses Kontaktformular">kostenloses Kontaktformular</a></span></p>
<!-- Hinweis darf nicht entfernt werden! --></td>
</tr>
</table>
</form>

</div>
</body>
</html>
<?php
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


function check($var){
$varsafe=trim(strip_tags($var));
return $varsafe;
}


function ehi_check(){
$achtung=0;
foreach($_POST as $val){
$pos = strpos(strtolower($val), 'content-type:'); if($pos !== false){$achtung++;}
$pos = strpos(strtolower($val), 'content-type'); if($pos !== false){$achtung++;}
$pos = strpos(strtolower($val), 'bcc:'); if($pos !== false){$achtung++;}
$pos = strpos(strtolower($val), 'bcc'); if($pos !== false){$achtung++;}
} //endforeach
return $achtung; // wenn Null dann Alles Okay
}


// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
?>

31.10.2014 10:22

13 hadida

sorry, die webseite lautet beautiful-thing.eu

31.10.2014 10:24

14 hadida

Hallo Jörg,
ich habe über Deinen Vorschlag nachgedacht.

" Sicherer wäre es, wenn statt der Emailadresse nur eine ID übergeben wird, die das PHP-Script anschließend in eine Emailadresse übersetzen "

Ich habe alle Bilder einen Namen vergeben:

<a href="javascript:Zeigen(4)"><img name="arb4" title="" alt="" /></a>
.
// Hier steht mir die angewählte Bildnr. zur Verfügung. Wenn ich die Nummer beim Aufruf in kontakt.php zur Verfügung hätte, kann ich daraus die email-adresse ermittelt. Der Weg wäre dann auch sicherer,oder?
Die Nummer des Bildes ist primär. Die muss auf jeden Fall mit versendet werden.
Aber wie bekomme ich die id-Nr. nach php?
Gruß hadida



function Zeigen(Nummer) {
bildjetzt = Nummer;
alert(bilder[bildjetzt][2]); // ergebnis=bilder/bi#.jpg
document.getElementById("titel").innerHTML = bilder[bildjetzt][1];
document.getElementById("bildpad").src = bilder[bildjetzt][2];
document.getElementById("textbereich").innerHTML = bilder[bildjetzt][3];

metadat(); // Anzeige der Metadaten
}

function metadat() {
an = (kundnr.length); // Anzahl der Kunden
for(i=0; i<an; i++)
{
if (bilder[bildjetzt][0] == kundnr[i][0])
{
document.getElementById("metadaten").innerHTML = kundnr[i][1];
document.getElementById("metadaten1").innerHTML = kundnr[i][2];
document.getElementById("metadaten2").innerHTML = kundnr[i][3];
document.getElementById("metadaten3").innerHTML = kundnr[i][4];
kundennummer = kundnr[i][0];
emailadresse = kundnr[i][5];
webadresse = kundnr[i][6];
}}}

function mailadr()
{ alert(emailadresse);
//var madr = 'maxmuster@example.com';
document.getElementById('emailadr').value = emailadresse;
parent.frames['rechtsframe'].location.href='kontakt.php';
}

31.10.2014 13:13

15 Jörg Kruse

OK, jetzt verstehe ich besser - das Formular befindet sich noch gar nicht auf der Seite, sondern es wird im selben Frame die Seite geladen, auf der sich das Formular befindet.

Aber wie bekomme ich die id-Nr. nach php?

Du kannst an 'kontakt.php' den entsprechenden Parameter hängen

Nehmen wir an, dass die Variable bildnr die Bildnummer enthält:

parent.frames['rechtsframe'].location.href='kontakt.php?bildnr=' + bildnr;

In kontakt.php sollte die Bildnummer dann in der Variable $_GET['bildnr'] enthalten sein

// Hier steht mir die angewählte Bildnr. zur Verfügung. Wenn ich die Nummer beim Aufruf in kontakt.php zur Verfügung hätte, kann ich daraus die email-adresse ermittelt. Der Weg wäre dann auch sicherer,oder?

Ja, das ist auf jeden Fall sicherer :)

EDIT:

aber die Emailadresse dann auch nicht ins Formular einbauen, sondern die Bild-Nr. (über ein hidden input) weiterreichen! erst beim Verschicken der Mail sollte die Emailadresse ermittelt werden

31.10.2014 15:44 | geändert: 31.10.2014 15:50

16 hadida

Hallo Jörg,
Dein Vorschlag, die Bildnr. an den Aufruf anzuhängen hat gut funktioniert.
Ich konnte alle fehlenden Informationen zusammentragen, habe jedoch ein Problem mit dem externen Kontaktprogramm. Jedesmal wenn ich die Datei (Kontakt.php) aufrufe, erhalte ich einen Index-Fehler. Also habe ich zunächst alles getrennt und die Ergebnisse in einer Textdatei geschrieben um anschließend in kontakt.php die Daten ausgelesen.
Aber auch hier gibt es die selben Fehler Ich vermute es liegt am Kontaktprogramm das ich nicht kenne.
Vielleicht kennst Du ein separates Kontaktprogramm das ich verwenden kann ohne alles neu zu programmieren? Jetzt muß ich erst einmal einiges testen.
Aber zunächst vielen, vielen Dank für Deine Hilfe und Geduld.
Habe wieder viel dabei gelernt.
Gruß hadida


02.11.2014 13:57

17 Jörg Kruse

Jedesmal wenn ich die Datei (Kontakt.php) aufrufe, erhalte ich einen Index-Fehler.

Wie ist denn der genaue Wortlaut der Fehlermeldung?

02.11.2014 19:38

18 hadida

Guten Morgen Jörg,

Hier der js-Aufruf in bilder.php

function mailadr()
{
var bild = bilder[bildjetzt][2];
// alert(bild);
parent.frames['rechtsframe'].location.href='kontakt.php?bildnr=' + bild;
}

kontakt.php
Nachfolgende Befehle in kontakt.php eingefügt.
Zum testen habe ich die Bildnr. vorgegeben. Damit wird kein Fehler angezeigt. Alle Werte werden korrekt ermittelt.

3. $bild = $_GET['bildnr'];
4.//$bild = "bilder/bi10.jpg";

$buffer = $bild;
$lng = strlen($buffer);
$bildname = substr($buffer,0,$lng-3);
$bildname = $bildname."txt";
// -------------------------------------------------------

// Ermittle Kundennr.
$handle = fopen($bildname,"r"); // Textdatei öffnen
while (!feof($handle))
{
$buffer = fgets($handle);
//echo $buffer;
$zpos = substr($buffer,0,2);
if ($zpos == '00') // Kundennr.ini herausfiltern
{
$posi = strpos($buffer, ":");
$kndnr = substr($buffer,3,$posi-3);
}
} // while Schleife
//echo $kndnr;
fclose($handle); // Textdatei schliessen
usw.


Benutze ich $_GET erscheinen folgende Fehlermeldungen und nichts geht mehr:

Notice: Undefined index: bildnr in C:\xampp\htdocs\dami\kontakt.php on line 3
Warning: fopen(txt): failed to open stream: No such file or directory in C:\xampp\htdocs\dami\kontakt.php on line 13

Warning: feof() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\dami\kontakt.php on line 14

Warning: fgets() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\dami\kontakt.php on line 16

Warning: feof() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\dami\kontakt.php on line 14

Warning: fgets() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\dami\kontakt.php on line 16

Warning: feof() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\dami\kontakt.php on line 14

usw.

Aus diesem Grunde habe ich die Ermittlung der Daten in einem
separaten php Programm (emaliadr.php) vorgenommen und in einer temporären Datei (temp.txt) geschrieben. Anschließend habe ich in kontakt.php die emaliadr.php includet und die Ergebnisse aus der Datei (temp.txt) auslesen.
Leider sind auch hier die gleichen Fehler erschienen.

Im Moment fehlt mir noch keine Lösung ein.

Gruß hadida

03.11.2014 11:16

19 Jörg Kruse

Wann erscheinen die Fehler, erst nachdem du das Kontaktformular an sich selbst abgesendet hast?

In dem Fall muss der Parameter auch beim Absenden mitgegeben werden. Dazu musst du das action Attribut des Formulars anpassen:

<form name="kontaktformular" action="<?php echo $_SERVER['PHP_SELF']; ?>?bildnr=<?php echo $_GET['bildnr'] ?>" method="post" enctype="multipart/form-data">

03.11.2014 19:58 | geändert: 03.11.2014 20:02

20 hadida

Hallo Jörg,
nochmals Danke.

Zu Deiner Frage: Ja, die Fehler kommen nach dem Absenden.
Jetzt muß ich nochmal nachfragen. Der Zusatz mit dem Bild ist doch nur für die Übernahme des Bildnr. gedacht, oder?

Also, jetzt läuft er fast Fehlerfrei durch. Hängen bleibt noch beim Captcha.
Er zeigt hier die keine Box mit Ziffern an. Dies aber auch nur bei allen Browsern im Netz. Auf meinen Server habe ich keine Probleme.


Hier der captcha Code zum Session_start im kontakt.php.
Ich weiß nicht woran das liegen kann. In der Directory liegt das Bild und stehen die Parameter.
Gruß hadida



<?php session_start();

header('Content-type: image/png');
$img = ImageCreateFromPNG('kontaktfiles/bg.png';

$cod= rand(0,99999);
$_SESSION['captcha_code']=$cod;

$color = ImageColorAllocate($img, 149, 165, 155);
$ttf = 'kontaktfiles/font.ttf';
$ttfsize = 21;
$angle = rand(0,4);
$t_x = rand(5,40);
$t_y = 24;

imagettftext($img, $ttfsize, $angle, $t_x, $t_y, $color, $ttf, $cod);
imagepng($img);
imagedestroy($img);
?>

04.11.2014 18:44