Eine frohe Adventszeit wünscht Apfeltalk
  • Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Unser Dezember-Wettbewerb steht unter dem Thema Zeitreise - Macht mit und beteiligt Euch mit Euren kreativen Fotos! Zum Wettbewerb --> Klick

URL an E-Mail Adresse verschicken

Salzi

Prinzenapfel
Registriert
29.08.06
Beiträge
555
gib sie doch einfach als Text aus und speichere sie zustäzlich noch als Hidden-Field dann kannst du es Problemlos übergeben.

Sowas z.B: <input type="hidden" name="link_adresse" value="<? $_GET['$link_adresse']; ?>">
 

pepepy

Becks Apfel (Emstaler Champagner)
Registriert
20.06.06
Beiträge
332
gib sie doch einfach als Text aus und speichere sie zustäzlich noch als Hidden-Field dann kannst du es Problemlos übergeben.

Sowas z.B: <input type="hidden" name="link_adresse" value="<? $_GET['$link_adresse']; ?>">

Gute Idee, danke :).
Doch momentan kommt keine einzige Mail,
die von diesem Formular abgeschickt wurde, an.
Ich hoffe es liegt an 1&1 und nicht an meinem Formular.

Habe ich hier irgendwo einen Fehler?

CODE
Seite A:
<a href="/anfreundsenden.php?adresse=<?=str_replace("?", "%_%", $_SERVER['REQUEST_URI'])?>">SEITE SENDEN</a>


Seite B (anfreundsenden.php):
<?php
//Formulardaten empfangen
$link_adresse = str_replace("%_%", "?", $_GET['adresse']);
$name = trim($_POST["name"]);
$email = trim($_POST["email"]);
$email_empfaenger = trim($_POST["email_empfaenger"]);
$nachricht = trim(substr($_POST["nachricht"],0,150));
$button = $_POST["button"];

function check_email($email,$email_empfaenger) {
//email nach dem @-Zeichen aufgetrennt
$addarray = explode("@",$email);

//gab es mehr oder weniger als ein @-Zeichen? Dann falsch
if(count($addarray) != 2) return false;

//ist der Teil vor dem @-Zeichen leer? Dann falsch
if(strlen($addarray[0]) == 0) return false;

//ist der Domain_teil nach dem @-Zeichen kleiner als 5 Zeichen? Dann falsch
if(strlen($addarray[1]) < 5) return false;

//Punkt f¸r Toplevel-Domain auslesen
$punktarray = explode(".",$addarray[1]);

//gab es weniger als einen Punkt, dann ung¸ltig, falsch
if(count($punktarray) < 2) return false;

//TopLevelDomain merken
$tld = $punktarray[count($punktarray)-1];

//TLD hat mindestens 2, max. 6 Zeichen
if(strlen($tld) >= 2 && strlen($tld) <= 6) return true;
}

//Formulardaten versendet?
if($button){

//Pflichtfelder leer?
if(!$name || !$email || !$email_empfaenger || !$nachricht){

$meldung[] = "Bitte alle * Felder ausfüllen";
}


//Email-Adresse falsch?
$check = check_email($email,$email_empfaenger);
//$check = true;
if(!$check){

$meldung[] = "Bitte geben Sie eine korrekte E-Mail ein";
}

//alles in Ordnung?
if(!$meldung){

//email versenden!!!
$subject = "Diese Seite ist sehenswert ".date("d.m.Y H:i:s");

$mailbody = "Einen Freund informieren: $link_adresse\n\n".
"$name\n$nachricht\n\n".
"Ciao";

//Das @-Zeichen vor mail unterdrückt Verbindungsfehler
$versandt = @mail("$email_empfaenger", $subject, $mailbody, "From: $email");

if($versandt) header("Location: /anfreundsenden/antwort.php?name=".urlencode($name));
//eigene Fehlerausgabe
else $meldung[] = "Verbindungsprobleme! Versuche Sie es später noch einmal.<br /><br />";

}


}


?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Einen Freund informieren</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<link href="/css/bst.css" rel="stylesheet" type="text/css" media="all"/>
</head>
<body>

<h3>An Freund senden:</h3>
<?php

if(is_array($meldung)){
echo implode("<br />", $meldung);
}

?>
<form action="/anfreundsenden.php" method="post">

<p>
<!-- HTML-nachricht -->
<input type="hidden" name="link_adresse" value="<? $_GET['$link_adresse']; ?>" />
Link an Freund senden: http://www.baustudio-lb.de<?php echo $link_adresse; ?>
</p>
<p>Ihr Name *<br />
<input type="text" name="name" value="<?php echo $name; ?>" maxlength="50" size="50" />
<br />

Ihre E-Mail Adresse *<br />
<input type="text" name="email" value="<?php echo $email; ?>" maxlength="50" size="50" />
<br />

E-Mail Adresse des Empfängers*<br />
<input type="text" name="email_empfaenger" value="<?php echo $email_empfaenger; ?>" maxlength="50" size="50" />
<br />

Nachricht *<br />
<textarea name="nachricht" cols="50" rows="5" wrap="virtual"><?php echo $nachricht; ?></textarea>
<br />

<input type="submit" name="button" value="versenden" />

</p>
</form>

</body>
</html>
 

dahui

Carmeliter-Renette
Registriert
22.10.06
Beiträge
3.303
semi offtopic

tell-a-friend lösungen werden gerne zum spammen benutzt, also auch an captchas oder wenigstens rudimentäre sicherheit denken, ansonsten werden eine menge leute in kürzester zeit auf dich und deine seite einen grossen missmut hegen
 

pepepy

Becks Apfel (Emstaler Champagner)
Registriert
20.06.06
Beiträge
332
Ja, sporadisch kommen Mails an. Die Testmails jedoch überhaupt nicht.
Kann es sein, dass sie vom Server abgefangen werden, weil die Herkunft unklar ist?

Ansonsen müsste ja wirklich ein Fehler im Script vorliegen.
Aber vielleicht kommen die Mails ja noch geballt in ein paar Tagen. :-c
 

pepepy

Becks Apfel (Emstaler Champagner)
Registriert
20.06.06
Beiträge
332
semi offtopic
wenigstens rudimentäre sicherheit

Wodurch kann ich denn Sicherheit schaffen? Es kann ja jeder igendeine E-Mail-Adresse eintragen. Es müsste wahrscheinlich geprüft werden ob es die Absender-Adresse gibt?
Und wie stelle ich sowas an? Oder gibt es andere Möglichkeiten?
 

dahui

Carmeliter-Renette
Registriert
22.10.06
Beiträge
3.303
Wodurch kann ich denn Sicherheit schaffen? Es kann ja jeder igendeine E-Mail-Adresse eintragen. Es müsste wahrscheinlich geprüft werden ob es die Absender-Adresse gibt?
Und wie stelle ich sowas an? Oder gibt es andere Möglichkeiten?

yep captcha z.b. schau aml nicht eingelogged in die AT suche ;)

allerdings muss ich sagen, dass ich von send-2-friend lösungen eh nicht viel halte, da sie erfahrungsgemäss bei meinen projekten vor langer zeit kaum genutzt wurden, eben ausser zum spammen

das reine identifizieren der absenderadresse nützt IMHO gar nichts und auch captcha schützt bedingt nur gegen bots.

schau ich will dich ärgern und kenne deine mailadresse, dann lege ich mir einen dirtaccount und sende dir brav mails als empfehlungen von den wildesten seiten

wie gesagt IMHO send-2-friend einfach streichen aus dem projekt
 

pepepy

Becks Apfel (Emstaler Champagner)
Registriert
20.06.06
Beiträge
332
Danke für den Hinweis.
Das die Dinger, die man meistens kaum lesen kann captcha heissen,
wusste ich auch noch nicht.

Gruß
pepe
 

pepepy

Becks Apfel (Emstaler Champagner)
Registriert
20.06.06
Beiträge
332
laut golem hat 1&1 tatsächlich noch probleme ...

Es lag aber trotzdem an meinem Script.
Jetzt kommen die Mails an, jedoch immernoch ohne dem Link.
Es ist wie verhext.
Wenn ich das Textfeld mit Namen "uri" in den $mailbody einfüge, dann muss der doch mitkommen - oder?

Ich habe jetzt einiges geändert abeer trotzdem fehlt der Link.
CODE:
<?php
//Formulardaten empfangen
$link_adresse = str_replace("%_%", "?", $_GET['adresse']);
$name = trim($_POST["name"]);
$email = trim($_POST["email"]);
$nachricht = trim(substr($_POST["nachricht"],0,150));
$button = $_POST["button"];

function check_email($email) {
//email nach dem @-Zeichen aufgetrennt
$addarray = explode("@",$email);

//gab es mehr oder weniger als ein @-Zeichen? Dann falsch
if(count($addarray) != 2) return false;

//ist der Teil vor dem @-Zeichen leer? Dann falsch
if(strlen($addarray[0]) == 0) return false;

//ist der Domain_teil nach dem @-Zeichen kleiner als 5 Zeichen? Dann falsch
if(strlen($addarray[1]) < 5) return false;

//Punkt f¸r Toplevel-Domain auslesen
$punktarray = explode(".",$addarray[1]);

//gab es weniger als einen Punkt, dann ung¸ltig, falsch
if(count($punktarray) < 2) return false;

//TopLevelDomain merken
$tld = $punktarray[count($punktarray)-1];

//TLD hat mindestens 2, max. 6 Zeichen
if(strlen($tld) >= 2 && strlen($tld) <= 6) return true;
}

//Formulardaten versendet?
if($button){

//Pflichtfelder leer?
if(!$name || !$email || !$email_empfaenger || !$nachricht){

$meldung[] = "Bitte alle * Felder ausfüllen";
}


//Email-Adresse falsch?
$check = check_email($email);
//$check = true;
if(!$check){

$meldung[] = "Bitte geben Sie eine korrekte E-Mail ein";
}

//alles in Ordnung?
if(!$meldung){

//email versenden!!!
$subject = "Diese Seite ist sehenswert ".date("d.m.Y H:i:s");

$mailbody = "Einen Freund informieren: $link_adresse\n$uri\n\n".
"$name\n$nachricht\n\n".
"Ciao";

//Das @-Zeichen vor mail unterdrückt Verbindungsfehler
$versandt = @mail($email_empfaenger, $subject, $mailbody, "From: $email");

if($versandt) header("Location: /anfreundsenden/antwort.php?name=".urlencode($name));
//eigene Fehlerausgabe
else $meldung[] = "Verbindungsprobleme! Versuche Sie es später noch einmal.<br /><br />";

}


}


?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Einen Freund informieren</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<link href="/css/bst.css" rel="stylesheet" type="text/css" media="all"/>
</head>
<body>

<div align="left" style="margin-left: 40px;">

<h3>An Freund senden:</h3>
<?php

if(is_array($meldung)){
echo implode("<br />", $meldung);
}

?>
<form action="/anfreundsenden/index.php" method="post">

<p>
<!-- HTML-nachricht -->
<input type="text" size="50" name="uri" value="http://www.meineseite.de<?=str_replace("%_%", "?", $_GET['adresse'])?>" disabled="1" />
<br /><br />
Link an Freund senden: http://www.meineseite.de<?php echo $link_adresse; ?>
</p>
<p>Ihr Name *<br />
<input type="text" name="name" value="<?php echo $name; ?>" maxlength="50" size="50" />
</p>
<p>
Ihre E-Mail Adresse *<br />
<input type="text" name="email" value="<?php echo $email; ?>" maxlength="50" size="50" />
</p>
<p>E-Mail Adresse des Empf&auml;ngers*<br />
<input type="text" name="email_empfaenger" value="<?php echo $email_empfaenger; ?>" maxlength="50" size="50" />
</p>
<p> Nachricht *<br />
<textarea name="nachricht" cols="50" rows="5" wrap="virtual"><?php echo $nachricht; ?></textarea>
<br /><br />
<input type="submit" name="button" value="versenden" />
</p>
</form>

</div>

</body>
</html>
 

pepepy

Becks Apfel (Emstaler Champagner)
Registriert
20.06.06
Beiträge
332
inder Mail kommt nur das an:
--------------------------------------
Einen Freund informieren:


pepe
mit textfeld "uri" und hiddenfeld

Ciao
--------------------------------------

Woran kann es liegen?, ich bin schon am verzweifeln.

Gruß
pepe
 

Hilarious

Gelbe Schleswiger Reinette
Registriert
10.08.05
Beiträge
1.759
Wenn ich das richtig interpretiere, hast Du Formular, welches per POST die Adresse an das Folgescript übermittelt:
Code:
<input type="text" size="50" name="uri" value="http://www.meineseite.de<?=str_replace("%_%", "?", $_GET['adresse'])?>" disabled="1" />

Im Folgescript, welches die Mail zusammenstellen soll, steht Dir also die Zeichenkette der URL im Feld $_POST['uri'] zur Verfügung.

Hier verwendest Du allerdings die Variable $link_adresse:
Code:
//Formulardaten empfangen
$link_adresse = str_replace("%_%", "?", $_GET['adresse']);

Wenn Du stattdessen den oben genannten Wert aus der Feldvariable $_POST verwendest, sollte es gehen:
Code:
//Formulardaten empfangen
$link_adresse = $_POST['uri'];

ABER: Die von Dir verwendete Programmierung eignet sich für alle möglichen bösen Dinge, die man sich im Zusammenhang mit E-Mails denken kann.
 

pepepy

Becks Apfel (Emstaler Champagner)
Registriert
20.06.06
Beiträge
332
Ich habe jetzt so viel probiert, dass ich gar nichts mehr weiss.
Fakt ist nur, ich kann einfach die blöde Adresse der Seite A, die Seite B (Formular)
weiter gegeben wurde, nicht dazu bewegen in der Mail aufzutauchen.
Sollte eigentlich kein Ding sein. Oder?

Ich bin ratlos :-c
Mag aber noch nicht aufgeben. Was könnte ich noch anstellen?
 

dahui

Carmeliter-Renette
Registriert
22.10.06
Beiträge
3.303
Was könnte ich noch anstellen?

öhm z.b. aufhören was hilarious schreibt

ABER: Die von Dir verwendete Programmierung eignet sich für alle möglichen bösen Dinge, die man sich im Zusammenhang mit E-Mails denken kann.

und überlegen ob du es wirklich brauchst

ansonsten finden sich bei google unmengen an informationen und fertigen scripts ;)

IMHO nutz das wie gesagt eh keiener, mal ehrlich hast du sowas schon mal genutzt im www?
 
  • Like
Reaktionen: Hilarious

pepepy

Becks Apfel (Emstaler Champagner)
Registriert
20.06.06
Beiträge
332
Wenn das funktioniert, kann ich es immer noch verwerfen. Ich werde mal weiter suchen.
 

pepepy

Becks Apfel (Emstaler Champagner)
Registriert
20.06.06
Beiträge
332
O.k. hier der Code. Aber Ihr habt natürlich Recht, es ist sher unsicher.
 

Anhänge

  • SeiteB_anfreunsenden.php.zip
    2 KB · Aufrufe: 51

Toddy

Wohlschmecker aus Vierlanden
Registriert
10.05.04
Beiträge
242
O.k. hier der Code. Aber Ihr habt natürlich Recht, es ist sher unsicher.

Ein Problem ist schonmal, dass du die Variable "$email_empfaenger" nicht definierst zu Beginn deines Scripts (z.B.
Code:
$email_empfaenger = trim($_POST['email_empfaenger']);
).

Ob das des Rätsels Lösung ist kann ich leider nicht sagen, da ich das Script derzeit nicht testen kann.

Bye

EDIT:

Gleiches gilt für die Variablen "$link_uri" und "$link", die du im Mailbody verwendest. Wo werden diese mit Informationen gefüllt?

EDIT 2: (Ich sollte erst posten, wenn ich mir alles angeschaut habe *g*)

Dein Textfeld "uri" ist auf "disabled" gestellt, dann übergibt es natürlich auch keine Informationen.
Was du wahrscheinlich möchtest ist das "readonly" Attribut.

Näheres siehe:
http://www.w3.org/TR/1999/REC-html401-19991224/interact/forms.html#adef-readonly
http://www.w3.org/TR/1999/REC-html401-19991224/interact/forms.html#disabled
 
Zuletzt bearbeitet:

pepepy

Becks Apfel (Emstaler Champagner)
Registriert
20.06.06
Beiträge
332
Ein Problem ist schonmal, dass du die Variable "$email_empfaenger" nicht definierst zu Beginn deines Scripts

Den $email_empfaenger habe ich genau so angelegt wie $email nur eben umbenannt und bekommen habe ich ja die Mails, nur ohne diesen Link.

Dann muss es noch was Anderes sein.