Per Javascript Parameter per POST an ein PHP Skript schicken

Wenn man in Javascript einem PHP Skript etwas schicken möchte so kann man dies per GET Methode machen. Das bedeutet das die Parameter an die URL des PHP Skriptes angehangen werden. Für größere Datenmengen ist die Methode POST allerdings wesentlich sinnvoller. Das Problem ist das man die Daten dann mittels eines Formulars senden muss. Das macht nicht wirklich Spaß. Einfacher geht es mit der Methode postToUrl welche ich auf Stack Overflow gefunden habe:

function postToUrl(path, params, method)
{
 method = method || "post"; // Standardmethode wird auf POST gesetzt, wenn keine andere angegeben

 var form = document.createElement("form");
 form.setAttribute("method", method);
 form.setAttribute("action", path);

 for(var key in params) {
 var hiddenField = document.createElement("input");
 hiddenField.setAttribute("type", "hidden");
 hiddenField.setAttribute("name", key);
 hiddenField.setAttribute("value", params[key]);

 form.appendChild(hiddenField);
 }

 document.body.appendChild(form);
 form.submit();
}

Die Funktion funktioniert dabei auch im allseits beliebten Internet Explorer ;)

Update: Mit dem Internet Explorer 8 macht das ganze Probleme. Die umgeschriebene Funktion mit der es in allen Browsern funktionieren sollte sieht dann so aus:

function postToUrl(path, params, method) 
{
 method = method || "post"; // Set method to post by default, if not specified.

 // The rest of this code assumes you are not using a library.
 // It can be made less wordy if you use one.
 //var form = document.createElement("select");
 var form = document.createElement("form");
 form.setAttribute("method", method);
 form.setAttribute("action", path);

 for(i=0; i<params.length; i++)
 {
 var key=i;
 
 var hiddenField = document.createElement("input");
 hiddenField.setAttribute("type", "hidden");
 hiddenField.setAttribute("name", key);
 hiddenField.setAttribute("value", params[key]);

 form.appendChild(hiddenField);
 }

 document.body.appendChild(form);    // Not entirely sure if this is necessary
 form.submit();
 return false;
}

Weitere Informationen gibt es unter:
http://stackoverflow.com/questions/133925/javascript-post-request-like-a-form-submit

Die Post kommt

Der E-Postbrief, von Post bejubelt, vom Volk geliebt. Doch ist wirklich alles Friede Freude Eierkuchen? Zwei interessante Beiträge darüber sind unter http://gutjahr.biz/blog/2010/07/die-gelbe-gefahr/ und unter http://www.heise.de/newsticker/meldung/Kritik-am-E-Postbrief-waechst-1044814.html zu finden. Dort wird beschrieben welche bösartigen (das muss man leider schon so nennen) Fallstricke in die AGBs eingebaut wurde, von nicht vorhandener Ende zu Ende Verschlüsselung mal ganz zu schweigen…

Undefined index

Gestern habe ich versucht ein kleines PHP-Skript zum laufen zu bekommen. Diesem Skript sollte eine Variable per POST übergeben werden. Im Quelltext sieht das ganze dann so aus:

$name= $_POST['name'];

Als ich versucht habe das ganze auszuprobieren erschien folgende Fehlermeldung:

Undefined index: name in C:\Development\testing\phppost.php on line 3

Das scheint den neuen PHP Versionen geschuldet zu sein. Nachdem ich das ganze mal umgeschrieben habe sah es so aus:

if (isset($_POST['name'])) $name= $_POST['name'];

Und schon funktioniert das ganze :)

Totalausfall

Heute hatte ich gerade etwas aufs NAS kopiert plötzlich fahren die Platten runter aber das NAS ist noch an. Seltsam. VNC angemacht wollte mich verbinden aber das ging wohl auch nicht mehr. Also Rechner aus und Rechner wieder an und er geht wieder an. Nach einer Weile nochmal versucht mich mit dem Rechner zu verbinden, aber Fehlanzeige. Also nochmal aus und wieder an. Plötzlich piept der Rechner. Na prima POST Fehlercodes.

Also Rechner wieder aus, Mainboard Handbuch, Diagnose Monitor, Schraubenzieher, Jumper, Werkzeugset etc rausgekramt und den Rechner geöffnet. Alles abgesteckt vom Mainboard und den Rechner wieder an und wieder piept er. Diesmal ein anderen POST Fehlercode. Also erst einmal geschaut was der Code bedeutet. Leider sind die Codes nicht so eindeutig wie man sie gerne hätte. Und auf die Grafikkarte gab das Mainboard auch nichts aus. Das Ende der Geschichte ist dann das ich nach zirka zweistündigem zerlegen des Rechners in seine Einzelteile (wobei ich entdeckt habe das einer der Festplattenlüfter nicht angesteckt war^^) den Speicher et cetera getauscht habe, das CMOS ein paar mal händisch auf dem Mainboard gelöscht habe ging der ganze Spaß dann wieder ohne das ich mir sicher bin was eigentlich die Ursache war. Irgendwie seltsam. Die NAS Daten haben das ganze im übrigen ohne Probleme überstanden.