Autor Beitrag
mats
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45



BeitragVerfasst: Do 22.11.18 17:55 
Hallo,

ich hab da ein Problem. Eingabefelder sollen die Daten des Kunden einsammeln, beim abschicken die deutschen Umlaute durch Escape-Sequenzen ersetzen und übers Netz in eine MySQL-Datenbank eingetragen werden. Ich habe eine Funktion geschrieben, die alle Umlaute ersetzt, und auf der Serverseite im Prinzip das Gegenstück in PHP, dann wird der String in die einzelnen Variablen geteilt und in die DB eingetragen.
Dazu benutze ich (auf Delphiseite) eine CharList = ['ä', 'ö', 'ü', 'Ä', 'Ö', 'Ü', 'ß', ' ', ',']; Doch was ist mit dem Hochkomma/Apostroph. Das nimmt der Compiler nicht -> ...,''',... ?
Da dachte ich, ich könnte es über eine MaskEdit machen. Das gleich während der Eingabe ausgesondert wird (wie NumbersOnly) oder reguläre Audrücke benutzen?
Vielleicht hab ich's auch zu kompliziert gemacht. Aber es muß in Delphi und PHP (Serverseite) funktionieren.

Hat jemand eine Idee? Vielleicht?

mats
Symbroson
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 381
Erhaltene Danke: 67

Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
BeitragVerfasst: Do 22.11.18 20:06 
Man kann in Delphi Hochkommas durch doppelte Ausführung 'escapen':

ausblenden Delphi-Quelltext
1:
Writeln('''Hello World'''); // 'Hello World'					

_________________
most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2165
Erhaltene Danke: 399

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Fr 23.11.18 12:30 
Guten Tag mats,

stell' deinen header im PHP-Skript, sowie das Charset in der Datenbank auf dieselbe Kodierung, wie z.B. UTF8 ein, dann ersparst du dir auf allen Seiten das Enkodieren und Dekodieren der Umlaute.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
mats Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45



BeitragVerfasst: Sa 24.11.18 10:12 
Hallo Frühlingsrolle,

das hab ich auch schon probiert, hat aber nicht geklappt (meine Schuld), deshalb bin ich ja auf das Hin- und Her mit den 'blöden' Umlauten gekommen. Es sind ja letztlich nicht nur die Umlaute. Als da währen noch alle Sonderzeichen, Leerzeichen usw., was der User so alles eingeben kann.
(Ich hab auch schon daran gedacht, den kompletten String mit Base64 quasi einzupacken und auf der Serverseite wieder auszupacken)
Ich hab noch nicht alle Ausnahmen und/oder Möglichkeiten durchgespielt, welche für meine Aufgaben die Beste ist.
In der DB jedenfalls sind alle Textfelder Varchar + UTF8. Und die Memo's/Edit's in Delphi stellen die Umlaute etc. korrekt dar. Das Problem liegt in der Übertragung. Vielleicht kann ich den zu übertragenden String durch einen HTML-Parser bearbeiten lassen. Hab aber jetzt noch keine Idee dazu. Z.Z. läuft es mit den Ausnahmen -> siehe oben Charlist, ganz gut, aber eben nicht optimal.
Und wenn Menschen Software benutzen, gibt es immer welche, die einen Punkt suchen um den Hebel ansetzen zu können!

mats
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2165
Erhaltene Danke: 399

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: So 25.11.18 01:26 
Eventuell fehlt dir vor dem $_POST ein einfaches htmlspecialchars()?!

Ich habe hier ein Beispiel, indem eine MySQL Datenbank, sowie eine Tabelle und ein Datensatz über ein PHP Skript angelegt wird, welches über Delphi (Indy Komponenten) abgeschickt wird:

ausblenden volle Höhe PHP-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
<?php
  
    header('Content-Type: text/html; charset=utf-8');
  
    $host = "localhost";
    $user = "root";
    $pwd = "";
    $db = "frdb";
    $table = "t_dummy";
  
    $connect = mysqli_connect($host$user$pwd);
    if ($connect)
    {
        #mysqli_set_charset($connect,"utf8");
    
        $sql = "CREATE DATABASE IF NOT EXISTS " . $db;
        mysqli_query($connect$sql);
        mysqli_close($connect);
    
        $connect = mysqli_connect($host$user$pwd$db);
        if ($connect)
        {
            #mysqli_set_charset($connect,"utf8");
    
            $sql = "CREATE TABLE IF NOT EXISTS " . $table . " (
                    ID INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
                    Nachname VARCHAR(10) NOT NULL
                    )"
;
            mysqli_query($connect$sql);
            mysqli_close($connect);
      
            $connect = mysqli_connect($host$user$pwd$db);
            if ($connect)
            {
                #mysqli_set_charset($connect,"utf8");
        
                $lastname = mysqli_real_escape_string($connect$_POST['lastname']);
                $sql = "INSERT INTO " . $table . " VALUES (NULL, '{$lastname}');";
                if (mysqli_query($connect$sql))
                {
                    echo "Hat funktioniert";
                }
                else
                {
                    echo mysqli_error($connect)
                }
                mysqli_close($connect);
            }
        }
    }
?>

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
var
  php: TStringList;
  echo: string;
begin
  php := TStringList.Create;
  try
    php.Values['lastname'] := 'MüllerXY';
    echo := IdHTTP1.Post('http://localhost/PHP_DB_Demo/frDummy3.php', php);
    ShowMessage(echo);
  finally
    php.Free;
  end;
end;

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
mats Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45



BeitragVerfasst: Mo 26.11.18 07:54 
Hallo Frühlingsrolle,

das mit dem Header in PHP hatte ich schon gemacht, zeigte aber keine direkten Auswirkungen. Die htmlspecialchars() hatte ich nicht, muß ich ausprobieren. Ich habe auch die Indy-Komponente benutzt, aber ich habe es nicht hinbekommen, die Stringlist (die ja quasi wie datei.php?Anhang funktioniert) anzuhängen. Die übergebenen Variablen konnte ich auf der Serverseite nicht auswerten. Deshalb habe ich einen ganz langen String zusammengesetzt, lassen den durch meinen Filter laufen und hänge in ran. Serverseitig ($KundenID = @$_GET['KundenID'];).
Es ist noch nicht aller Tage Abend, man lernt NIE aus.

Danke

mats