wake-up-neo.com

Wie übergebe ich POST Parameter in einer URL?

Grundsätzlich denke ich, dass ich nicht kann, wäre aber sehr froh, wenn ich mich als falsch erweisen würde.

Ich erstelle dynamisch ein HTML-Menü in PHP und füge für jeden aktuellen Benutzer einen Eintrag hinzu, so dass ich so etwas wie <a href="process_user.php?user=<user>>, aber ich bevorzuge POST GET.

Gibt es eine Möglichkeit, die Informationen als POST) - Parameter zu übergeben, anstatt sie über einen anklickbaren HREF-Link abzurufen?


Update: sorry, ich darf JS nicht benutzen - ich hätte sagen sollen, mein böser


Update auf das Update: Es sieht so aus, als ob @Rob auf "steht. Sie könnten eine Schaltfläche anstelle eines Ankers verwenden und die Schaltfläche einfach so gestalten, dass sie wie ein Link aussieht. Auf diese Weise können Sie Ihre Werte in ausgeblendeten Feldern innerhalb desselben Formulars anzeigen per Post verschickt werden "

36
Mawg

Sie können ein als Link gestaltetes Formular verwenden, für das kein JavaScript erforderlich ist:

<form action="/do/stuff.php" method="post">
    <input type="hidden" name="user_id" value="123" />
    <button>Go to user 123</button>
</form>

CSS:

button {
    border: 0;
    padding: 0;
    display: inline;
    background: none;
    text-decoration: underline;
    color: blue;
}
button:hover {
    cursor: pointer;
}

Siehe: http://jsfiddle.net/SkQRN/

44
Petah

Parameter in der URL sind GET-Parameter, ein Anforderungshauptteil, falls vorhanden, sind POST data. Ihre Grundvoraussetzung ist also per Definition nicht erreichbar.

Sie sollten wählen, ob POST oder GET basierend auf der Aktion. Beliebige destruktive Aktion, dh etwas, das den Status des Servers dauerhaft ändert (Löschen, Hinzufügen, Bearbeiten) ) sollte immer von POST Anfragen aufgerufen werden. Jeder reine "Informationsabruf" sollte über eine unveränderliche URL (dh GET Anfragen) erreichbar sein.

Um eine POST Anfrage zu stellen, müssen Sie ein <form>. Sie könnten verwenden Javascript, um stattdessen eine POST) Anfrage zu erstellen, aber ich würde nicht empfehlen, Javascript für etwas so Grundlegendes zu verwenden Link, ich würde vorschlagen, dass Sie ein normales Formular mit einer normalen Senden-Schaltfläche erstellen, dann CSS verwenden, um die Schaltfläche neu zu formatieren, und/oder Javascript verwenden, um die Schaltfläche durch einen Link zu ersetzen, der das Formular mit Javascript sendet (je nachdem, was das gewünschte Verhalten reproduziert) Das wäre ein gutes Beispiel für progressive Verbesserung.

13
deceze

Sie können den Link veranlassen, eine Ajax-Post-Anfrage auszuführen, wenn er angeklickt wird.

In jQuery:

$('a').click(function(e) {
   var $this = $(this);
   e.preventDefault();
   $.post('url', {'user': 'something', 'foo': 'bar'}, function() {
       window.location = $this.attr('href');
   });
});

Sie können den Link auch veranlassen, ein POST Formular mit Javascript einzureichen

<form action="url" method="post">
   <input type="hidden" name="user" value="soemthing" />
   <a href="#">CLick</a>
</form>
<script>
$('a').click(function(e) {
   e.preventDefault();
   $(this).parents('form').submit();
});
</script>
11
Rob

Ich möchte auch meine Implementierung mitteilen. Es erfordert allerdings etwas Javascript.

<form action="./index.php" id="homePage" method="post" style="display: none;">
<input type="hidden" name="action" value="homePage" />
</form>
<a href="javascript:;" onclick="javascript:
document.getElementById('homePage').submit()">Home</a>

Das Schöne daran ist, dass im Gegensatz zu GET-Anfragen die Parameter in der URL nicht angezeigt werden, was sicherer ist.

7
Aris

Nein, das kannst du nicht. Ich lade Sie ein, eine POST Definition zu lesen: http://en.wikipedia.org/wiki/POST_%28HTTP%29

oder diese Seite: http://en.wikipedia.org/wiki/GET_%28HTTP%29#Request_methods

5
zzarbi

Zunächst ein Disclaimer: Ich halte es nicht für eine großartige Idee, POST mit URL-Parametern) zu heiraten verstecktes Formular zur Weitergabe von Benutzerinformationen.

Eine Frage hat mich jedoch neugierig gemacht, wie PHP) mit einem solchen Fall umgeht. Es stellte sich heraus, dass dies theoretisch möglich ist. Hier ein Beweis:

post_url_params.html

<!DOCTYPE html>
<html>
    <head></head>
    <body>
        <form method="post" action="post_url_params.php?key1=value1">
            <input type="hidden" name="key2" value="value2">
            <input type="hidden" name="key3" value="value3">
            <input type="submit" value="click me">
        </form>
    </body>
</html>

post_url_params.php

<?php
    print_r($_POST);
    print_r($_GET);
    echo $_SERVER['REQUEST_METHOD'];
?>

Ausgabe

Array ( [key2] => value2 [key3] => value3 ) 
Array ( [key1] => value1 ) 
POST

Man kann deutlich sehen, dass PHP speichert URL-Parameter in der Variablen $ _GET und Formulardaten in der Variablen $ _POST. Ich vermute, es ist sehr PHP- und serverspezifisch, und ist definitiv kein etwas, auf das man sich verlassen kann.

5
raiks

Dies könnte funktionieren, wenn das PHP-Skript für jeden Eintrag ein Formular mit ausgeblendeten Feldern generiert und die href Javascript verwendet, um das Formular zu veröffentlichen.

2
tofutim