Verzweiflung mit Sonderzeichen auf Server?

Hallo liebe Community ...

Ich bin am Verzweifeln! Ich schreibe im Moment an einem Server-Client-Konstrukt, wo der Java Client eine POST-Request an einen online Server sendet, der die Anfrage dann per PHP und MySQL verarbeitet. In diesem Fall soll einfach nur vom Client eine Textnachricht per POST an ein PHP-Script gesendet werden, das wird dann in PHP per $_POST['Nachricht'] ausgelesen und dann in einer MySQL-Datenbank gespeichert. Und in einer anderen Anfrage wird die Nachricht aus der Tabelle wieder ausgelesen und zurückgeschickt.

Nun arbeite ich aber mit Umlauten und vlt später auch mit anderen Sonderzeichen. Ich habe es zuvor auf meinem localhost versucht und das hat wunderbar geklappt. Wenn ich das allerdings versuche das auf meinem online Server wieder auszulesen (über eine andere POST-Request) kommt sowas bei raus:

In der Datenbankansicht per PHPMyAdmin sieht das ebenfalls so aus. Wie kann ich die Umlaute auf meinem Client richtig anzeigen lassen? Ich bin verwirrt und brauche Hilfe ;-;

Zur Info:

  • Die Texte codiere ich vor dem Senden per POST mit URLEncoder.encode(text, "UTF-8")
  • im Serververzeichnis habe ich über eine ".user.ini" das default_charset auf UTF-8 gesetzt (Mastervalue ist iso-8859-1)
  • (auf meinem localhost ist beides auf UTF-8 gesetzt)
  • die Kollation meiner Server-Datenbanken habe ich glaube irgendwann mal von iso-8859-1auf utf8_general_ci umgestellt
  • als Header im php-Script habe ich noch: header('Content-Type: text/html; charset=utf-8');

Ich komme da echt durcheinander :( kann mir jemand helfen?

Vielen Dank im Voraus

Server, Computer, Technik, Java, Sonderzeichen, Datenbank, PHP, Technologie, UTF-8
3 Antworten
Performantere Alternative zu HttpURLConnection in Java?

Hallöchen 😃

Ich habe bei einem meiner Java-Programme gemerkt, dass ein Abrufen von Serververbindungen manchmal echt lange dauert.

Zur Info: Ich habe eine REST-API geschrieben, bei der ein Java-Client per HttpRequest auf ein PHP-Script zugreift und dort dann die per echo ausgegebenen Daten annimmt und verarbeitet. Nun sieht mein Code in etwa so aus (vereinfacht):

//Verbindung schaffen (eher unwichtig)
HttpURLConnection connection = (HttpURLConnection)server_url.openConnection();
connection.setDoOutput(true);
connection.setRequestMethod("POST");

//Diese eine Zeile verursacht ein längeres Warten auf eine Antwort (nachgeprüft)
BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream()));
//... es folgt Schreiben mit dem BufferedWriter und dann schließen ...

//Diese eine Zeile verursacht ERNEUT ein längeres Warten auf eine Antwort (nachgeprüft) 
Scanner response = new Scanner(connection.getInputStream());
//... es folgt Daten aus dem Scanner auslesen

Also es gibt hier zwei Zeilen, die eine ziemliche Wartezeit verursachen. Zumindest auf meinem localhost; der Rest geht erwiesenermaßen zügig, also kann es nur an den beiden liegen. Es dauert nicht ewig, aber ich würde es mal auf so zwei bis drei Sekunden schätzen.

Wenn ich auf einen Server in einem anderen Netzwerk zugreife (bplaced), dann dauert das auch manchmal ein kleines bisschen (aber nicht ganz so lange).

Das ist ja aber, denke ich mal, nicht so üblich, dass Programme, die sich an REST-APIs bedienen oder allgemein mit dem Internet arbeiten, so lange brauchen, oder? Gibt es da irgendwelche Tricks oder Alternativen, die performanter sind und wo es nicht solche langen Wartezeiten gibt oder irre ich mich hier komplett und es ist doch so üblich, dass manchmal längere Verzögerungen bei Abfragen übers Internet auftreten (was etwas schade wäre, da ich ziemlich oft solche Anfragen senden muss)?

Ich danke jedem, der helfen kann (und auch denen, die es zumindest versuchen 😄).

Server, Computer, programmieren, Java, Netzwerktechnik, PHP, Webprogrammierung
2 Antworten
Client-Server Kommunikation Java Alternative zu REST-API?

Hallo :)

Ich habe ein Java-Programm entwickelt, das per HTTPRequest auf ein PHP-Script auf einem Server zugreift, welches dann die Informationen per echo ausgibt. Diese Infos landen dann beim Client und werden verwendet. Nun Nutze ich dazu javaseitig HTTPURLConnection (oder so ... kenne den genauen Namen nicht mehr) und meine Probleme:

1.) Ich hab das Script auf meinem localhost zu testzwecken laufen und manchmal braucht der da ziemlich lange zum antworten ... obwohl es keine großen Datenmengen sind. Auch auf einem Online-Server (ich nutze BPlaced zum Test) dauert es manchmal ein wenig.

2.) Ich glaub das Verfahren wird REST-API genannt ... wenn die Infos dann per JSON ausgegeben werden. Ist das wirklich die eleganteste Lösung? Ich muss bei vielen Aktionen immer wieder aufs neue Daten abfragen und da dauert das dann oft mal ziemlich lange zwischendurch. Ausserdem ist die Script-Anwendung dann ja von jedem quasi erreichbar ... und wenn wirklich nur bestimmte Clients drauf zugreifen sollen ... ist das dann gut so/sicher wie ichs mache?

Gibt es da Wege, die besser für sowas geeignet wären? Also nochmal zum Sinn des Programms: Ich will mir von einem Client aus Daten von einem Server runterziehen und damit arbeiten und die Anfragen sollen auf dem Server in einer bestimmten Weise verarbeitet werden (unter anderem durch Zugriff auf Datenbanken). Ich hab die Serverseitige Arbeit einem PHP-Script überlassen ... ich wäre aber auch mit einer serverseitigen Java-Lösung einverstanden oder auch anderen Alternativen ... nur raus damit ;D.

Ich danke im Voraus :)

Server, Computer, Netzwerk, programmieren, Java, Datenübertragung
3 Antworten
Java GridBagLayout Komponenten hinzufügen?

Hallo ... ich habe vor in einer Java Swing-Anwendung zur Laufzeit (anhängig von der Benutzereingabe) einige Komponenten zu einem GridBagLayout in einem JPanel, welches sich wiederum in einem JScrollPane befindet hinzuzufügen. Nun sieht der Code so aus:

JPanel panel = new JPanel();
JScrollPane scrollPane.setViewportView(panel);
GridBagLayout gbl = new GridBagLayout();
gbl.columnWidths = new int[]{0, 0, 0};
gbl.rowHeights = new int[] {0, 0, 0, 0, 0, 0, 0};
gbl.columnWeights = new double[]{0.0, 1.0, Double.MIN_VALUE};
gbl.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
panel.setLayout(gbl_panel);

Das hat mir der Java-WindowBuilder zusammengeschrieben. Zur info ... ich habe danach 5 Labels und daneben Textboxen hinzugefügt und mir wurde das so in der Art gezaubert (halt nur 5 mal und noch mit Textboxen):

JLabel lbl = new JLabel("Irgendwas");
GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.EAST;
gbc.insets = new Insets(0, 0, 5, 5);
gbc.gridx = 0;
gbc.gridy = 0;
panel.add(lbl, gbc);

Wenn ich nun aber dynamisch eine Komponente hinzufüge, mit

GridBagConstraints gbc = new GridBagConstraints();
...
panel.add(label, gbc);

dann wird das neu Label irgendwo in der Mitte zwischen dem letzten Label und dem unteren Rand ders Panels angezeigt. (hab auch schon panel.revalidate/repaint) aufgerufen). Aber ich hätte das gern gleich unter dem letzten Label angezeigt. Ich glaube das liegt an der Zeile

gbl.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};

Da wird scheinbar die Zeilenanzahl festgelegt oder? Ich weiß es nicht :D. Also wie kann ich es nun hinkriegen, dass das Label ordnungsgemäß angezeigt wird?

Ich würde mich über Hilfe sehr freuen :)

Danke im Voraus

Computer, programmieren, Java, Swing
1 Antwort
MySQL Tabellen voneinander trennen innerhalb einer Datenbank?

Hallihalllo ... ich habe eine Datenbank für ein Projekt erstellt und will lediglich damit arbeiten, also keine andere Datenbank verwenden. Nun lassen sich durch ein PHP-Script dynamisch Tabellen in dieser Datenbank erstellen. Allerdings sollten diese zumindest dem Anwender des Scripts so erscheinen, als würden sie getrennt in Ordnern vorliegen. Da man sowas wie Ordner ja nicht bei MySQL realisieren kann habe ich mir gedacht, dass man ja einfach die Namen der Datenbanken mit dem gedachten Ordnernamen am Anfang versehen könnte, sodass sich eine gedachte hierarchische Struktur ergibt. Allerdings sollte der Nutzer die Namen selber festlegen können und dabei muss natürlich auch die maximale Länge der Tabellennamen (64 zeichen soweit ich weiß) beachtet werden. Die Namen gehen aber oft über diese 64 Zeichen hinaus. Nun meine Frage: gibt es eine Funktion/ein Verfahren in PHP, womit man die Namen der Tabellen verkürzen oder Komprimieren kann? Ich dachte da an sowas wie password_hash() aus PHP, bloß dass es mir einen String ohne großartige Sonderzeichen zurückgibt. Der String sollte auch nicht länger als 30 zeichen sein (32 sind schon zu viel). So könnte ich dann eine Tabelle erstellen, die die Abkürzungen den Namen der Tabellen zuordnet. Wie könnte ich das anstellen? Oder gibt es vielleicht sogar eine einfachere Lösung die Tabellen hierarchisch zu sortieren?

Ich wäre dankbar für mehrere Lösungsansätze ...

Danke im Voraus :)

Computer, programmieren, Datenbank, PHP
3 Antworten
MySQL auf unterschiedliche Tabellen verweisen?

Hi :)

Ich stehe vor einem Problem: ich muss eine MySQL-Tabelle erstellen, welche eine Spalte besitzt, die Verweise auf andere Tabellen enthält. Nun kenne ich bereits im Groben die Funktionsweise von Fremdschlüsseln: ein Wert in einer bestimmten Spalte einer Haupttabelle verweist auf eine Zeile einer anderen Tabelle. Nun brauche ich allerdings eine Lösung, bei der sich die Fremdschlüssel (in einer Spalte) nicht nur auf EINE andere Tabelle beziehen, sondern auf verschiedene. Beispiel: die Tabelle "Main" enthält eine Spalte "Erweiterung" ... und dies enthält Verweise auf unterschiedliche andere Tabellen mit welchern anschließend gearbeitet werden soll. So enthält die erste Zeile beispielsweise ein "A", was sich auf die Tabelle "A" bezieht. Die zweite Zeile enthält ein "B", welches sich auf die Tabelle "B" bezieht ... allerdings haben A und B unterschiedliche Spalten.

Gibt es eine Möglichkeit mit der ich die Inhalte der Haupttabelle mit der "Erweiterung" A und den Inhalten von A/der Erweiterung B und den Inhalten von B kombinieren kann? Also im Prinzip: eine dynamische ERweiterung von Spalten, je nach Wert von "Erweiterung". Ich hatte schon den Ansatz für jede "Erweiterung" eine neu Tabelle anzulegen und diese dann auszulesen, aber wie ich das anstelle weiß ich auch nicht.

Ich hoffe ihr könnt damit was anfangen xD ... Danke im Voraus :)

Computer, sql, programmieren, Datenbank, Logik, MySQL
5 Antworten
Wie HTTPRequest JSON-Response parsen?

Jojo ich komme mit einem Javaproblem ... ich sende in Java eine HTTPRequest per HttpURLConnection an eine JSON-Datei, welche auf einem Server liegt und bekomme als Antwort halt den JSON-String. Allerdings zeigt mir Eclipse beim versuch den String zu parsen immer eine java.lang.ClassCastException an. Was soll ich tun?

Hier die JSON-Datei:

{
    "var1" : "wert1",
    "var2" : "wert2",
    "objekt1" : {
        "ob_var1": "ob_wert2",
        "ob_var2": "ob_wert2"
    },
    "objekt2" : {
        "ob_var1": "ob_wert2",
        "ob_var2": "ob_wert2"
    }
}

Hier der java-Code:

//ich nutze simple-JSONParser
import org.json.simple.parser.JSONParser;

String url = "irgendeineurl.json";
        URL obj = new URL(url);
        HttpURLConnection connection = (HttpURLConnection)obj.openConnection();
        connection.setDoOutput(true);
        connection.setRequestMethod("POST");
        
        //POST-Parameter setzen
        BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream()));
        wr.write("par1=wert1&par2=wert2");
        wr.close();
        
        //Ergebnis auslesen        
        String data = "";
        Scanner response = new Scanner(connection.getInputStream());
        while(response.hasNextLine()) data += response.nextLine();
        System.out.println(data);
        
        try {
            JSONParser parser = new JSONParser();
            JSONObject json;
//hier kommt der Fehler angeblich her
            json = (JSONObject) parser.parse(data);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        
        response.close();

programmieren, Java, json
2 Antworten