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
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üllt
$errormessage[0] = 'Fehler, Sie haben nicht alle Felder ausgefüllt:';
#Kein Name eingegeben
$errormessage[1] = '<br />- Ungültiger Name';
#Ungültige E-Mailadresse eingegeben
$errormessage[2] = '<br />- Ungültiger E-Mailadresse';
#Kein Betreff eingegeben
$errormessage[3] = '<br />- Ungültiger Betreff';
#Keine Nachricht eingegeben
$errormessage[4] = '<br />- Ungültige Nachricht';
#Ungültiger Sicherheitscode
$errormessage[5] = '<br />- Ungültiger Sicherheitscode';
#Ungültiger Zeichen (Spamverdacht)
$errormessage[6] = '<br />- Ungü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ür Ihre Nachricht, wir werden Sie demnä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"> </td>
<td> </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"> </td>
<td> </td>
</tr>
<tr>
<td style="width:150px"> </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">
© 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
}
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
?>
sorry, die webseite lautet beautiful-thing.eu
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';
}
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
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
Jedesmal wenn ich die Datei (Kontakt.php) aufrufe, erhalte ich einen Index-Fehler.
Wie ist denn der genaue Wortlaut der Fehlermeldung?
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
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">
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);
?>