# JavaScript - PHP - Datenaustausch



## dennisnowack (2. August 2005)

Also,

ich progge grad nen Browsergame mit PHP. Sämtliche Vorabberechnungen und Fehlerabfragen von Formularen händle ich mit Javascript - bis jetzt meisterhaft. Nur hier bekomme ich ein Problem:

?php
[...] //Datenbank und Session abfragen
?>

<form action="" method="post" name="UE">   //Hier das Formular, allerdings müsste ich den Wert der Größe ebenfalls übermitteln
<br>Schild in Schiff einbauen:<br>

<select name="schild">
 <option value=''>Schild
 <?
 $i=1;
 while ($i < ($num + 1))
 {
 echo "<option value=".$i." (1)>".$i."</option>";
 $i++;
 }
 ?>
 </select>
[...] $groesse[$j]= $fa2["groesse"]     //dafür die Übergabe der Größe-Werte der Schilde aus der Datenbank in ein Array
[...] //irrelevant
<input type="button" name="st1" value="einbauen" ONCLICK="validateForm()"></p>
</form>

//Jetzt folgt der Javascript-Teil an dem von der passenden Stelle aus dem Array der Wert der Größe zu dem vom User gewählten Schild aus dem Drop-Down-Menü gezogen werden soll
<script LANGUAGE="JavaScript"><!--
document.UE.name.focus();
function validateForm()
{
[...] //einige andere Fehlerabfragen
if (okSoFar==true) //d.h.:wenn alle eingaben korrekt sind
  {
    var tmp = schild.value  //von form()
    var z = 0
    <? $wert=0;?>            //php eingebunden
      while (z < tmp)
      {
        <? $wert++;?>         //$wert soll effektiv den selben wert erhalten wie tmp, also schild.value, damit ich die passende Größe zum Schild zur Weiterverarbeitung abfragen kann
        z++
      }
    if (confirm("Die Größe beträgt "+ <?= $groesse[$wert];?> + "!"))   //nur vorläufig, zum prüfen
    {
        //window.close();
        submit();
    }
  }
 }
}
// --></script>


Soo, weshalb in aler Welt ist nun $wert IMMER 1? die while-schleife wird nur EIN mal durchlaufen, denn wenn ich in der Schleife $wert um 5 hochzähle, dann tut er dies auch, aber eben nur EIN mal. Dumme Frage, ist die Syntax der Schleife falsch Müsste doch eingentlich ne Fehlermeldung geben... Hoffe, mir kann geholfen werden....

Ach ja, 
2.) mit window.close kann ich ja ein Browser-Fenster schließen. Nur kommt dann immer ein Bestätigungsfenster. Gibt es einen befehl, mit dem ich es ohne Bestätigung schließen kann?
und
3.) Kann ich eine Seite per befehl einfach nur "refreshen"? also, nicht per link-weiterleitung, da vieeele php include() befehle mit samt Frames drinnne sind und das dan nicht klappt, schon probiert.

Danke für eure Unterstützung, nach diesem part werde ich mich dann wieder leidenschaftlich dem PHP-Hauptteil zuwenden


----------



## con-f-use (2. August 2005)

Mir scheint dir ist nicht ganz klar wie PHP und JavaScript funktionieren. PHP wird ausschließlich auf dem Server ausgeführt!

   Es läuft so: 

 Der User will eine PHP-Seite aufrufen. Der Browser schickt eine Anfrage nach der Seite an den Server. Der Server durchläuft den PHP-Code und schickt dann reines HTML (mit JavaScript) an den Browser des Users zurück. Der führt die JavaScripts aus und das war's. 

 Will sagen zu der Zeit, wo das JavaScript ausgeführt wird ist nix mehr mit PHP. Du kannst keine PHP-Anweisungen in eine JavaScript-While-Schlife einfügen und erwarten, dass sie dann als wären sie JS-Anweisungen ausgeführt werden! Der Server sieht da nur einmal $wert = 0 und setzt die Variable, dann sieht er $wert++ und erhöt sie um eins auf 1 und das bevor das JavaScript überhaupt an den User gesendet wurde. 

 Wenn du Werte von JavaScript an PHP übergen willst musst du sie nach Ausführen des JavaScripts entweder über ein (verstecktes) Formular, dass du dann absendest oder über die URL (mittels eines virtuellen Bildes oder eines verstecken Frames, dessen src du änderst) zurück an den Server übergeben, wo PHP ein weiters mal läuft. Andere Möglichkeiten gibt es nicht.

 zu 2.) Nein, das Besätigungs-Fenster ist zur Sicherheit desjenigen, der im Internet surft da und es wäre kontraproduktiv, wenn man es umgehen könnte. Bei manchen Browsern kommt aber kein Bestädigungs-Fenster, bei anderen z.B. dem IE kommt es je nach Sicherheiteinstellungen nur, wenn du es von der lokalen Festplatte aufrufst, nicht aber wenn du es auf einem Server im WWW liegen hast.

    zu 3.) location.reload()


----------



## dennisnowack (3. August 2005)

Danke erst mal für deine Hilfe.

Das mit Server-Client war mir schon klar, sonst hätte ich mich janicht für Java-Script entschieden... ;-)

Aber ich war fälschlicherweise der Meinung, dass bei jedem Schleifendurchlauf eine Server-Anfrage gesendet wird, den PHP-Part auszuwerten, nicht dass dies zuerst geschieht.

Okay, nur wie genau bekomme ich jetzt die Schildgrösse übergeben, die derzeitig in einem Array steckt und je nach Auswahl des Users eines Schildes logischerweise variiert? Ich muss ja vorher prüfen, ob genug Platz auf dem Schiff ist. Könnte jemand meinen Code insofern verbessern oder etwas hinzufügen? Ich zerbreche mir schon den Kopf daran...
Ich dachte schon an "hidden" feldern mit der Grösse als Wert, aber da ist das Problem der Namensgebung, ich kann ihnen irgendwie keine "Ziffernn-Namen" zuteilen und andernfalls würden sie alle gleich heissen, was auch schlecht wäre.. und mehr als einen Value kann ich ja nicht bei einem <option> - Feld übergeben, nicht wahr?

Danke für jede Hilfe im Voraus,

Dennis


----------



## Sven Mintel (3. August 2005)

Hallo,..

Du benötigst ein PHP-Skript, welches dir die nötige Information zurückgibt.
Per XMLHttpRequest kannst du eine Anfrage an dieses Skript senden und die Antwort auswerten.
Ein kleines Beispiel dazu findest du hier: http://www.tutorials.de/forum/showthread.php?p=1103261#post1103261
Diese Methode funktioniert mit IE5+(bei aktiviertem ActiveX), Geckos, Opera und Safari.

Eine andere Möglichkeit...welche über das Senden von Formularen arbeitet, findest du hier: http://www.tutorials.de/tutorials202670.html


----------

