PHP Navigation ohne das #section in der URL?
Hallo liebe Entwickler,
ich stelle mir die Frage, wie ich nach Absenden eines Formulares so navigieren kann, dass das #section in der URL nicht angezeigt wird. Zuerst ein Beispiel:
<html>
<form action="#section" method="post" id="section">
<input type="submit" value="Senden" name="sub"/>
</form>
</html>
<?php if (isset($_POST['sub'])) { doSomeStuff(); } ?>
Wenn ich also (wie im Code ersichtlich) auf Senden klicke, wird die Seite neu geladen und ich werde zu #section navigiert (also in der URL dann example.com/#section).
Besteht die Möglichkeit so zu navigieren, dass man den Abschnitt in der URL nicht sieht?
Eventuell durch JS oder etwas anderes?
Vielen Dank im Voraus.
4 Antworten
url.tld/#section
Ist nichts anderes als ein anchor-link. Sprich eine html-Verweisung. Das hat nichts mit PHP zu tun. Wenn du einen anchor mit dieser ID definierst wird der anchor-link dafür sorgen, dass der Browser beim Öffnen der Seite direkt zu diesem anchor springt.
Mehrere Optionen:
- Über .htaccess und mod_rewrite direkt eine Weiterleitungsengine implementieren.
- Bei action="" einfach die Datei angeben, in der sich das Formular befindet.
Du kannst per AJAX Formulare asynchron zur restlichen Webseite versenden.
Das sieht ebenfalls nach etwas Richtigem aus! Ich werde das mal in der Seite einbauen und schauen, welche Methode besser ist. Danke Dir!
Mir erschließt sich zwar der Sinn nicht ganz dahinter aber wenn es sein muss, kannst du in dem Antwortformular natürlich auch per JavaScript zu einer Sprungmarke gehen:
window.location.href = "#section";
Alternativ kannst du auch zu einer bestimmten ID springen:
document.getElementById("section-id").scrollIntoView();
In modernen Broesern geht das sogar flüssig:
document.getElementById("section-id").scrollIntoView({
behavior: 'smooth',
block: 'start'
});
Danke. Sowas ist zwar nicht exakt das, aber eine super Alternative. Sogar schöner :)
Warum solltest du das wollen? Normal würde man dafür erstmal gar keine Form nutzen, die abgesendet wird, sondern einen Link, der zu dieser Id springt. Dabei wird die Seite dann auch nicht neu geladen, sondern es ist lediglich ein Scrollen durch den Browser auf Clientseite. Zumindest sieht man in deinem Beispiel nicht, warum eine Anfrage an den Server gesendet werden sollte.
Davon ab möchte ggf. jemand z.B. einen Bookmark setzen für genau diesen Abschnitt der Seite. Warum solltest du ihm das erschweren, indem du die URL manipulierst und auf etwas falsches zeigen lässt?
Ansonsten kann man mittlerweile die angezeigte URL und den Pagetitel ändern oder darauf reagieren. Das ist aber vor allem für den umgekehrten Fall gedacht, sprich eine Seite die auf Ajax aufbaut, bei der man die Seite nicht neu lädt aber die URL ändern möchte, damit man beim Bookmarken und co. eben diesen geänderten State speichert.
Die entsprechenden APIs wären history.pushState bzw. das popstate.
Also zunächst einmal geht das nicht, dass man das "#section" in der URL dann verbirgt, denn es ist nun einmal Teil der URL.
Zweitens: Warum machst Du das denn über eine Form mit einem weiteren Roundtrip zum Server? Normalerweise nimmt man dafür einen normalen Link. Dann geht's ohne Neuladen der Seite...
Ohne den Anchor würde es per Javascript gehen, indem Du "scrollIntoView()" aufrufst mit dem DOM-Element, das angezeigt werden soll.
https://www.w3schools.com/jsref/met_element_scrollintoview.asp
In welchem Sinne einen normalen Link? Die Seite beinhaltet viel Content und die Form ist weit unten. Logischerweise möchte ich nach Absenden zu dieser Form scrollen/navigieren.
Ich habe mal gelesen, dass es die Möglichkeit gibt, den Submit im Hintergrund laufen zu lassen, das dann ohne neu laden wäre. Aber wie würde das dann funktionieren?
MfG
Achso, also das Formular soll abgeschickt werden und dann soll zu der angegebenen Sektion navigiert werden? Dann brauchst du natürlich ein Formular, sonst wird ja kein Formular abgeschickt.
Du kannst natürlich ein Formular auch per JavaScript abschicken (https://www.w3schools.com/jsref/met_form_submit.asp).
Super, das sieht schon mal nach etwas Richtigem aus! Danke Dir!
Ja, das hat nichts mit PHP zu tun. Allerdings würde ich gerne wissen, ob es mit PHP oder JS etc möglich wäre? Siehe mein Kommentar unter der Antwort von ohwehohach.
MfG