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

Ungültige Byte-Sequenz für Kodierung »UTF8«

Bei einer Datenbankabfrage mittels PHP auf eine PostgreSQL Datenbank kam es zu folgender Fehlermeldung:

Ungültige Byte-Sequenz für Kodierung »UTF8«

Gelöst wurde das ganze in dem die Abfrage richtig kodiert wurde:

$query=mb_convert_encoding($query, 'UTF-8', mb_detect_encoding($query, "UTF-8, ISO-8859-1, ISO-8859-15", true));

Damit konnten die Abfragen ohne Probleme an die Datenbank übergeben werden.

In PHP den Inhalt eines Arrays ausgeben

Zu Debugzwecken ist es manchmal ganz praktisch den Inhalt einer Variable (im konkreten Fall in PHP) auszugeben. Das würde unter PHP dann so aussehen:

echo $test;

Das Problem an dieser Methode ist, das wenn es sich um ein Array handelt, wir nur die Ausgabe:

Array

zurückbekommen. Hier hilft die print_r Funktion, mit welcher das ganze dann so aussieht:

print_r($test);

Damit bekommt man dann eine wunderschöne Ausgabe des Arrays:

Array ( [0] => 1232 [1] => 1775 [2] => 8532 [3] => 3432 [4] => 1232 [5] => 384 [6] => 4357 [7] => 4334 [8] => 9888 [9] => 2442 [10] => 1212 [11] => 9989 [12] => 543 )