# AJAX daten via POST senden?



## unrealzero_php (13. Februar 2009)

Hallo zusammen

Versuche gerade ein Formular mit mehreren Feldern über AJAX abzusenden und in einer PHP-Datei auszulesen. 

Das Absenden des Formulars ist soweit kein Problem. 

Wie kann ich jedoch die POST-Daten aus in der PHP-Datei auslesen, gibt es überhaupt eine Möglichkeit dafür oder müssen alle Daten mit JavaScript ausgelesen und mit GET an die PHP-Datei weitergegeben werden?


----------



## Maniac (13. Februar 2009)

Du Daten welche du per Formular an PHP schickst, werden in einem Superglobalen Array gespeichert. Zugriff darauf bekommst Du: 

```
//komplettes array
$_POST

// einzelnes inputfeld mit dem name-attribut aufgerufen:
$_POST['name']
```


----------



## unrealzero_php (13. Februar 2009)

Maniac_81 hat gesagt.:


> Du Daten welche du per Formular an PHP schickst, werden in einem Superglobalen Array gespeichert. Zugriff darauf bekommst Du:
> 
> ```
> //komplettes array
> ...



Nach dem Absenden des Formulars werden die Daten in der Funktion ShowContent() über getElementById() ausgelesen und anschliessend über die URL an das PHP-Script weitergegeben. Somit ist kein Auslesen über $_POST mehr möglich. 

Wie kann der ganze Inhalt des Formulars an formcontent.php weitergegeben werden? 

Gibt es eine Möglichkeit, die Formulardaten über POST weiterzugeben?

```
function ShowContent()
{
    textfeld1 = document.getElementById('textfeld1').value;
    
    resObjekt.open('get','formcontent.php?textfeld1='+textfeld1,true);
    resObjekt.onreadystatechange = ShowOutput;
    resObjekt.send(null);
}

function ShowOutput()
{
    if(resObjekt.readyState == 4)
    {
        document.getElementById(content).innerHTML = resObjekt.responseText;
    }
}
```


----------



## SCIPIO-AEMILIANUS (13. Februar 2009)

unrealzero_php hat gesagt.:


> Gibt es eine Möglichkeit, die Formulardaten über POST weiterzugeben?
> 
> ```
> function ShowContent()
> ...


Einfach das get in 

```
resObjekt.open('get','formcontent.php?textfeld1='+textfeld1,true);
```
durch ein post ersetzen und dann diese gesendeten Werte mit $_POST  im php Script wieder abfangen.

SIehe auch hier:
Ajax Tutorial


----------



## unrealzero_php (13. Februar 2009)

SCIPIO-AEMILIANUS hat gesagt.:


> Einfach das get in
> 
> ```
> resObjekt.open('get','formcontent.php?textfeld1='+textfeld1,true);
> ...



Gibt es keine Möglichkeit den gesamten POST-Array abzufangen bzw. weiterzuleiten. Muss ich zwingend jeden einzelnen Inputfeld angeben.


----------



## Sven Mintel (13. Februar 2009)

unrealzero_php hat gesagt.:


> Gibt es keine Möglichkeit den gesamten POST-Array abzufangen bzw. weiterzuleiten.


 Nein


unrealzero_php hat gesagt.:


> Muss ich zwingend jeden einzelnen Inputfeld angeben.


ja

...dies übrigens per GET auch nicht anders.


----------



## unrealzero_php (13. Februar 2009)

Sven Mintel hat gesagt.:


> Nein
> ja
> 
> ...dies übrigens per GET auch nicht anders.


Also macht es überhaupt keinen Sinn ein Formular über AJAX abzusenden weil die Daten ohnehin in JavaScript erst abgefangen und anschliessend über GET bzw. POST wieder versendet werden müssen?

Wie sieht es mit Feldern aus welche bzw. 1500 Zeichen enthalten - funktioniert es da auch noch?


----------



## Sven Mintel (13. Februar 2009)

unrealzero_php hat gesagt.:


> Wie sieht es mit Feldern aus welche bzw. 1500 Zeichen enthalten - funktioniert es da auch noch?



Ein Limit gibt es per GET, da dürftest du mit 1500 Zeichen evtl. schon in Grenzbereiche stossen.
Per POST spielt es keine Rolle.

Was den Sinn betrifft...was das alleinige Senden des Formulars betrifft, bietet AJAX keinen Zugewinn. Der Vorteil liegt halt darin, dass die aktuelle Seite erhalten bleibt.

Ein Workaround ohne AJAX und umständliches Verarbeiten der Formularfelder wäre das Senden des Formulars in ein verstecktes iFrame. Auch aus diesem iFRame heraus kannst du dann das Ursprungsdokument manipulieren.


----------



## EvilO (13. Februar 2009)

Hi,

POST Daten können eine (fast) beliebige Größe habe, desshalb macht es bei Formularen durchaus Sinn, diese mittels POST zu schicken.


----------



## unrealzero_php (13. Februar 2009)

Sven Mintel hat gesagt.:


> Ein Limit gibt es per GET, da dürftest du mit 1500 Zeichen evtl. schon in Grenzbereiche stossen.
> Per POST spielt es keine Rolle.
> 
> Was den Sinn betrifft...was das alleinige Senden des Formulars betrifft, bietet AJAX keinen Zugewinn. Der Vorteil liegt halt darin, dass die aktuelle Seite erhalten bleibt.
> ...



Mein Problem ist, dass auf der Seite mehrere Formulare angezeigt werden. Nun wäre es wäre schön, wenn diese über AJAX abgesendet werden könnten. 

Das Problem ist einfach, dass ich nicht für jedes Formular eine JavaScript Funktion schreiben kann welche die entsprechenden Input-Felder des jeweiligen Formulars enthält.

Hast du sonst noch eine Idee wie so etwas umgesetzt werden könnte (ohne iframe)?


----------



## Sven Mintel (13. Februar 2009)

unrealzero_php hat gesagt.:


> Das Problem ist einfach, dass ich nicht für jedes Formular eine JavaScript Funktion schreiben kann welche die entsprechenden Input-Felder des jeweiligen Formulars enthält.



Du musst ja nicht für jedes Formular eine eigene Funktion schreiben, es reicht eine einzige, welche aus beliebigen Formularen die Daten zusammensucht


----------



## unrealzero_php (13. Februar 2009)

Sven Mintel hat gesagt.:


> Du musst ja nicht für jedes Formular eine eigene Funktion schreiben, es reicht eine einzige, welche aus beliebigen Formularen die Daten zusammensucht



Und wie können diese Daten zusammengesucht werden, alle möglichen Formularfelder (mehr als 90) mit if prüfen? 

```
If(document.getElementById('name').value != '')
{
}
```


----------



## SCIPIO-AEMILIANUS (13. Februar 2009)

Du könntest allen Input Feldern den selben CLASS Namen zuweisen und dann anschließend mit zum Beispiel folgender Funktion abfragen:

```
var el=document.getElementsByClassName("inputclass");
var i=0;
var u=0;
while(i<el.length)
{
if(el[i].value=="")
{
u++;
}
i++;
}
if(u>0)
{
alert("Es sind nicht alle Felder ausgefüllt!");
}
```


----------

