[GastForen Programmierung/Entwicklung PHP und MySQL Ermitteln, ob "www" im Referer enthalten ist.

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

Ermitteln, ob "www" im Referer enthalten ist.

jdgf
Beiträge gesamt: 117

14. Nov 2006, 11:53
Beitrag # 1 von 14
Bewertung:
(5272 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,
manche Browser geben den Referer ohne "www" an. Daher will ich überprüfen, ob diese Zeichenfolge enthalten ist.
Beispiel für die richtige Url:
http://www.homepage-internet.de/website/index.htm
Als Ergebnis soll die Kürzung der Url so erfolgen, dass immer nur index.htm sich ergibt.

Das Script liest erst aus, ob in der Url ab Stelle 8 die Zeichenfolge www steht. Falls ja, wird die Url ab Zeichen 40 ausgelesen und falls nein ab Zeichen 36. Was ist an meinem Code falsch?
Code
define (TEXT, "www"); 
define (START, 8);
define (LAENGE, 3);
$abfrage = $_SERVER['HTTP_REFERER'];
echo $abfrage;
$stelle = strpos($abfrage, $Start, $Laenge);
echo $stelle;
if ($stelle = $text) {
$position = 40;
$seite=substr($HTTP_REFERER,$position);
}
else {
$position = 36;
$seite=substr($HTTP_REFERER,$position);
}

echo $seite;

danke und
LG Dietmar
X

Ermitteln, ob "www" im Referer enthalten ist.

oesi50
  
Beiträge gesamt: 2315

14. Nov 2006, 12:22
Beitrag # 2 von 14
Beitrag ID: #261777
Bewertung:
(5266 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen


als Antwort auf: [#261773]

Ermitteln, ob "www" im Referer enthalten ist.

jdgf
Beiträge gesamt: 117

14. Nov 2006, 12:56
Beitrag # 3 von 14
Beitrag ID: #261787
Bewertung:
(5259 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
das sieht wesentlich besser aus wie mein Script, dürfte wohl auch von einem PHP-Profi stammen.

Aber ich möchte PHP noch etwas lernen und daher interessiert mich besonders, was ich falschgemacht habe.


als Antwort auf: [#261777]

Ermitteln, ob "www" im Referer enthalten ist.

Bitfilme
Beiträge gesamt: 264

14. Nov 2006, 13:14
Beitrag # 4 von 14
Beitrag ID: #261789
Bewertung:
(5246 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Wie wärs damit?
Code
<?php 
$url = $_SERVER['HTTP_REFERER'];

echo $url;

$host = parse_url($url, PHP_URL_HOST);

/* Mit www */
if (strstr($host, "www")){
echo $host;
}
/* Ohne www */
else
echo $host;
?>



als Antwort auf: [#261787]

Ermitteln, ob "www" im Referer enthalten ist.

oesi50
  
Beiträge gesamt: 2315

14. Nov 2006, 13:18
Beitrag # 5 von 14
Beitrag ID: #261792
Bewertung:
(5244 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
ok, wenn du es "zu Fuß" machen willst, dann in etwa so:

Code
<?php 
$referer = 'http://www.homepage-internet.de/website/index.htm';

$seite = array_pop(split('/', $referer));

echo $seite;
?>



als Antwort auf: [#261787]

Ermitteln, ob "www" im Referer enthalten ist.

jdgf
Beiträge gesamt: 117

14. Nov 2006, 13:25
Beitrag # 6 von 14
Beitrag ID: #261796
Bewertung:
(5242 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
der Vorschlag gefällt mir besser, wenn er auch nicht die Antwort auf meine Frage ist.
Mir geht es eigentlich nur, ob in der Url die Zeichen www enthalten sind, ich will sie nicht zwingend entfernen.

Beim Test erhalte ich den Fehler:
parse_url() expects exactly 1 parameter

LG Dietmar


als Antwort auf: [#261789]

Ermitteln, ob "www" im Referer enthalten ist.

oesi50
  
Beiträge gesamt: 2315

14. Nov 2006, 13:54
Beitrag # 7 von 14
Beitrag ID: #261806
Bewertung:
(5238 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Mir geht es eigentlich nur, ob in der Url die Zeichen www enthalten sind, ich will sie nicht zwingend entfernen.


Welches www soll es denn so sein?

hier mal ein Beispiel, wo überall www auftreten kann:

http://www.www.de/www/www.www?www=www&#www


als Antwort auf: [#261796]
(Dieser Beitrag wurde von oesi50 am 14. Nov 2006, 13:56 geändert)

Ermitteln, ob "www" im Referer enthalten ist.

jdgf
Beiträge gesamt: 117

14. Nov 2006, 14:32
Beitrag # 8 von 14
Beitrag ID: #261813
Bewertung:
(5228 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
es fuktioniert teilweise in Opera nicht: ich habe es so abgeändert.
$seite = array_pop(split('/', $HTTP_REFERER));
echo "<a class=\"mehr\" href='".$seite."'>Zur&uuml;ck</a>

Bei meinem PC klappt es mit Opera; allerdings nicht bei einem Freund. Dort wird die index.htm- Seite verstümmelt wie x.htm zurückgegeben.

Dies tritt auf, wenn in das Adressfeld nur der Name ohne http://www. eingegeben werden. zB. hilfdirselbst.ch

Liegt das an einer Einstellung in Opera?


als Antwort auf: [#261792]
(Dieser Beitrag wurde von jdgf am 14. Nov 2006, 14:41 geändert)

Ermitteln, ob "www" im Referer enthalten ist.

jdgf
Beiträge gesamt: 117

14. Nov 2006, 14:34
Beitrag # 9 von 14
Beitrag ID: #261814
Bewertung:
(5226 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
entweder http://www.hilfdirselbst.ch
oder bei Fehlen des www =>http://hilfdirselbst.ch

Das Problem tritt auf, wenn in das Adressfeld nur der Name ohne http://www. eingegeben werden. zB. hilfdirselbst.ch


als Antwort auf: [#261806]
(Dieser Beitrag wurde von jdgf am 14. Nov 2006, 14:42 geändert)

Ermitteln, ob "www" im Referer enthalten ist.

SabineP
Beiträge gesamt: 7586

14. Nov 2006, 15:44
Beitrag # 10 von 14
Beitrag ID: #261827
Bewertung:
(5205 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo jdgf,

der Referer kann verschluckt, verstümmelt, gefälscht werden oder völlig fehlen.

Wenn Du in das Browser-Adressfeld eine URL eintippst, dann gibt es gar keinen Referer dazu.

Insgesamt ist der HTTP_REFERER eine Variable, auf die man sich überhaupt nicht verlassen kann.
(Kann da sein oder auch nicht, oder sieht nicht so aus, wie man es erwartet)

Diese Variable taugt lediglich zu statistischen Zwecken
und sollte nicht innerhalb eines Scriptes mit Bedingungen verknüpft sein.

Gruß Sabine


als Antwort auf: [#261814]

Ermitteln, ob "www" im Referer enthalten ist.

jdgf
Beiträge gesamt: 117

14. Nov 2006, 16:43
Beitrag # 11 von 14
Beitrag ID: #261835
Bewertung:
(5191 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Sabine,

es betrifft eigentlich nur die eigene Website, weil ich die Angabe für den Zurückbutton verwenden will. Normalerweise wird die Startseite der Website aufgerufen und von dort eine Unterseite angeklickt. Erst ab der Unterseite besteht die Möglichkeit, den Zurück-Button zu betätigen. Bisher funktioniert es gut mit

Code
$position = 40;		 
$seite=substr($HTTP_REFERER,$position);
echo "<a class=\"mehr\" href='".$seite."'>Zur&uuml;ck</a>";


Ab Zeichenposition 41 beginnt index.htm. Nachdem ich heute feststellte, dass es Leute gibt, die einfach den Namen einer Seite ohne http://www. eingeben, wollte ich das Problem lösen, indem ich prüfe, ob in $HTTP_REFERER die Zeichenfolge www enthalten ist. Wenn ja, bleibt die Anweisung wie oben, wenn nein, ändert sich die Variable auf 36. Dadurch ergibt sich wieder index.htm.

Beim IE gibt es gar keine Fehler, hier wird das fehlende www automatisch ergänzt. Ich weiß nicht, warum mein Code nicht läuft: Die Vorschläge im Forum wichen leider immer von meiner Anfrage etwas ab.

Gäbe es eine sicherere Lösung, würde ich sie vorziehen, aber auf PHP-Basis.

LG Dietmar


als Antwort auf: [#261827]

Ermitteln, ob "www" im Referer enthalten ist.

SabineP
Beiträge gesamt: 7586

14. Nov 2006, 16:53
Beitrag # 12 von 14
Beitrag ID: #261836
Bewertung:
(5189 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
>> es betrifft eigentlich nur die eigene Website

Auch dafür gelten alle Aussagen, die ich oben schon beschrieben hatte.
Vergiß den Referer. Da er klientabhängig ist, kannst Du serverseitig damit nichts anfangen.
Der Zurück-Button im Browser funktioniert auch ohne PHP.

Um es mal bildlich auszudrücken: Du versuchst mit einem Hammer eine Schraube in den Browser zu drehen und zwar genau an der Stelle wo sich schon eine Schraube befindet.

Gruß Sabine


als Antwort auf: [#261835]
(Dieser Beitrag wurde von SabineP am 14. Nov 2006, 16:56 geändert)

Ermitteln, ob "www" im Referer enthalten ist.

oesi50
  
Beiträge gesamt: 2315

14. Nov 2006, 17:20
Beitrag # 13 von 14
Beitrag ID: #261841
Bewertung:
(5176 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Gäbe es eine sicherere Lösung, würde ich sie vorziehen, aber auf PHP-Basis.


Ja, die gibt es. Du hängst an alle Links eine laufende Nummer an. Diese kannst du dann jeweils aus dem Query_String entnehmen.

Bsp.:

in

index.php

<a href="seite1.php?0">
<a href="seite2.php?0">


in jeder Seite muss dann der entsprechende Code hinterlegt werden.

zb. für seite1.php


Code
<?php 

$seite = 1; # ich bin also seite1.php

$alle_seiten = array();
$array[0]='index.php';
$array[1]='seite1.php';
$array[2]='seite2.php';
$array[3]='seite3.php';

$seite_nr = $_SERVER["QUERY_STRING"]

if($alle_seiten[$seite_nr]){
print '<a href=' . $alle_seiten[$seite_nr] . '?' . $seite . '">zurück</a>';
else{
print "du böser Schlingel willst meine Seite cracken, oder was anderes hat nicht funktioniert!";
exit;
}
?>



Extrem wichtig ist dabei, daß es keine Möglichkeit geben darf, den Seitennamen direkt einzugeben.
Damit wird dein Script sofort unsicher. Warum das so ist, kannst du bitte mal selbst nachdenken.


als Antwort auf: [#261835]
(Dieser Beitrag wurde von oesi50 am 14. Nov 2006, 17:22 geändert)

Ermitteln, ob "www" im Referer enthalten ist.

jdgf
Beiträge gesamt: 117

15. Nov 2006, 08:09
Beitrag # 14 von 14
Beitrag ID: #261890
Bewertung:
(5159 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Sabine, hallo Oesi,

das mit dem Zurück-Browser-Button ist richtig, aber nicht sehr komfortabel.

Der Vorschlag von Oesi klingt sehr verlockend. Ich weiß nur nicht, ob er mit unserem CMS vereinbar ist.

Danke und lG Dietmar


als Antwort auf: [#261841]
X