HTML Anker & Paramter
Bernd
- html
- php
Hallo,
warum funktioniert dieses nicht?
Tags <a class="Tags" href="#inlineTags&id=<?php echo htmlspecialchars($array['id']); ?>" >[Edit]</a>
Durch Klick auf [Edit] soll ein Fenster aufgehen
<div id="inlineTags" style="display:none;" class="test">
<h2>Tag hinzufügen</h2>
<form method="post" id="tagInsert">
<label for="titel">Bezeichnung</label>
<input type="text" name="titel" id="titel" value="" required>
<input type="hidden" name="artikel" value="">
<input type="hidden" name="user" value="<?php echo $user->id; ?>">
<button id="eintragen">Speichern</button>
</form>
</div>
Entferne ich &id=<?php echo htmlspecialchars($array['id']); ?> geht das Fenster wieder auf. Ich benötige die ID denn auf einer Seite können mehrere Einträge stehen.
Was mache ich falsch?
@@Bernd
Tags <a class="Tags" href="#inlineTags&id=<?php echo htmlspecialchars($array['id']); ?>" >[Edit]</a>
Kontextwechsel beachten: Das &
sollte escapet werden: &
.
Was mache ich falsch?
Ich vermute, du hast kein Element mit der ID 'inlineTags&<was in $array['id'] steht>'.
LLAP 🖖
Hallo Gunnar,
ich habe die <?php echo htmlspecialchars($array['id']); ?> entfernt und die ID händisch gesetzt, leider geht auch weiterhin das Fenster nicht auf, daran lag es also nicht?
Tags <a class="Tags" href="#inlineTags&artikel=258">[Edit]</a>
Hallo Gunnar,
Ich vermute, du hast kein Element mit der ID 'inlineTags&<was in $array['id'] steht>'.
ich glaube jetzt verstehe ich was du meinst
Tags <a class="Tags" href="#inlineTags&artikel=258">[Edit]</a>
Die oben genannte ID weicht von dieser ab
<div id="inlineTags" style="display:none;" class="test">
Lässt sich da etwas dynamisches machen? Ich benötige die ID für ein Insert in die Datenbank, welches ich mit Ajax realisiert habe. Auf einer Seite können mehrere Einträge mit einer jeweils eindeutigen ID vorkommen.
EDIT - 15:09 Uhr
Habe ich die Möglichkeit eine data-id duch Klick auf einen Link
Tags <a class="Tags" data-id="id-40" href="#inlineTags&artikel=258">[Edit]</a>
in ein
<input type="hidden" name="data" value="">
zu schreiben? Dann wäre mein Problem denke ich mal gelöst.
OK, ich denke ich bin auf dem richtigen Weg? Ein Data Attribut kann ich so auslesen
$( "#testLink" ).click(function() {
$("#data").val($(this).data('item-id'));
});
Tags <a class="Tags" data-item-id="id-40" id="testLink" href="#inlineTags&artikel=258">[Edit]</a>
Denke ich viel zu kompliziert, oder geht es auch einfacher / besser / schneller?
Natürlich muss dieses so lauten
Tags <a class="Tags" data-item-id="id-40" id="testLink" href="#inlineTags">[Edit]</a>
Hi,
warum funktioniert dieses nicht?
Tags <a class="Tags" href="#inlineTags&id=<?php echo htmlspecialchars($array['id']); ?>" >[Edit]</a>
Weil vermutlichst die Reihenfolge falsch ist - erst kommen Parameter, erst dann der Fragment Identifier. Wenn das &id... Zeug nicht Teil des Fragment Identifiers sein soll, muß das vor dem # stehen. Und vermutlich auch nicht mit &, sondern mit ? beginnend.
cu,
Andreas a/k/a MudGuard
Hallo MudGuard,
das war auch meine erste Idee, allerdings geht dann eine neue Seite auf und nicht wie bis jetzt die fancybox. Deshalb sollte ich die rechtlichen Parameter ans Ende setzen.
Lieber Bernd,
href="#inlineTags&id=<?php echo htmlspecialchars($array['id']); ?>"
in einer URL ist Dein Maskierungskontext nicht HTML, sondern URL, Du benötigst anstelle von htmlspecialchars
die Funktion rawurlencode
. Wie eine URL genau aufgebaut ist, also in welcher Reihenfolge welche Bestandteile stehen müssen, wurde ja schon kritisiert, trotzdem lohnt ein Blick bei Wikipedia: Uniform_Resource_Locator#Schema_(scheme).
Liebe Grüße,
Felix Riesterer.
Hallo Bernd,
für dein Anliegen,
Tags <a class="Tags" href="#inlineTags&id=<?php echo htmlspecialchars($array['id']); ?>" >[Edit]</a>
gibt es zwei Möglichkeiten:
Tags <a class="Tags" href="?id=<?php echo htmlspecialchars($array['id']); ?>#inlineTags">Edit</a>
wobei die mitgegebene ID dann in den HTML-Code fürs Formular eingesetzt und dieses Formular angesprungen/mit CSS eingeblendet wird:
#inlineTags { display: none; }
#inlineTags:target { display: block; }
<form method="post" id="inlineTags">
<fieldset><legend>Tag hinzufügen</legend>
<label for="titel">Bezeichnung</label>
<input type="text" name="titel" id="titel" value="" required>
<input type="hidden" name="artikel" value="">
<input type="hidden" name="user" value="<?php echo htmlspecialchars($_GET['id']); ?>">
<button id="eintragen">Speichern</button>
</fieldset>
</form>
function setId(theId) {
document.getElementById('user').value = theId;
document.getElementById('inlineTags').style.display = 'block';
}
Tags <button class="Tags" onclick="setId(<?php echo htmlspecialchars($array['id']); ?>)">Edit</button>
Viele Grüße
Robert
Lieber Robert,
auch Du verwechselst htmlspecialchars
mit rawurlencode
. Du musst doch dem Kontext entsprechend maskieren! Und der ist eben gerade nicht HTML, sondern URL!
Liebe Grüße,
Felix Riesterer.