Supportnet / Forum / Webseiten/HTML
Link automatisch öffnen wenn Stelle im Code erreicht
Frage
Hallo,
ich hab folgendes Problem: Ich hab ein PHP Skript und will das wenn eine Bedingung erfüllt ist also zBsp $wert==1 automatisch ein Link geöffnet wird wenn möglich noch im selben Fenster.
Ich muss sagen mit Header() hab ich es schon versucht aber das geht irgendwie nicht.
Danke
Antwort 1 von Obsus
if ($wert==1) header("Location: http://www.example.com");
Wichtig ist, daß vorher kein einziges Zeichen ausgegeben wird. Weder durch PHP (z.B. echo) noch durch direkten HTML-Code in der PHP-Datei wie z.B. "<html>".
Grund: "Location" ist ein Header und muß mit den anderen Headern gesendet werden. Sobald eine PHP-Datei anfängt etwas auszugeben (außer natürlich mit der header()- oder setcookie()-Funktion), beendet der Webserver die Headerausgabe und beginnt mit dem HTTP-Body, in dem das HTML-Dokument gesendet wird. Und wenn ein Header erst im Body gesendet wird, reagiert der Browser nicht mehr entsprechend darauf.
Antwort 2 von namtar
Ja danke aber das geht halt in meinem Fall ni.
Weil er öffnet ne Datei ließt nen Wert aus und je nach dem wie der dann is soll die seite geöffnet werden oder eben nicht
Weil er öffnet ne Datei ließt nen Wert aus und je nach dem wie der dann is soll die seite geöffnet werden oder eben nicht
Antwort 3 von Obsus
Kein Problem! Dateien kann er öffnen, soviel er möchte. Er darf nur nichts an den Browser abschicken!
Berichtigung zu oben:
Wenn es zu spät ist, wird der Headerbefehl vom Server ignoriert, da er nichts brächte und nur im Dokument stören würde.
Berichtigung zu oben:
Wenn es zu spät ist, wird der Headerbefehl vom Server ignoriert, da er nichts brächte und nur im Dokument stören würde.
Antwort 4 von namtar
Jo aber er öffnet die Datei aber erst nach eingabe des Users also wird die Siete aufgebaut gewartet bis der User klickt dann die Datei geöffnet und dann halt die If-Schleife und da geht das ja mit Header ni :(
Antwort 5 von Obsus
Das kommt mir komisch vor. Ich kenne keine interaktiven PHP-Skripte. Kannst Du mal genauer erklären, wie Du das machst? Also das Warten mit der Ausgabe, bis der User sich entschieden hat?
Antwort 6 von namtar
So mein ich das ni also.
Also es ist ein Textfeld da trägt er seinen Namen ein drückt Enter dann wird die Datei geöffnet geguckt ob zBsp der Name da drin steht und dann ein Rückgabewert erhalten. Dieser wird dann halt in einer If-Schlefie ausgewertet und bei erfolg soll halt zBsp der Link öffnen, klar?
Also es ist ein Textfeld da trägt er seinen Namen ein drückt Enter dann wird die Datei geöffnet geguckt ob zBsp der Name da drin steht und dann ein Rückgabewert erhalten. Dieser wird dann halt in einer If-Schlefie ausgewertet und bei erfolg soll halt zBsp der Link öffnen, klar?
Antwort 7 von Obsus
Jo. Aber dann versteh ich Dein Prob weiterhin nicht. Durch das Abschicken des Formulars wird doch das Skript (welches unter Form/Action adressiert wird) neu gestartet. Und dieses Skript hat dann noch keine Ausgabe gemacht, kennt aber schon den Input vom User ..
Antwort 8 von namtar
<?php
session_set_cookie_params(60);
session_start();
if(!session_is_registered(´user_ip´)){
$gimps= mt_rand(0,5);
$fp=@fopen("http://www.example.com/...","r");
if ($fp)
{
while ($data = fgets ($fp,1024))
{
$line .= $data;
}
fclose($fp);
}
$werte = split("[|]",$line);
$wert1 = $werte[0];
if($wert1== "9001")
{
session_register(´user_ip´);
header("Location: http://www.google.com");
}
?>
so sieht jetzt mein code aus der über allem steht und so funzt es halt nicht
session_set_cookie_params(60);
session_start();
if(!session_is_registered(´user_ip´)){
$gimps= mt_rand(0,5);
$fp=@fopen("http://www.example.com/...","r");
if ($fp)
{
while ($data = fgets ($fp,1024))
{
$line .= $data;
}
fclose($fp);
}
$werte = split("[|]",$line);
$wert1 = $werte[0];
if($wert1== "9001")
{
session_register(´user_ip´);
header("Location: http://www.google.com");
}
?>
so sieht jetzt mein code aus der über allem steht und so funzt es halt nicht
Antwort 9 von Obsus
Dann liegt das Prob woanders. Ich kann keine Ausgabe vor header() erkennen. Hast Du mal geprüft, ob die Bedingung "if($wert1== "9001")" überhaupt erfüllt wird? Und öffnest Du die Datei wirklich auf einem fremden Server? Sonst solltest Du einen lokalen Dateipfad verwenden.
Antwort 10 von namtar
ja bedinung wird erfüllt und datei is auch auf nem andern server.
das probvlem is nur wenn ich den code davor schreibe kommt fehler auf der letzen code zeile also </html>
nehm ich die große if-schleife raus gehts
das probvlem is nur wenn ich den code davor schreibe kommt fehler auf der letzen code zeile also </html>
nehm ich die große if-schleife raus gehts
Antwort 11 von Obsus
Wie lautet denn die Fehlerbeschreibung? Und wie lautet die betreffende Codezeile? "</html>" ist ja kein PHP-Code. Entweder Du beendest den PHP-Tag vorher ("?>") oder Du schreibst
echo "</html>";Antwort 12 von namtar
Parse error: parse error in /home/www/web532/html/index.php on line 205
und das ist die letzte zeite der datei und halt </html>
und das ist die letzte zeite der datei und halt </html>
Antwort 13 von Obsus
Bei mir kommt ne andere Fehlermeldung, wenn innerhalb von <?php ?> ein "nackter" HTML-Tag steht:
Deswegen bin ich mir jetzt nicht sicher ob das bei Dir der Fall ist. Nach Deiner Beschreibung fällt mir aber keine andere Ursache ein. Abhilfe wäre wie in Antwort 11 beschrieben.
Die Angabe der Zeilennummer stimmt bei PHP leider nicht immer mit den Zeilen der Textdatei überein. Aber wenn, dann ist sie zu klein, z.B. wenn man irgendwo das zeilenabschließende ";" vergessen hat aber nie zu groß. Das würde ich also als verwirrendes Moment ausschließen.
Zitat:
Parse error: parse error, unexpected ´<´ in .. on line ..
Parse error: parse error, unexpected ´<´ in .. on line ..
Deswegen bin ich mir jetzt nicht sicher ob das bei Dir der Fall ist. Nach Deiner Beschreibung fällt mir aber keine andere Ursache ein. Abhilfe wäre wie in Antwort 11 beschrieben.
Die Angabe der Zeilennummer stimmt bei PHP leider nicht immer mit den Zeilen der Textdatei überein. Aber wenn, dann ist sie zu klein, z.B. wenn man irgendwo das zeilenabschließende ";" vergessen hat aber nie zu groß. Das würde ich also als verwirrendes Moment ausschließen.
Antwort 14 von namtar
Ich hab doch den Tag aber schon lange beendet bevor das ganze html zeug beginnt...also irgendwie weiß ich ni weiter gibts vielleicht noch ne ander lösung mit JS oder so?
Antwort 15 von Obsus
Poste doch mal den ganzen Code.
Antwort 16 von namtar
das sind 200 zeilen...haste ne mail oder sowas oder icq damit wir da n bissel schneller vorwärts kommen nur deswegen jetzt.
Antwort 17 von namtar
Ich bin für alle Vorschläge offen auch von Java usern
Antwort 18 von Obsus
Stell den Code doch als Textdatei ins Netz.
Antwort 19 von namtar
http://web532.xtraserver.de/eiche/index.txt
die if schleife am anfang hab ich in komentare gesetzt damit es wenigstens läuft also kannste dir weg denken die kommentar zeichen
die if schleife am anfang hab ich in komentare gesetzt damit es wenigstens läuft also kannste dir weg denken die kommentar zeichen
Antwort 20 von Obsus
Du hast vergessen die geschweifte Klammer aus Zeile 4 zu schließen:
<?php
session_set_cookie_params(60);
session_start();
if(!session_is_registered(´gimpy_ip´)){
$gimps= mt_rand(0,5);
$fp=@fopen("http://www.gimpy.de/gsc/send/?pbnsckey=e74e959475a1768582942f1c4cace770&accpwd=242c91850e655f478a9d57a7d14436dc&appkey=e2562a16b62349b86f1978e3b123e1b3&nuggetuser=".$user."&anzahl=".$gimps."&acrypt=1","r");
if ($fp)
{
while ($data = fgets ($fp,1024))
{
$line .= $data;
}
fclose($fp);
}
$werte = split("[|]",$line);
$wert1 = $werte[0];
if($wert1== "9001")
{
session_register(´gimpy_ip´);
header("Location: http://www.google.com");
}
} // <------------ !!!!
?>
Antwort 21 von namtar
DANKE!! war wie immer nur ne Kleinigkeit. Hast du das selbst gesehn oder hast du nen Debugger den de mir empfehlen kannst?

