Variable mitgeben und zur Sprungmarke springen

  • Hey,


    ich benutze folgenden Befehl um eine Variable mitzugeben und zu einer bestimmten Sprungmarke zu springen (ist auf derselben Seite):


    HTML
    <a href="Seitenname.php?aktion=abgesendet#sprung">Text </a>


    D.h. er soll die Seite wieder aufrufen, dabei die Variable aktion = abgesendet mitgeben und zur Stelle mit der id=#sprung springen.
    Er springt zwar zu der Stelle, aber die Seite wird nicht neu aufgerufen - außer beim ersten Mal, da klappts komischerweise. Klicke ich danach weiter drauf, tut sich nix mehr..


    Setze ich nur


    HTML
    <a href="Seitenname.php?aktion=abgesendet">Text </a>


    ruft er zwar die Seite neu auf und übergibt die Variable mit, aber hier fehlt eben die Sprungmarke.. sobald die drin ist, klappts nicht mehr.


    Weiß da jemand eine Lösung? Und die Seite muss leider neu aufgerufen werden, es wird ein neuer Inhalt aus MySQL reingeladen.

  • Das Problem ist ganz einfach erklärt: Die Funktionsweise von Sprungmarken prüft ob die aufgerufene Url (bis auf alles hinter #) die gleiche ist wie die aktuelle.


    datei.php unterscheidet sich von datei.php?aktion=abgesendet, also wird die Seite neu geladen und die Sprungmarke angepeilt.


    Nun ist die Adresszeile jedoch mit datei.php?aktion=abgesendet#sprungmarke gefüllt, rufen wir also datei.php?aktion=abgesendet#sprungmarke auf wird nur die Sprungmarke angepeilt ohne die Seite neu zu laden, denn nichts würde sich ändern.


    Spontan fällt mir als Lösung nur ein den Aufruf dynamisch zu gestalten, also mit einem Seed zu füllen:


    HTML
    <a href="?name=karl&seed=<?php print $seed; ?>#sprungmarke1">Absenden</a>


    Und dazu PHP:


    PHP
    $seed = 0;
    	if(isset($_GET['seed']))
    		if($_GET['seed'] == 0)
    			$seed = 1;


    Dadurch verhinderst du die gleiche URL, ich habe noch einen anderen Lösungsansatz, muss jedoch erst ein mal zum Barbier.

  • Ah, das bringt doch mal etwas Licht in die Sache.


    Ich lasse vorher sowieso jedes Mal die "$id" um eins erhöhen um bei jedem Klick dann jeweils die nächste Ausgabe aus MySQL zu bekommen.
    Das habe ich jetzt mal bei mir mit php eingebaut, funktioniert auch, also quasi das was du fürn seed vorgeschlagen hast einfach durch die sich weiter erhöhende $id ersetzt.


    Eins macht mich aber noch stutzig: In einer Übung hat die Übergabe der $id auch ohne php im Link funktioniert:


    PHP
    while ($inhalt = mysql_fetch_array($db_erg, MYSQL_ASSOC))
    {
    $id = $inhalt['id'];
    $inhalt[] = '<a href="Seitenname.php?id=$id&aktion=abgesendet">Blabla</a>';
    tabellenausgabekomplett ($inhalt);
    }



    Hover ich über den Link, steht im Befehl die richtige id, also id=2,3,4 anstatt id=$id. Hier funktioniert das also ohne


    PHP
    <?php print $id; ?>


    Liegt das vielleicht daran, weil hier der Inhalt noch mal in den Array aufgenommen wurde?

  • Das Geheimnis sind einfache und doppelte Anführungszeichen:



    In doppelten Anführungszeichen werden Variablen interpretiert, in einfachen nicht, hier wird alles als Klartext behandelt. Du erkennst es auch am Syntax Highlighting hier im Forum, in den doppelten Anführungszeichen ist $zahl blau hervorgehoben, genau wie bei der Definition 2 Zeilen höher. In den einfachen Anführungszeichen ist $zahl rot.

  • Das hat mich nun doch ein wenig mehr interessiert und ich habe einen Weg gefunden die Mechanik auszuhebeln und das Ganze zum Laufen zu bekommen.


    Bei Interesse einfach den Code in die Datei aufnehmen und entsprechende a-Tags mit class="anchor_extended" ausstatten. Alternativ ein beliebiges Element anlegen, die selbe Klasse vergeben und statt href="" data-href="" verwenden. Der Klassenname kann in Zeile 10 angepasst werden.



    Das deckt nun sehr viele Fälle ab, sicherlich nicht alle aber es reicht wohl als Denkanstoß.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!