Bernd: HTML Anker & Paramter

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?

akzeptierte Antworten

  1. @@Bernd

    Tags <a class="Tags" href="#inlineTags&id=<?php echo htmlspecialchars($array['id']); ?>" >[Edit]</a>
    

    Kontextwechsel beachten: Das & sollte escapet werden: &amp;.

    Was mache ich falsch?

    Ich vermute, du hast kein Element mit der ID 'inlineTags&<was in $array['id'] steht>'.

    LLAP 🖖

    --
    “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
    1. 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&amp;artikel=258">[Edit]</a>
      
    2. 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&amp;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&amp;artikel=258">[Edit]</a>
      

      in ein

      <input type="hidden" name="data" value="">
      

      zu schreiben? Dann wäre mein Problem denke ich mal gelöst.

      1. 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&amp;artikel=258">[Edit]</a>
        

        Denke ich viel zu kompliziert, oder geht es auch einfacher / besser / schneller?

        1. Natürlich muss dieses so lauten

          Tags <a class="Tags" data-item-id="id-40" id="testLink" href="#inlineTags">[Edit]</a>
          
  2. 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

    1. 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.

  3. 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.

  4. 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:

    • Ein weiterer HTTP-Roundtrip durch
    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>
    
    • Setzen der ID und Einblenden des Formulars mit JavaScript:
    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

    1. 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.