web-dev-qa-db-fra.com

Envoi de données POST sans formulaire

Puis-je envoyer par exemple une chaîne ou une autre information à un autre fichier .php sans qu'il soit exposé [donc pas par GET mais par POST conforme à ce que je sais] sans utiliser de formulaire?

29
Samuel

Si vous ne voulez pas que vos données soient vues par l'utilisateur, utilisez une session PHP.

Les données d'une demande de publication sont toujours accessibles (et manipulables) par l'utilisateur.

Checkout ce tutoriel on PHP Sessions.

22
Stephen Holiday

Vous pouvez utiliser AJAX pour envoyer une demande POST si vous ne voulez pas de formulaires).

En utilisant la méthode jquery $. Post c'est assez simple:

$.post('/foo.php', { key1: 'value1', key2: 'value2' }, function(result) {
    alert('successfully posted key1=value1&key2=value2 to foo.php');
});
17
Darin Dimitrov

Envoyez vos données avec SESSION plutôt que de poster.

session_start();
$_SESSION['foo'] = "bar";

Sur la page où vous recevez la demande, si vous avez absolument besoin de données POST (une logique étrange), vous pouvez le faire quelque part au début:

$_POST['foo'] = $_SESSION['foo'];

Les données de publication seront valides comme si elles avaient été envoyées avec POST.

Détruisez ensuite la session (ou désactivez simplement les champs si vous avez besoin de la session à d'autres fins).

Il est important de détruire une session ou de désactiver les champs, car contrairement à POST, SESSION restera valide jusqu'à ce que vous la détruisiez explicitement ou jusqu'à la fin de la session du navigateur. Si vous ne le faites pas, vous pouvez observer des résultats étranges. Par exemple: vous utilisez sesson pour filtrer certaines données. L'utilisateur active le filtre et obtient des données filtrées. Après un certain temps, il revient sur la page et s'attend à ce que le filtre soit réinitialisé, mais ce n'est pas le cas: il voit toujours les données filtrées.

9
Gregor

jetez un oeil à la documentation php pour ces fonctions que vous pouvez envoyer post-requête en les utilisant.

fsockopen()
fputs()

ou utilisez simplement une classe comme Zend_Http_Client qui est également basée sur des connexions de socket.

a également trouvé un exemple soigné en utilisant google ...

5
Andreas Linden

Utilisez simplement: file_get_contents()

// building array of variables
$content = http_build_query(array(
            'username' => 'value',
            'password' => 'value'
            ));
// creating the context change POST to GET if that is relevant 
$context = stream_context_create(array(
            'http' => array(
                'method' => 'POST',
                'content' => $content, )));

$result = file_get_contents('http://www.example.com/page.php', null, $context);
//dumping the reuslt
var_dump($result);

Référence : ma réponse à une question similaire:

4
wpcoder
function redir(data) {
  document.getElementById('redirect').innerHTML = '<form style="display:none;" position="absolute" method="post" action="location.php"><input id="redirbtn" type="submit" name="value" value=' + data + '></form>';
  document.getElementById('redirbtn').click();
}
<button onclick="redir('dataToBeSent');">Next Page</button>
<div id="redirect"></div>

Vous pouvez utiliser cette méthode qui crée un nouveau formulaire caché dont les "données" sont envoyées par "post" à "location.php" lorsqu'un bouton [Page Suivante] est cliqué.

0
user11713698