PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : $_SERVER['HTTP_REFERER'] Problem


ute
23.09.2005, 07:50:12
hallo,
ich habe ein Problem mit einem Seite-empfehlen Script, das frei im Netz steht.
Ich habe dies mit einem Link von der Seite, die empfohlen werden soll, eingebunden. Es öffnet sich dann eine neue Seite, die empfehlen.php heisst, auf der werden Name, Empfänger etc. eingetragen.
Wenn der User dies korrekt einträgt, funzt es prima, macht er bei der Email-Adresse oder beim Namen einen Fehler, wird empfehlen.php aktualisiert und der Fehler angezeigt. Das ist auch gut, aber das Problem ist, dass sich dann das empfehlen.php selbst empfiehlt. Die ursprüngliche URL wird also nicht weitergegeben.
Hier der Codeschnipsel, in dem die URL übergeben wird:
if (strpos($recommendMessage, "[REFPAGE]") !== FALSE) {
if (!isset($_SERVER['HTTP_REFERER']))
$recommendMessage = str_replace("[REFPAGE]", "(Referrer Unavailable)", $recommendMessage);
else
$recommendMessage = str_replace("[REFPAGE]", $_SERVER['HTTP_REFERER'], $recommendMessage);
}
Kann mir jemand weiterhelfen? Die weiterzugebende URL darf einfach nicht beim Aktualisieren überschrieben werden.
Ich hoffe, ich habe das klar formuliert, bin ein PHP-Newbie, kann in geringem Masz PHP lesen und weiss ungefähr, was passiert, mehr leider nicht.
Grüsse Ute

Stevie B.
23.09.2005, 09:31:16
Pack den Referer in eine Variable und gib sie in einem hidden-tag weiter.

zb.:
$referer = $_POST['referer'];
if ($referer == "") {
$referer = $HTTP_REFERER;
}
//in der form
<input type="hidden" name="referer" value="<?= $referer; ?>">

Gruß,
Stevie B.

ute
23.09.2005, 11:11:25
hallo Stevie,
ich bin grad dabei, es auszuprobieren, habe noch ein paar kleine Probs, wenns nicht klappt, stelle ich mal den gesamten Code rein.
Wie gesagt, hab nicht die PHP Kenntnisse ...
Grüsse Ute

ute
23.09.2005, 12:10:04
hallo Stevie,
ich hab alles Mögliche ausprobiert, krieg es aber nicht hin. Kannst Du mal drüberschauen und sagen, wo was hinsoll?
Hab z.B. Deinen php-Schnipsel eingefügt, alle $recommendMessage in $referer umgewandelt, das auch in die "globals" übernommen etc.
Übrigens habe ich auch ausprobiert, die URL textarea in ein input umzuwandeln, wie Du es besschrieben hast, aber dann wird garnix übergeben.
Grüsse Ute

<?php
$numFriends = 2;
$webmasterEmail = "xyz@abc.de";
$sendNotification = 1;
$subject = "Seiten - Empfehlung von [SENDER_NAME] ([SENDER_EMAIL])";

$recommendMessage = <<<EOD
[REFPAGE]
EOD;

$customMessage = <<<EOD
EOD;

$sendAsHtml = 0;

error_reporting(E_ERROR); // only stop for critical errors

/* start main */
if(!isset($_POST["action"])) {
show_form();
} else {
//begin error checking
if(trim($_POST['senderName']) == "") {
$error[] = "Sie haben Ihren Namen nicht eingef&uuml;gt.<br>";
}

$_POST['senderEmail'] = trim($_POST['senderEmail']);

if(!isValid($_POST['senderEmail'])) {
$error[] = "Bitte &uuml;berpr&uuml;fen Sie Ihre Email - Adresse.<br>";
unset($_POST['senderEmail']);
}

$validRecips = check_valid($_POST['friend']);

if($validRecips == FALSE) {
$error[] = "Bitte &uuml;berpr&uuml;fen Sie die Empf&auml;nger Email - Adresse(n).<br>";
}

if($error) {
echo "\n";
foreach($error as $oneError) {
echo "$oneError<br>\n";
}
echo "\n";

echo show_form();

} else { //no error
$subject = str_replace("[SENDER_NAME]", $_POST['senderName'], $subject);
$subject = str_replace("[SENDER_EMAIL]", $_POST['senderEmail'], $subject);

$message = trim($_POST['recommendMessage']) . "\n\n" . "\n\n" . $_POST['customMessage'] . "\n\n\n________________________________________________________________ ____\n"
. $_POST['senderName'] . " hat Ihnen diese Nachricht geschickt von http://www.xyz.de";

if($_POST['toself'] == TRUE) {
array_push($validRecips, $_POST['senderEmail']);
}

$content = ($sendAsHtml == TRUE ? "text/html" : "text/plain");
$message = stripslashes($message);

$headers = "From: " . $_POST['senderName'] . " <" . $_POST['senderEmail'] . ">\r\n";
$headers .= "Content-Type: $content";

foreach($validRecips as $recip) {
$friends .= $recip . " ";
@mail($recip, $subject, $message, $headers);
echo "Nachricht gesendet an $recip<br>\n";
}

if($sendNotification) {

$nMessage = trim($_POST['recommendMessage']) . "\n\n" . $_POST['senderName'] . " (" . $_POST['senderEmail'] . ") " . $_SERVER['REMOTE_ADDR'] . " gesendet an " . count($validRecips) . " friends ($friends).";
@mail($webmasterEmail, "Seitenempfehlung", $nMessage, "From: $webmasterEmail");
}
}
}

function check_valid($list)
{
global $errorCode;

$numElements = sizeof($list);
$goodEmails = array();

foreach($list as $single) {
if(isValid($single)) {
$goodEmails[] = $single;
}
}

if(!empty($goodEmails)) {
return array_unique($goodEmails);
} else {
return FALSE;
}
}

function show_form()
{
global $numFriends, $validRecips, $recommendMessage, $customMessage, $title;

$senderName = (!isset($_GET['sn']) ? $_POST['senderName'] : urldecode($_GET['sn']));
$senderEmail = (!isset($_GET['se']) ? $_POST['senderEmail'] : urldecode($_GET['se']));

echo "<form method=\"POST\" action=\"".$_SERVER['PHP_SELF']."\">\n"
."<input type=\"hidden\" name=\"action\" value=\"submit\">\n"
."<table border=0 align=\"center\" cellpadding=0 cellspacing=0>\n"
."\t<tr>\n"
."\t\t<td>Ihr Name:</td><td><input type=\"text\" name=\"senderName\" value=\"$senderName\" size=30 class=\"input1\"></td>\n"
."\t</tr>\n"
."\t<tr>\n"
."\t\t<td>Ihre Email:</td><td><input type=\"text\" name=\"senderEmail\" value=\"$senderEmail\" size=30 class=\"input1\"></td>\n"
."\t</tr>\n";

for($i = 1; $i <= $numFriends; $i++) {
echo "\t<tr>\n\t\t<td>Email Empf&auml;nger $i:</td><td><input type=\"text\" name=\"friend[]\" value=\"".$validRecips[$i - 1]."\" size=30 class=\"input1\"></td>\n\t</tr>\n";
}

if (strpos($recommendMessage, "[REFPAGE]") !== FALSE) {
if (!isset($_SERVER['HTTP_REFERER']))
$recommendMessage = str_replace("[REFPAGE]", "(Referrer Unavailable)", $recommendMessage);
else
$recommendMessage = str_replace("[REFPAGE]", $_SERVER['HTTP_REFERER'], $recommendMessage);
}

echo "\t<tr>\n"
."\t\t<td colspan=2 class=\"none\"><textarea name=\"recommendMessage\" cols=66 rows=2 readonly onFocus=\"this.blur()\" class=\"input1\">$recommendMessage</textarea></td>\n"
."\t</tr>\n"
."\t<tr>\n"
."\t\t<td colspan=2><br>Pers&ouml;nliche Nachricht<br><textarea name=\"customMessage\" cols=66 rows=5 class=\"input1\">$customMessage</textarea></td>\n"
."\t</tr>\n"
."\t<tr>\n\t\t<td colspan=2><input type=\"checkbox\" name=\"toself\">&nbsp;&nbsp;Kopie der Nachricht per Email an Sie schicken<br><br></td>\n\t</tr>\n"
."\t<tr>\n\t\t<td colspan=2 align=\"center\"><input type=\"submit\" value=\"senden\" class=\"input2\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type=\"reset\" value=\"l&ouml;schen\" class=\"input2\"></td>\n\t</tr>\n"
."\t<tr>\n\t\t<td colspan=2><br>Die hier eingegebenen Daten werden von uns nur dazu verwendet, die Email in Ihrem Namen zu versenden. Es erfolgt keine Weitergabe an Dritte und keine Speicherung Ihrer Angaben.<br><br><a href=\"javascript:window.close()\" class=\"link1\">Fenster schliessen</a></td>\n\t</tr>\n"
."</table>\n"
."</form>\n\n";
}
function isValid($email)
{
return eregi("^[a-z0-9\._-]+@+[a-z0-9\._-]+\.+[a-z]{2,4}$", $email);
}
?>

Stevie B.
23.09.2005, 12:44:14
Hallo Ute,


<?php
$numFriends = 2;
$webmasterEmail = "xyz@abc.de";
$sendNotification = 1;
$subject = "Seiten - Empfehlung von [SENDER_NAME] ([SENDER_EMAIL])";

Dort drüber die Deklarationen der Variablen

$referer = $_POST['referer'];
if ($referer == "") {
$referer = $HTTP_REFERER;
}



echo "<form method=\"POST\" action=\"".$_SERVER['PHP_SELF']."\">\n"
."<input type=\"hidden\" name=\"action\" value=\"submit\">\n"
...

Das mal so:

echo "<form method=\"POST\" action=\"".$_SERVER['PHP_SELF']."\">\n"
."<input type=\"hidden\" name=\"action\" value=\"submit\">\n"
."<input type=\"hidden\" name=\"referer\" value=\"".$referer."\">\n"
...



if (strpos($recommendMessage, "[REFPAGE]") !== FALSE) {
if (!isset($_SERVER['HTTP_REFERER']))
$recommendMessage = str_replace("[REFPAGE]", "(Referrer Unavailable)", $recommendMessage);
else
$recommendMessage = str_replace("[REFPAGE]", $_SERVER['HTTP_REFERER'], $recommendMessage);
}

Das ändere mal in:

if (ereg("[REFPAGE]",$recommendMessage)) {
if ($referer == "")
$recommendMessage = str_replace("[REFPAGE]","(Referer Unavailable)",$recommendMessage);
else
$recommendMessage = str_replace("[REFPAGE]",$referer,$recommendMessage);
}


Gruß,
Stevie B.

ute
23.09.2005, 15:39:41
hallo Stevie,
es tuts nicht ... entweder bekomme ich Referrer Unavailable oder überhaupt nix angezeigt. Die Deklaration der Variablen habe ich unterhalb der "globals" angeordnet, sonst tats garnicht (und bei den globals $referer mit aufgenommen).
Ich habe mind. 10 Varianten ausporbiert, Deine Angaben nochmal verändert ... das Ding will nicht
Grüsse Ute