# php - applet Kommunikation



## olindia (29. Jun 2011)

Ich versuche seit längerem variablen von einem applet an php zu übertragen. Ich habe mich im Internet Kundig gemacht und habe ein Programm gefunden, welches eine variable über die url versendet. zunächst schreibe ich "http://localhost/eins/applet.php". Dann wird das Programm ausgeführt. Ich kann nun einen Text in ein Textfeld des Applets eingeben. Wenn ich speichern klicke, sollte der Text als Variable an php übertragen werden. Astattdessen erscheint folgende Fehlermeldung im Fenster:

Objekt nicht gefunden! 

Der angeforderte URL konnte auf dem Server nicht gefunden werden. Der Link auf der verweisenden Seite scheint falsch oder nicht mehr aktuell zu sein. Bitte informieren Sie den Autor dieser Seite über den Fehler. 

Sofern Sie dies für eine Fehlfunktion des Servers halten, informieren Sie bitte den Webmaster hierüber. 

Error 404
[...]​
Außerdem steht in der url nun: „http://localhost/eins/php.php?var1=1“ (diese Verzeichnis ist natürlich nicht gespeichert auf dem Server)

hier der Programmcode für php

```
<APPLET CODE="test.class" WIDTH="600" HEIGHT="450">
<?php
$var1 = $HTTP_GET_VARS["var1"];
$datei = fopen("datei.txt", "a");
fputs($datei, $var1);
fclose($datei);
?>
```



Und hier der Programmcode für Java

```
import java.applet.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
 
public class test
extends Applet
implements ActionListener
{
// Variablen
TextField tf;
Button bu;
// Ende Variablen
 
public void init() {
setLayout(new BorderLayout());
// Komponenten
tf = new TextField("");
bu = new Button("schreiben");
bu.addActionListener(this);
//Ende Komponenten
this.add(tf, BorderLayout.CENTER);
this.add(bu, BorderLayout.SOUTH);
}
 
// Ergeignisse
public void actionPerformed(ActionEvent aevt) {
try {
URL home = getCodeBase();
String url = home.toString()+"php.php?var1="+tf.getText();
getAppletContext().showDocument(new URL(url));
} catch(Exception x) {}
}
// Ende Ergeignisse
}
```

vielen Dank für eure Hilfe im Voraus!


----------



## Volvagia (29. Jun 2011)

404 bedeutet, dass er die Datei nicht finden konnte. btw. warum verwendest du nicht die URL-Klasse?


----------



## L-ectron-X (29. Jun 2011)

Ich würde den PHP-Part noch weiter verkleinern und mit Parametern (
	
	
	
	





```
getParameter()
```
) arbeiten.


----------



## r.w. (29. Jun 2011)

In Zeile 30 Deines Applets erzeugst Du eine Url.
Ersetze dort "php.php?" durch "applet.php?",
dann sollte die Datei gefunden werden.

BTW: Die php-datei würde ich, auch wenn sie
hier so funktionieren mag, eher als halbgar 
bezeichnen. Du solltest Dich eventuell mal 
über den Aufbau einer HTML-Datei schlau machen.
Auch php-dateien sollten gültigen HTML-Code erzeugen.
wenn ein Browser das Zielmedium ist.

VG ROlf


----------



## r.w. (29. Jun 2011)

L-ectron-X hat gesagt.:


> Ich würde den PHP-Part noch weiter verkleinern und mit Parametern (
> 
> 
> 
> ...



Ich bin gespannt, wie du den PHP-Code zum Schreiben 
des Wertes in eine Datei mit getParameter() noch weiter 
verkleinern möchtest. ;-)


----------



## L-ectron-X (30. Jun 2011)

Jo, haste Recht, mein Fehler...


----------



## olindia (3. Jul 2011)

Vielen Dank für eure Hilfe zunächst mal! Es funktioniert nun wenn ich „applet.php“ anstatt „php.php“ schreibe =).

Rolf, du hattest recht als du gesagt hast, dass die Datei halbgar ist. Das ganze funktioniert in einem anderen Zusammenhang schon nicht mehr (unten). Was muss ich anders machen? Tut mir Leid wenn ich schon wieder frage, aber ich verstehe nicht, wie ich diesen winzigen code Umstrukturieren soll (er besteht ja aus nicht viel mehr als [die variable holen], [eine Datei öffnen], [die variable in die Datei schreiben], [die Datei wieder schließen])



```
<?php

$Benutzername = "datei";
$userdatei = fopen($Benutzername.".txt","r");
while(!feof($userdatei))
   {
   $zeile = fgets($userdatei,1024);
   
   $zerlegen = explode("|", $zeile);

echo "Passwort = ";
echo $zerlegen[0];
echo "<br \>";
echo "var_1 = ";
echo $zerlegen[1];
echo "<br \>";
echo "var_2 = ";
echo $zerlegen[2];
echo "<br \>";
echo "var_3 = ";
echo $zerlegen[3];

   }
fclose($userdatei);
?>

<HTML>
<APPLET code="test.class" width="1000" height="600">
<PARAM name="message" value="<?php echo $zerlegen[0] ?>">
</APPLET>
</BODY>
</HTML>

<?php
$var1 = $_GET["var1"];
$datei = fopen("datei.txt", "w+");
fputs($datei, $var1);
fclose($datei);
?>
```



Ich kann dem Applet zwar Daten zuschicken, jedoch kann ich später keine Daten zurückschicken.

hier die Fehlermeldung

Notice: Undefined index: var1 in*/opt/lampp/htdocs/eins/Politivity/applet.php*on line*35

Warning: fopen(datei.txt) [function.fopen]: failed to open stream: Permission denied in*/opt/lampp/htdocs/eins/Politivity/applet.php*on line*36

Warning: fputs() expects parameter 1 to be resource, boolean given in*/opt/lampp/htdocs/eins/Politivity/applet.php*on line*37

Warning: fclose() expects parameter 1 to be resource, boolean given in*/opt/lampp/htdocs/eins/Politivity/applet.php*on line*38​

@ L-ectron: tut mir Leid, dass ich zu blöd war den fetten roten Text zu lesen. Diesmal habe ich die javatags eingefügt (ich hoffe ich habs richtig gemacht)


----------



## Volvagia (3. Jul 2011)

Theoretisch, aber der PHP-Tag wäre wohl die bessere Wahl gewesen. :lol:

Permission denied bedeutet Zugriff verweigert, also dass PHP keine Rechte hat in die Datei zu schreiben bzw. eine neue anzulegen. Die anderen beiden Fehler ergeben sich dann durch den Rückgabewert, weil PHP so extrem häßlich untyp-safe ist, also kein FilePointer sondern eine boolean wegen des Fehlers zurückkommt.


----------



## r.w. (4. Jul 2011)

Grob betrachtet macht Dein PHP-Skript Folgendes:

1. Erster PHP-Teil:
   Die Datei zeilenweise eingelesen und im Array $zerlegen gespeichert.
   -> gäbe es mehr als eine Zeile wäre aufgrund der while-Schleife nur
      die letzte Zeile im Array vorhanden, da es immer wieder überschrieben wird.
   -> Da Du aber die Datei immer komplett überschreibst (mit nur einer Zeile),
      kannst Du in Zeile 5 "while" durch "if" ersetzen.

2. HTML-Teil:
   Das Applet wird geladen und diesem das Array $zerlegen als Parameter übergeben.

3. Zweiter PHP-Teil:
   Hier wird versucht, den dem Skript beim Aufruf übergebenen Parameter "var1" 
   in der Datei zu speichern. Da dieser Parameter beim ersten Aufruf sehr wahrscheinlich 
   noch nicht übergeben wird, ist dort das Array $_GET noch leer und Du erhältst den Fehler 
   "Undefined index: var1".

Insgesamt sieht es so aus, dass Du schon Werte in die Datei zu schreiben versuchst, 
bevor Du im Applet die Gelegenheit hättest, welche zu erfassen. Da müsste man den Ablauf
im PHP-Skript noch einmal überdenken. ;-)

Die Fehler bezüglich des Speicherns der Datei resultieren, wie Volvagia schon schrieb,
aus einer fehlenden Schreibberechtigung in dem Verzeichnis. Und das ist auch gut so.
Denn man sollte nie von einem Skript aus Dateien in einem Verzeichnis ändern, in denen
das Skript die Berechtigung "Ausführen" besitzt. Für solche Dateien legt man separate 
Ordner an und vergibt dort maximal die Berechtigung "lesen/schreiben", aber nie "ausführen".

Wenn Du den Code des Applets posten würdest (dürfte ja nicht allzu groß sein), könnte 
ich Dir ggf. einen Vorschlag für die PHP-Datei machen.

VG ROlf


----------



## olindia (7. Jul 2011)

Unten der Java Code (vereinfacht). Der Benutzer des Programms soll die Größe des Balkens einstellen können und sie danach speichern können. Das Programm kann nun schon die Größe des Balkens aus der Datei entnehmen, jedoch nicht die eingestellte Größe in der gleichen Datei speichern.


```
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
import java.net.*;
import java.applet.*;


public class test extends Applet 
	implements AdjustmentListener, ActionListener {
	
	private Scrollbar s1;
	private float value1;
	static float barValue;
	private Button save;
	static int b=1;

public void init() {
	
	s1 = new Scrollbar(Scrollbar.HORIZONTAL, 34, 1, 0, 100);
	add(s1);
	s1.addAdjustmentListener(this);
	
	Button save = new Button ("    SAVE    ");
	add(save);
	save.addActionListener(this);

}

public void paint(Graphics g) {
	
	if (b==1) {
		value1 = Integer.parseInt(this.getParameter("Message"));
		b=2;
		}
	
	g.drawString("" + value1, 100, 100);
	barValue = (int) ((value1 / 100) * 245);
	g.drawString("" + (int) barValue, 567, 563);
	g.drawRect(567, (545 - (int) barValue), 25, (int) barValue);	
}
				
public void adjustmentValueChanged(AdjustmentEvent e) {
	value1 = s1.getValue();
	repaint();
}

public void actionPerformed(ActionEvent event){
try {
URL home = getCodeBase();
String url = home.toString()+"applet.php?var1="+value1;

getAppletContext().showDocument(new URL(url));
} catch(Exception x) {}
repaint();
}
}
```


----------

