PHP in PureBasic integrieren

Für allgemeine Fragen zur Programmierung mit PureBasic.
brigitte2018
Beiträge: 35
Registriert: 16.07.2018 11:14

PHP in PureBasic integrieren

Beitrag von brigitte2018 »

Hallo und guten Tag!

Mein Sohn hat schon einige Anwenderseiten unter PHP entwickelt. Ich möchte diese in PureBasic integrieren. Wie mache ich das am besten? - Ich komme von einer ganz anderen EDV-Welt (Multiusersysteme) und tue mich schwer. Besonders aber Grafik und Co sind für mich als Grafik-Künstler der schlimmsten Sorte ein Graus.
Jede Hilfestellung ist willkommen. Danke!

// Edit: Thema von [TUTORIAL] PB-CGI und PHP-Desktop: Routing abgetrennt (Kiffi)
Benutzeravatar
man-in-black
Beiträge: 362
Registriert: 21.08.2006 17:39

Re: PHP in PureBasic integrieren

Beitrag von man-in-black »

Hi,

was genau heißt für dich "integrieren"? Wenn es alleine um das Anzeigen der Seiten geht, schau dir einfach das Webgadget an. Damit hast du alle Anzeige- und Interaktionsmöglichkeiten, die du auch im Browser hast.
Kurz, du bist reiner Anwender und das PureBasic-Tool liegt beim Client.

Oder geht es dir um die Logik hinter der PHP-Seite? Soll heißen, du bekommst von der Anwenderseite z.B. die Login-Daten und willst mit einem PureBasic-Programm selbige empfangen, verarbeiten und wieder an den Nutzer schicken? In diesem Fall läge das PB-Programm auf dem Webserver.

@Mod: verschieben?

MFG
MIB
(hab alles, kann alles, weiß alles!!^^)

Bild
Benutzeravatar
TroaX
Beiträge: 661
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Pop_OS! | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Pop_OS!
Wohnort: NRW
Kontaktdaten:

Re: PHP in PureBasic integrieren

Beitrag von TroaX »

Wie schon von men-in-black geschrieben, kommt es stark darauf an, wie eine Purebasic-Anwendung mit PHP genutzt werden soll. Da gibt es die verschiedensten Möglichkeiten. Das Webgadget ist eine Möglichkeit, eine von PHP generierte Seite anzeigen zu lassen. Allerdings würde sich der Datenaustausch über das Webgadget und der PHP Anwendung doch ziemlich schwer gestalten. Um dies zu ermöglichen, kann man natürlich mit der HTTP-Bibliothek sich den Inhalt der PHP-Anwendung zuerst holen und dann über PureBasic auswerten lassen sowie nach der Auswertung per SetGadgetItemText an das Webgadget übergeben. Das auswerten ist aber alles andere als Trivial. Man könnte sich zwar theoretisch einen HTML Parser schreiben bzw. strikt XHTML verwenden, um die XML Bibliothek von PureBasic zu verwenden. Aber das ist alles nicht so dolle und mit viel Gefummel verbunden. In die andere Richtung (aus dem Gadget ins PB Programm z.B. aus Formularen) hingegen wird es noch schwieriger. Denn die Formulare werden in der Regel an den Server zurückgesendet und gehen dabei nicht den Umweg über das eigene PureBasic Programm. Das einzige, was mir einfällt wäre, die Ziel-URL des Formulares eines anderen Servers zu setzen und dann in PureBasic einen entsprechenden Server zu nutzen (z.B. mit nanoHTTP). Aber auch das ist ganz schön frickelig. Da sollte man sich wirklich überlegen, ob der Aufwand sich lohnt. Man muss sich das Webgadget in PureBasic wie eine Art Container vorstellen. Man hat zwar aus PureBasic Zugriff auf einige Informationen/Parameter. Aber all das bezieht sich nur auf die statischen Informationen, die zur Zeit des Seitenaufrufs in den Speicher gelangen bzw. sich im DOM befinden. Da aber Formularinhalte beim ausfüllen nicht in den DOM übernommen werden, kommt man leider über PureBasic nicht direkt heran.

Eine weitere Möglichkeit wäre es, wenn die PHP Anwendungen serialisierte Daten in Form von z.B. JSON oder XML (also Webservices) zur Verfügung stellen würde. Diese haben zwar keine grafische Benutzeroberfläche. Aber man kann über die HTTP-Bibliothek bidirektional kommunizieren. Also auch aus PureBasic heraus an die PHP Anwendung Daten senden. Dieses Vorgehen eignet sich aber wie gesagt auf Grund der fehlenden Oberfläche ausschließlich zum Datenaustausch zwischen PHP und PureBasic. Die Formulare sollten dann entsprechend mit den GUI-Möglichkeiten von PureBasic erstellt werden und sollten nicht in einem WebGadget liegen.

Als letztes wäre noch, die Möglichkeit zu nennen, den Build-In Webserver von PHP zu nutzen und dann die Kommunikation zwischen beiden über RunProgram und dem Flag #PB_Program_Read und #PB_Program_Write zu ermöglichen. Diese Variante habe ich zwar selbst noch nicht mit PHP getestet. Aber in der Theorie sollte das Möglich sein. Aber aus dem Grund, das ich es selbst noch nicht getestet habe, ist es von mir keine Empfehlung. Es sei nur zum Zwecke der Vollständigkeit erwähnt.

So lange das PureBasic-Programm nicht mit den PHP Scripts interagieren soll, empfehle ich an dieser Stelle, komplett auf PureBasic zu verzichten und einfach PHPDesktop zu verwenden. Soll aber das PureBasic-Programm mit PHP bidirektional kommunizieren, empfehle ich die HTTP-Bibliothek zu nutzen und auf das Webgadget zu verzichten. Sollen aber die PHP Seiten angezeigt werden, dann sollte man sich im klaren sein, das eigentlich nur eine einseitige Kommunikation nativ möglich ist (PHP > PureBasic). Will man auch die andere Richtung, dann muss man sich auf einen kleinen hack-Marathon einrichten. Denn ohne weitere Tricks wird das eher nichts werden. So schade das auch ist.
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Pop_OS!
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box :lol:
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
brigitte2018
Beiträge: 35
Registriert: 16.07.2018 11:14

Re: PHP in PureBasic integrieren

Beitrag von brigitte2018 »

Allerherzlichen Dank an "man-in-black" und "Troax" für die Zeit, die ihr euch genommen habt.
Ich werde eine gewisse Zeit benötigen, um das Alles zu verdauen, da mein ursprünglicher Lösungsansatz sehr stark von den Lösungsmöglichkeiten von THEOS geprägt ist.

Und das war auf einem zentralen Rechner mit einem Multiuser-Betriebssystem (mit Datenbanksystem, HTML-Server, FTP-Server usw. auf der Sprachbasis von THEOS-Basic mit Anschluss an THEOS MultiUser BASIC CGI and CGIJAVA Toolkits) und eben vielen Clients (Windows- oder Linuxrechner). Das ist aber mittlerweile unbezahlbar und es ist fraglich, ob es noch in Zukunft gepflegt wird. Ich habe über 30 Jahre damit gearbeitet.

Auch mein Denken ist somit noch sehr zentralistisch und HTML habe ich nur per eigener Software generiert (Masken, Listen, Formular als Bildschirmanzeigen und natürlich Drucke... auch in PDF) und zwar aus bereits vorgefertigten HTML-Dateien, die per Software von mir extrahiert und wieder gefüllt wurden. Das Beschicken und Abfragen von Datenbanken (eben alles mit/unter einer Programmiersprache) war überhaupt kein Problem und erheblich schneller (weil eben selbst optimierbar).

Mein grafisches Verständnis ist mehr als schlicht. Siehe Programmbeispiel! Die Aufgabenstellung des Produkts ist mir vollkommen klar, da brauche ich nicht Tag und Nacht grübeln. Als Zwischenstand hier einmal ein Datenerfassungsprogramm, welches ich mit Code vom Forum etc. gebastelt habe. Bitte nicht schimpfen, lachen ist allerdings erlaubt.

Wie könnte man das Programm peppen (z.B. Farbe usw.) und Erstellen erleichtern (z.B. Indizierung von Eingabefeldern, Positionen usw.)? - Herzlichen Dank schon einmal im Voraus!

Code: Alles auswählen

Dim daten$(100)

; Erstellen eines temporären Dateinamens.
Folder$ = "c:\zfb-exe\" ; Das aktuelle Verzeichnis erfordert > GetTemporaryDirectory()
FileName.s = Folder$+"Kontakt.txt"

File = CreateFile(#PB_Any, FileName)

; START FENSTER 1

If OpenWindow(1, 750, 220, 800, 600, "zfb-programm - Version 1.0 - Erfassen Erstkontaktdaten Teil 2", #PB_Window_SystemMenu)
  If LoadFont(0, "Arial", 9)
    SetGadgetFont(#PB_Default, FontID(0))   ; geladenen Arial 9 Zeichensatz als neuen Standard festlegen
  EndIf
  
EndIf


If CreateMenu(1, WindowID(1))
  MenuTitle("Menü")
  MenuItem(1, "Zur Seite 1 (Datenerfassung")
  MenuItem(2, "nicht aktiviert/Programm-Abbruch")
  MenuItem(3, "nicht aktiviert/Speichern")
EndIf


TextGadget(100,  10, 10,260,20, "Beziehungsstatus Klient/Meldeperson",#PB_String_ReadOnly)
ComboBoxGadget(101,  10, 30,180,20) ;rem 30,10,345,150,25
AddGadgetItem(101, -1, "Beziehungsstatus wählen!")
AddGadgetItem(101, -1, "Leibliche Mutter")
AddGadgetItem(101, -1, "Leiblicher Vater")
AddGadgetItem(101, -1, "Anderer Sorgeberechtigter")
AddGadgetItem(101, -1, "Jugendamt")
SetGadgetState(101, 0) 

TextGadget(102,    10,60,120,20, "Betreuerin(Lehrerin):",#PB_String_ReadOnly);
StringGadget(103,  10,80,150,20, "")                                         ;



TextGadget(104,     10,110,120,20, "Telefon/Betreuerin:",#PB_String_ReadOnly);
StringGadget(105,   10,130,150,20, "") 


TextGadget(136,     10,160,120,20, "Schule/Kiga usw:",#PB_String_ReadOnly);
ComboBoxGadget(137, 10,180,250,20)                                        ;
AddGadgetItem(137, -1, "Schule wählen!")
AddGadgetItem(137, -1, "Brabeckschule")
AddGadgetItem(137, -1, "Deilinghofener Schule")
AddGadgetItem(137, -1, "Diesterwegschule")
AddGadgetItem(137, -1, "Ihmerter Schule")
AddGadgetItem(137, -1, "Oesetalschule")
AddGadgetItem(137, -1, "Freiherr vom Stein Schule")
AddGadgetItem(137, -1, "Woesteschule")
AddGadgetItem(137, -1, "Wulfertschule")
AddGadgetItem(137, -1, "Hans-Prinzhorn-Realschule")
AddGadgetItem(137, -1, "Friedrich-Leopold-Woeste-Gymnasium")
AddGadgetItem(137, -1, "Gesamtschule Hemer")
AddGadgetItem(137, -1, "Brabeckschule Iserlohn")
AddGadgetItem(137, -1, "Felsenmeerschule")
AddGadgetItem(137, -1, "Wilhelm-Busch-Schule")
AddGadgetItem(137, -1, "Regenbogen-Schule")
SetGadgetState(137, 0)



TextGadget(156, 10,210,150,20, "Schulklasse (Jahrgang):",#PB_String_ReadOnly)
ComboBoxGadget(157, 10,230,110,20);
AddGadgetItem(157, -1, "Wählen!")
AddGadgetItem(157, -1, "Klasse  1")
AddGadgetItem(157, -1, "Klasse  2")
AddGadgetItem(157, -1, "Klasse  3")
AddGadgetItem(157, -1, "Klasse  4")
AddGadgetItem(157, -1, "Klasse  5")
AddGadgetItem(157, -1, "Klasse  6")
AddGadgetItem(157, -1, "Klasse  7")
AddGadgetItem(157, -1, "Klasse  8")
AddGadgetItem(157, -1, "Klasse  9")
AddGadgetItem(157, -1, "Klasse 10")
AddGadgetItem(157, -1, "Klasse 11")
AddGadgetItem(157, -1, "Klasse 12")
AddGadgetItem(157, -1, "Klasse 13")
SetGadgetState(157, 0)

TextGadget(158, 10,260,220,20, "Name des Erziehungsberechtigten:",#PB_String_ReadOnly); rem
StringGadget(159, 10,280,200,20, "")                                                  ;rem 

TextGadget(160,    10,310,200,20, "Im Elternhaus lebend...:",#PB_String_ReadOnly);rem
ComboBoxGadget(161, 10,330,200,20)                                               ;rem 30,10,345,150,25
AddGadgetItem(161, -1, "Wählen!")
AddGadgetItem(161, -1, "01 = im Elternhaus lebend")
AddGadgetItem(161, -1, "02 = Schlüssel 302")
AddGadgetItem(161, -1, "03 = Schlüssel 303")
AddGadgetItem(161, -1, "04 = Schlüssel 304")
AddGadgetItem(161, -1, "05 = Schlüssel 305")
SetGadgetState(161, 0) 

TextGadget(162,10,360,150,20, "Sprachgebrauch:",#PB_String_ReadOnly)
ComboBoxGadget(163,10,380,150,20);
AddGadgetItem(163, -1, "Wählen!")
AddGadgetItem(163, -1, "Vorrangig Deutsch")
AddGadgetItem(163, -1, "Vorrangig Türkisch")
AddGadgetItem(163, -1, "Nur Kinder sprechen Deutsch")
SetGadgetState(163, 0)  



; Start Zweite Spalte / Fenster eins

TextGadget(164, 275,10,150,20, "Nationalität Vater:",#PB_String_ReadOnly)
ComboBoxGadget(165,275,30,150,20);
AddGadgetItem(165, -1, "Nationalität wählen!")
AddGadgetItem(165, -1, "deutsch")
AddGadgetItem(165, -1, "europäisch")
AddGadgetItem(165, -1, "außereuropäisch")
AddGadgetItem(165, -1, "türkisch")
AddGadgetItem(165, -1, "syrisch")
AddGadgetItem(165, -1, "italienisch")
AddGadgetItem(165, -1, "spanisch")
SetGadgetState(165, 0)

TextGadget(166,275,60,150,20, "Nationalität Mutter:",#PB_String_ReadOnly)
ComboBoxGadget(167,275,80,150,20);
AddGadgetItem(167, -1, "Nationalität wählen!")
AddGadgetItem(167, -1, "deutsch")
AddGadgetItem(167, -1, "europäisch")
AddGadgetItem(167, -1, "außereuropäisch")
AddGadgetItem(167, -1, "türkisch")
AddGadgetItem(167, -1, "syrisch")
AddGadgetItem(167, -1, "italienisch")
AddGadgetItem(167, -1, "spanisch")
SetGadgetState(167, 0)





TextGadget(168,275,110,200,20, "Wirtschaftliche Situation:",#PB_String_ReadOnly)
ComboBoxGadget(169,275,130,200,20);
AddGadgetItem(169, -1, "Wählen!")
AddGadgetItem(169, -1, "Überwieg.eigene Einkünfte")
AddGadgetItem(169, -1, "Erhalten erg. Sozialleistungen")
AddGadgetItem(169, -1, "Überwieg.Sozialleistungen")
SetGadgetState(169, 0)


TextGadget(170, 275, 160,180,20, "Beruf Lebensgefährte/Stiefeltern:",#PB_String_ReadOnly);rem
ComboBoxGadget(171, 275, 180,180,20)                                                     ;rem 38, 620, 185,200,25
AddGadgetItem(171, -1, "Beruf wählen!")
AddGadgetItem(171, -1, "100 = Angelernt")
AddGadgetItem(171, -1, "301 = Facharbeiter")
AddGadgetItem(171, -1, "404 = Angestellter")
AddGadgetItem(171, -1, "405 = Beamter")
AddGadgetItem(171, -1, "406 = Freiberufler")
AddGadgetItem(171, -1, "407 = arbeitslos")
SetGadgetState(171, 0)

TextGadget(172, 275,210,180,20, "Beruf leibliche Mutter:",#PB_String_ReadOnly);rem
ComboBoxGadget(173, 275,230,170,20)                                           ;rem 38, 620, 185,200,25
AddGadgetItem(173, -1, "Beruf wählen!")
AddGadgetItem(173, -1, "100 = Angelernt")
AddGadgetItem(173, -1, "301 = Facharbeiter")
AddGadgetItem(173, -1, "404 = Angestellter")
AddGadgetItem(173, -1, "405 = Beamter")
AddGadgetItem(173, -1, "406 = Freiberufler")
AddGadgetItem(173, -1, "407 = arbeitslos")
SetGadgetState(173, 0)

TextGadget(174, 275,260,180,20, "Beruf leiblicher Vater:",#PB_String_ReadOnly);rem
ComboBoxGadget(175, 275,280,160,20)                                           ;rem 38, 620, 185,200,25
AddGadgetItem(175, -1, "Beruf wählen!")
AddGadgetItem(175, -1, "100 = Angelernt")
AddGadgetItem(175, -1, "301 = Facharbeiter")
AddGadgetItem(175, -1, "404 = Angestellter")
AddGadgetItem(175, -1, "405 = Beamter")
AddGadgetItem(175, -1, "406 = Freiberufler")
AddGadgetItem(175, -1, "407 = arbeitslos")
SetGadgetState(175, 0) 

TextGadget(176, 275,310,180,20, "Tätigkeitsart Mutter:",#PB_String_ReadOnly);rem
ComboBoxGadget(177, 275,330,150,20)                                         ;rem 38, 620, 185,200,25
AddGadgetItem(177, -1, "Tätigkeitsart wählen!")
AddGadgetItem(177, -1, "Vollzeit")
AddGadgetItem(177, -1, "Teilzeit")
AddGadgetItem(177, -1, "Stundenweise")
AddGadgetItem(177, -1, "Arbeitslos")
AddGadgetItem(177, -1, "Rente")
AddGadgetItem(177, -1, "Hausfrau")
AddGadgetItem(177, -1, "Verstorben")
AddGadgetItem(177, -1, "Ausbildung")
AddGadgetItem(177, -1, "Umschulung")
AddGadgetItem(177, -1, "Sonstiges")
SetGadgetState(177, 0) 

TextGadget(178, 275,360,180,20, "Tätigkeitsart Vater:",#PB_String_ReadOnly);rem
ComboBoxGadget(179, 275,380,150,20)                                        ;rem 38, 620, 185,200,25
AddGadgetItem(179, -1, "Tätigkeitsart wählen!")  
AddGadgetItem(179, -1, "Vollzeit")
AddGadgetItem(179, -1, "Teilzeit")
AddGadgetItem(179, -1, "Stundenweise")
AddGadgetItem(179, -1, "Arbeitslos")
AddGadgetItem(179, -1, "Rente")
AddGadgetItem(179, -1, "Hausfrau/-mann")
AddGadgetItem(179, -1, "Verstorben")
AddGadgetItem(179, -1, "Ausbildung")
AddGadgetItem(179, -1, "Umschulung")
AddGadgetItem(179, -1, "Sonstiges")
SetGadgetState(179, 0) 


;Einträge dritte Spalte - ganz rechts


TextGadget(201,  580, 10,120,20, "Trennung wann:",#PB_String_ReadOnly);
StringGadget(202,  580, 30,150,20, "00.00.0000")                      ;

TextGadget(203,  580, 60,120,20, "Scheidung wann:",#PB_String_ReadOnly);
StringGadget(204,  580, 80,150,20, "00.00.0000")                       ;

TextGadget(205,   580,110,120,20, "Sorgerecht wählen:",#PB_String_ReadOnly);
ComboBoxGadget(206, 580,130,190,20)                                        ;rem 38, 620, 185,200,25

AddGadgetItem(206, -1, "Wählen!")
AddGadgetItem(206, -1, "Gemeinsames Sorgerecht")
AddGadgetItem(206, -1, "Mutter hat das Sorgerecht")
AddGadgetItem(206, -1, "Vater hat das Sorgerecht")
AddGadgetItem(206, -1, "Jugendamt hat das Sorgerecht")
AddGadgetItem(206, -1, "andere Regelung")
SetGadgetState(206, 0)

TextGadget(209, 580,160,140,20, "Aufenthaltbest.-Recht:",#PB_String_ReadOnly);
ComboBoxGadget(210, 580,180,150,20) 
AddGadgetItem(210, -1, "Wählen!")
AddGadgetItem(210, -1, "Vater")
AddGadgetItem(210, -1, "Mutter")
AddGadgetItem(210, -1, "Jugendamt")
AddGadgetItem(210, -1, "andere Regelung")
SetGadgetState(210, 0)      

TextGadget(211,580,210,120,20, "Anzahl eigene Kinder:",#PB_String_ReadOnly);
ComboBoxGadget(212,580,230,150,20) 
AddGadgetItem(212, -1, "Wählen!")
AddGadgetItem(212, -1, "1")
AddGadgetItem(212, -1, "2")
AddGadgetItem(212, -1, "3")
AddGadgetItem(212, -1, "4")
AddGadgetItem(212, -1, "5")
AddGadgetItem(212, -1, "6")
AddGadgetItem(212, -1, "7")
AddGadgetItem(212, -1, "8")
AddGadgetItem(212, -1, "9")
AddGadgetItem(212, -1, "10")
SetGadgetState(212, 0)      

TextGadget(213,  580, 260,120,20, "Merkmale 1. 10.......:",#PB_String_ReadOnly);
StringGadget(214,  580, 280,150,20, "")                                        ;

TextGadget(215,  580, 310,120,20, "Merkmale 2. 10.......:",#PB_String_ReadOnly);
StringGadget(216,  580, 330,150,20, "")                                        ;

TextGadget(217,  580, 360,120,20, "Merkmale 3. 10.......:",#PB_String_ReadOnly);
StringGadget(218,  580, 380,150,20, "")                                        ;


TextGadget(219,  10, 410,150,20, "Berat.-Schwerpunkt:",#PB_String_ReadOnly)
ComboBoxGadget(220,  10, 430,120,20) ;rem 
AddGadgetItem(220, -1, "Wählen!")
AddGadgetItem(220, -1, "§28")
AddGadgetItem(220, -1, "§35a")
AddGadgetItem(220, -1, "§41")
AddGadgetItem(220, -1, "$8a")
SetGadgetState(220, 0) 

;TextGadget(221, 70, 460,300,20, "Anregung (Text mit mehreren Zeilen möglich):",#PB_String_ReadOnly)
;EditorGadget(222, 70, 480,300,40, #PB_Editor_WordWrap);

TextGadget(223, 440, 460,300,20, "Initiative (Text mit mehreren Zeilen möglich):",#PB_String_ReadOnly)
EditorGadget(224, 440, 480,300,40, #PB_Editor_WordWrap);

TextGadget(225,  275, 410,300,20, "Das Alter der Geschwister (per Kommata getrennt):",#PB_String_ReadOnly);
StringGadget(226, 275, 430,300,20, "")   

; **************************************************************************************************

TextGadget(102,    10,60,120,20, "Betreuerin(Lehrerin):",#PB_String_ReadOnly);
StringGadget(103,  10,80,150,20, "")                                         ;



TextGadget(104,     10,110,120,20, "Telefon/Betreuerin:",#PB_String_ReadOnly);
StringGadget(105,   10,130,150,20, "") 


ButtonGadget(301, 360, 545, 60, 25,  "Speichern");rem 
ButtonGadget(302, 430, 545, 60, 25,  "Info")     ;rem 
ButtonGadget(303, 500, 545, 60, 25,  "Ende")     ;rem 



;******************************************************************************************************
;   ENDE FENSTER 1
;******************************************************************************************************



; START FENSTER 2 / ist das Startfenster programm-technisch betrachtet


If OpenWindow(2, 750, 220, 800, 600, "zfb-programm - Version 1.0 - Erfassen Erstkontaktdaten Teil 1", #PB_Window_SystemMenu)
EndIf



;Start linke Spalte / links

TextGadget(24,    10,10,120,20, "Name (Klient):",#PB_String_ReadOnly);
StringGadget(25,    10,30,170,20, "")                                ;

TextGadget(26,    10,60,120,20, "Vorname (Klient):",#PB_String_ReadOnly);
StringGadget(27,    10,80,170,20, "")                                   ;

TextGadget(28,    10,110,120,20, "Geburtsdatum:",#PB_String_ReadOnly);
DateGadget(29,    10,130,120,20, "%dd.%mm.%yyyy",1067321980)         ;

TextGadget(36, 10,160,120,20, "Geschlecht:",#PB_String_ReadOnly)
ComboBoxGadget(37, 10,180,120,20);
AddGadgetItem(37, -1, "Wählen!")
AddGadgetItem(37, -1, "männlich")
AddGadgetItem(37, -1, "weiblich")
AddGadgetItem(37, -1, "unbestimmt")
SetGadgetState(37, 0)

TextGadget(30,    10,210,120,20, "Strasse und Nr.:",#PB_String_ReadOnly);
StringGadget(31,    10,230,170,20, "")

TextGadget(32,  10,260,170,20, "Postleitzahl/ Ort",#PB_String_ReadOnly);
ComboBoxGadget(33, 10,280,170,20)                                      ;
AddGadgetItem(33, -1, "PLZ& Ort wählen!")
AddGadgetItem(33, -1, "58675 - Hemer")
AddGadgetItem(33, -1, "58636 - Iserlohn")
AddGadgetItem(33, -1, "58638 - Iserlohn")
AddGadgetItem(33, -1, "58640 - Iserlohn")
AddGadgetItem(33, -1, "58644 - Iserlohn")
SetGadgetState(33, 0)

TextGadget(761, 10, 310,120,20, "Telefon",#PB_String_ReadOnly)
StringGadget(762, 10, 330, 170,20,"")

TextGadget(75,  10,360,120,20, "E-Mail:",#PB_String_ReadOnly);
StringGadget(76,  10,380,170,20, "")

TextGadget(62, 10, 410,420,20, "Geschildertes Anliegen seitens Meldeperson: (mehr als 5 Zeilen möglich):",#PB_String_ReadOnly)
EditorGadget(63, 10, 430,600,80, #PB_Editor_WordWrap);
                                                     ;TextGadget(58, 10, 420,420,20, "Geschildertes Anliegen seitens Meldeperson: (mehr als 5 Zeilen möglich):",#PB_String_ReadOnly)
                                                     ;EditorGadget(59, 10, 440,500,80, #PB_Editor_WordWrap);


; Start zweite Spalte

TextGadget(38, 275,10,150,20, "Anrede Meldeperson:",#PB_String_ReadOnly);
ComboBoxGadget(39, 275,30,80,20) 
AddGadgetItem(39, -1, "Wählen!")
AddGadgetItem(39, -1, "Herr")
AddGadgetItem(39, -1, "Frau")
SetGadgetState(39, 0) 

TextGadget(41, 275,60,150,20, "Name meldende Person:",#PB_String_ReadOnly);
StringGadget(42, 275,80,170,20, "")                                       ;

TextGadget(43, 275,110,170,20, "Vorname meldende Person:",#PB_String_ReadOnly)
StringGadget(44, 275,130,170,20, "");

TextGadget(55, 275,160,150,20, "Personenschlüssel",#PB_String_ReadOnly)
;TextGadget(56, 275,180,170,20, "der Meldeperson:",#PB_String_ReadOnly)
ComboBoxGadget(57, 275,180,170,20); 
AddGadgetItem(57, -1, "Wählen!")
AddGadgetItem(57, -1, "Mutter")
AddGadgetItem(57, -1, "Vater")
AddGadgetItem(57, -1, "nicht leibl. Elternteil")
AddGadgetItem(57, -1, "Jugendamt")
AddGadgetItem(57, -1, "Lehrer/Lehrerin")
AddGadgetItem(57, -1, "Polizei")
AddGadgetItem(57, -1, "Gericht")
AddGadgetItem(57, -1, "Eltern")
AddGadgetItem(57, -1, "andere Institution")
SetGadgetState(57, 0)  

TextGadget(45, 275,210,150,20, "Strasse und Nr.:",#PB_String_ReadOnly) 
StringGadget(46, 275,230,170,20, "wenn abweichend")

TextGadget(47, 275,260,150,20, "PLZ/ Ort:",#PB_String_ReadOnly)
ComboBoxGadget(48, 275,280,170,20);
AddGadgetItem(48, -1, "PLZ& Ort wählen!")
AddGadgetItem(48, -1, "58675 Hemer")
AddGadgetItem(48, -1, "58636 Iserlohn")
AddGadgetItem(48, -1, "58638 Iserlohn")
AddGadgetItem(48, -1, "58640 Iserlohn")
AddGadgetItem(48, -1, "58644 Iserlohn")
SetGadgetState(48, 0)

TextGadget(51, 275,310,170,20, "Telefon:",#PB_String_ReadOnly);
StringGadget(52, 275,330,170,20, "")

TextGadget(53, 275,360,170,20, "E-Mail:",#PB_String_ReadOnly);
StringGadget(54, 275,380,170,20, "") 





; Start dritte Spalte

TextGadget(22,    550, 10,120,20, "Anmeldedatum/Klient:",#PB_String_ReadOnly);
DateGadget(23,   550, 30,120,20, "%dd.%mm.%yyyy")                            ;10, 25,150,20

TextGadget(20, 550, 60, 120, 20, "Aufnahme durch:", #PB_String_ReadOnly);
ComboBoxGadget(21, 550, 80, 170, 20)
AddGadgetItem(21, -1, "Teamassistentin 1")
AddGadgetItem(21, -1, "Teamassistentin 2")
AddGadgetItem(21, -1, "Teamassistentin 3")
AddGadgetItem(21, -1, "Mitarbeiter X")
AddGadgetItem(21, -1, "Mitarbeiter y")
AddGadgetItem(21, -1, "Herr Röhrig")
SetGadgetState(21, 0)

;TextGadget(20,      550, 60,120,20, "Kenn-Nummer Klient:",#PB_String_ReadOnly);
;StringGadget(21,    550, 80,120,20, "")                                       ; Die Klient-Nummer eventuell automatisch vorgeben über einen Datei-Inhalt

TextGadget(220, 550, 110, 150, 20, "Anregung durch:",#PB_String_ReadOnly);
ComboBoxGadget(221, 550, 130, 170, 20)
AddGadgetItem(221, -1, "Junger Mensch selbst")
AddGadgetItem(221, -1, "Eltern")
AddGadgetItem(221, -1, "Schule/ KiTa")
AddGadgetItem(221, -1, "Soz. Dienst& andere Inst.")
AddGadgetItem(221, -1, "Gericht/Polizei")
AddGadgetItem(221, -1, "Arzt/Klinik")
AddGadgetItem(221, -1, "ehemalige Klienten")
AddGadgetItem(221, -1, "Bekannte/Verwandte")
AddGadgetItem(221, -1, "sonstige")
SetGadgetState(221, 0)



;TextGadget(60, 550,80,150,20, "Hausarzt:",#PB_String_ReadOnly); rem
;ComboBoxGadget(61, 550,100,170,20)    
;AddGadgetItem(61, -1, "Arzt wählen!")   
;AddGadgetItem(61, -1, "Dr. Meyer-Vorfelder")
;AddGadgetItem(61, -1, "Dr. Mumpitz")
;AddGadgetItem(61, -1, "Bernhard Weber")
;AddGadgetItem(61, -1, "Gertud Angermann")
;AddGadgetItem(61, -1, "Dr. Winterhausen")
;AddGadgetItem(61, -1, "Dr. Halslos")
;AddGadgetItem(61, -1, "Dr. Loch")
;SetGadgetState(61, 0) 


;ContainerGadget(62,550,180,130,60);SetGadgetColor(40, #PB_Gadget_BackColor,#White);40, 40,175,90,105
;   OptionGadget(63,  0, 10,130,20, "Ja - Erstgespräch");SetGadgetColor(41, #PB_Gadget_BackColor,#White)
;   OptionGadget(64,  0, 30,130,20, "Nein - Erstgespräch");SetGadgetColor(42, #PB_Gadget_BackColor,#White)
;   CloseGadgetList()

TextGadget(69,  550,160,200,20, "Datum Erstgespräch:",#PB_String_ReadOnly);
DateGadget(70,  550,180,130,20, "%dd.%mm.%yyyy")                          ;rem 


TextGadget(65, 550, 210,130,20, "Uhrzeit Erstgespräch:",#PB_String_ReadOnly);rem 
ComboBoxGadget(66, 550, 230,130,20)                                         ;rem 
AddGadgetItem(66, -1, "Uhrzeit wählen!")
AddGadgetItem(66, -1, "08.00 Uhr")
AddGadgetItem(66, -1, "08.30 Uhr")
AddGadgetItem(66, -1, "09.00 Uhr")
AddGadgetItem(66, -1, "09.30 Uhr")
AddGadgetItem(66, -1, "10.00 Uhr")
AddGadgetItem(66, -1, "10.30 Uhr")
AddGadgetItem(66, -1, "11.00 Uhr")
AddGadgetItem(66, -1, "11.30 Uhr")
AddGadgetItem(66, -1, "12.00 Uhr")
AddGadgetItem(66, -1, "12.30 Uhr")
AddGadgetItem(66, -1, "13.00 Uhr")
AddGadgetItem(66, -1, "13.30 Uhr")
AddGadgetItem(66, -1, "14.00 Uhr")
AddGadgetItem(66, -1, "14.30 Uhr")
AddGadgetItem(66, -1, "15.00 Uhr")
AddGadgetItem(66, -1, "15.30 Uhr")
AddGadgetItem(66, -1, "16.00 Uhr")
AddGadgetItem(66, -1, "16.30 Uhr")
AddGadgetItem(66, -1, "17.00 Uhr")
AddGadgetItem(66, -1, "17.30 Uhr")
SetGadgetState(66, 0)

TextGadget(71,  550, 260,150,20, "Erstgespräch bei:",#PB_String_ReadOnly);rem 
ComboBoxGadget(72,  550, 280,170,20)                                     ;rem 
AddGadgetItem(72, -1, "Berater/in auswählen!")
AddGadgetItem(72, -1, "Herr Röhrig")
AddGadgetItem(72, -1, "Frau Schlesinger")
AddGadgetItem(72, -1, "Herr Gunzenhausen")
AddGadgetItem(72, -1, "Herr Hagen")
AddGadgetItem(72, -1, "Herr Sindelfang")
AddGadgetItem(72, -1, "Frau Köster-Baak")
AddGadgetItem(72, -1, "Frau Mildenhofen")
AddGadgetItem(72, -1, "Frau Gustavson")
AddGadgetItem(72, -1, "Frau Gildemeister")
AddGadgetItem(72, -1, "Frau Edermann")
AddGadgetItem(72, -1, "Herr Meyer-Vorfelder")
AddGadgetItem(72, -1, "Frau Stadelmann")
SetGadgetState(72, 0)


TextGadget(771, 550, 310, 150, 20, "Kein Erstgespräch?", #PB_String_ReadOnly)
TextGadget(67, 550, 330, 150, 20, "Vorlage Teambesprechung am:",#PB_String_ReadOnly)
;TextGadget(67,  550, 360,200,20, "Datum Teambesprechnung:",#PB_String_ReadOnly);
DateGadget(68,  550, 350,130,20, "%dd.%mm.%yyyy")                              ;rem 

;CloseGadgetList()

ButtonGadget  (73, 410, 540, 200, 20, "Zur Seite 2 hier klicken!")


UseGadgetList(WindowID(2)) ; wir gehen zurück zur Gadgetliste des Hauptfensters

;ListViewGadget(0, 7, 8, 5, 6)

If CreateMenu(2, WindowID(2))
  MenuTitle("Menü")
  MenuItem(4, "Zur Seite 2 der Datenerfassung")
  MenuItem(5, "nicht aktiv")
  MenuItem(6, "nicht aktiv")
EndIf


;******************************************************************************************************
;   ENDE FENSTER 2
;******************************************************************************************************

Start-Ereignis-Schleife:
Repeat
  Event = WaitWindowEvent(); REM Ein WINDOW-Ereignis hat stattgefunden
  Window = EventWindow()
  Gadget = EventGadget()
  Menu = EventMenu()
  
  
  ; Start Programmbereich SELECT WINDOW
  Select Window
      ; Start Ereignisbereich Fenster 1
    Case 1; Rem Fenster 1 wurde gewählt / Es ist das zweite Fenster
      Select Event
        Case #PB_Event_Gadget
          Select Gadget
            Case 1 : Debug "Win1 Button 1 clicked!"
            Case 2 : Debug "Win1 Button 2 (check hier) clicked!"
            Case 301: Gosub UnterProgramm1
            Case 302: MessageRequester("Info !", "Button Info wurde gedrückt!" + Chr(13) + "Gruß vom Programmier-Opa !", #PB_MessageRequester_Ok)
            Case 303: MessageRequester("Info !", "Button ENDE wurde gedrückt!" + Chr(13) + "Gruß vom Programmier-Opa !", #PB_MessageRequester_Ok)
          EndSelect
        Case #PB_Event_Menu
          Select Menu
            Case 1 : Debug "Win1 Fenster 1 wählen!":SetActiveWindow(2)
            Case 2 : Debug "Win1 Menu item 2 geclicked!"
            Case 3 : Debug "Win1 Menu item 3 geclicked!"
          EndSelect
        Case #PB_Event_CloseWindow
          End
      EndSelect
      ; Ende Ereignisbereich Fenster 1
      
      ; Start Ereignisbereich Fenster 2
    Case 2 ; Rem Fenster 2 wurde gewählt /// Es ist das Startfenster
      Select Event
        Case #PB_Event_Gadget
          Select Gadget
            Case 3 : Debug "Win2 Button 1 geclicked!"
            Case 4 : Debug "Win2 Button 2 (check hier) geclicked!"
            Case 73: Debug "Wahlbutton 'zur Folgeseite' wurde geclicked!":SetActiveWindow(1)  
          EndSelect
        Case #PB_Event_Menu
          Select Menu
            Case 4 : Debug "Win2 Wahl Seite 2 wurde geclicked!":SetActiveWindow(1)
            Case 5 : Debug "Win2 Wahl Seite 1 wurde geclicked!"
            Case 6 : Debug "Win2 Menu item 3 geclicked!"
          EndSelect
        Case #PB_Event_CloseWindow
          End
      EndSelect
  EndSelect
  ; ENDE Programmbereich SELECT WINDOW
  
Until Event = #PB_Event_CloseWindow
ENDE-Ereignis-Schleife:


UnterProgramm1:
; Zuordnung der einzelnen Datenfelder

Daten$(1)="(01) "+GetGadgetText(21);rem Kenn-Nummer Klien
Daten$(2)="(02) "+GetGadgetText(23);rem Anmeldedatum Klient
Daten$(3)="(03) "+GetGadgetText(25);rem Name
Daten$(4)="(04) "+GetGadgetText(27);rem Vorname
Daten$(5)="(05) "+GetGadgetText(29);rem Geburtsdatum
Daten$(6)="(06) "+GetGadgetText(31);rem Straße und Nummer
Daten$(7)="(07) "+GetGadgetText(33);rem Postleitzahl
                                   ;Daten$(8)="(08) "+GetGadgetText(35);rem Ortsbezeichnung
Daten$(9)="(09) "+GetGadgetText(37);rem Geschlecht
Daten$(10)="(10) "+GetGadgetText(39);rem Persönliche Anrede/Meldeperson
Daten$(11)="(11) "+GetGadgetText(42);rem Name meldende Person
Daten$(12)="(12) "+GetGadgetText(44);rem Vorname meldende Person
Daten$(13)="(13) "+GetGadgetText(46);rem Strasse und Nummer
Daten$(14)="(14) "+GetGadgetText(48);rem PLZ
                                    ;Daten$(15)="(15) "+GetGadgetText(50);rem Ortsbezeichnung
Daten$(16)="(16) "+GetGadgetText(52);rem Telefon dienstlich (nur Telefon)
Daten$(17)="(17) "+GetGadgetText(54);rem Telefon privat (jetzt E-Mail)
Daten$(18)="(18) "+GetGadgetText(63);rem Geschildertes Anliegen
Daten$(19)="(19) "+GetGadgetText(57);rem Personenschlüssel der Meldeperson
                                    ;Daten$(20)="(20) "+GetGadgetText(61);rem Hausarzt
Daten$(21)="(21) "+GetGadgetText(63);rem Ja - zum Erstgespräch
;Daten$(22)="(22) "+GetGadgetText(64);rem Nein - zum Erstgespräch
Daten$(23)="(23) "+GetGadgetText(68);rem Datum Teambesprechnung
Daten$(24)="(24) "+GetGadgetText(70);rem Datum Erstgespräch
Daten$(25)="(25) "+GetGadgetText(66);rem Uhrzeit Erstgespräch
Daten$(26)="(26) "+GetGadgetText(72);rem Erstgespräch bei Berater/in
;Daten$(27)="(27) "+GetGadgetText(59);rem Geschildertes Anliegen

; Beginn zweite Seite:

Daten$(28)="(28) "+GetGadgetText(101);rem Beziehungsstatus der Meldeperson zum Klienten
Daten$(29)="(29) "+GetGadgetText(103);rem Betreuerin(Lehrerin
Daten$(30)="(30) "+GetGadgetText(105);rem Telefon/Betreuerin
Daten$(31)="(31) "+GetGadgetText(137);rem Schule/Kiga usw
Daten$(32)="(32) "+GetGadgetText(157);rem Schulklasse (Jahrgang)
Daten$(33)="(33) "+GetGadgetText(159);rem Name des Erziehungsberechtigten
Daten$(34)="(34) "+GetGadgetText(161);rem Im Elternhaus lebend...
Daten$(35)="(35) "+GetGadgetText(163);rem Sprachgebrauch
Daten$(36)="(36) "+GetGadgetText(165);rem Nationalität Vater
Daten$(37)="(37) "+GetGadgetText(167);rem Nationalität Mutter
Daten$(38)="(38) "+GetGadgetText(169);rem Wirtschaftliche Situation
Daten$(39)="(39) "+GetGadgetText(171);rem Beruf Lebensgefährte/Stiefeltern
Daten$(40)="(40) "+GetGadgetText(173);rem Beruf leibliche Mutter
Daten$(41)="(41) "+GetGadgetText(175);rem Beruf leiblicher Vater
Daten$(42)="(42) "+GetGadgetText(177);rem Tätigkeitsart Mutter
Daten$(43)="(43) "+GetGadgetText(179);rem Tätigkeitsart Vater

Daten$(44)="(44) "+GetGadgetText(202);rem Trennung wann
Daten$(45)="(45) "+GetGadgetText(204);rem Scheidung wann
Daten$(46)="(46) "+GetGadgetText(206);rem Sorgerecht wählen
Daten$(47)="(47) "+GetGadgetText(210);rem Aufenthaltbestimmungsrecht
Daten$(48)="(48) "+GetGadgetText(212);rem Anzahl eigene Kinder
Daten$(49)="(49) "+GetGadgetText(214);rem freies Feld 1
Daten$(50)="(50) "+GetGadgetText(216);rem freies Feld 2
Daten$(51)="(51) "+GetGadgetText(218);rem freies Feld 3
Daten$(52)="(52) "+GetGadgetText(175);rem 
Daten$(53)="(53) "+GetGadgetText(177);rem 
Daten$(54)="(54) "+GetGadgetText(179);rem 

; Gosub DatenSchreiben
; Faxnummer und Emailadresse
; hier könnte eine ListBox stehen
; Position -1 setzt den String ans Ende des letzten Eintrages in der Listbox



EndeUnterProgramm1:
Return




DatenSchreiben:
If File
  
  WriteStringN(File,folder$,  #PB_Unicode);rem Datei-Ordner ----- und noch andere Sachen
  WriteStringN(file,daten$(1), #PB_Unicode);rem 
  WriteStringN(file,daten$(2), #PB_Unicode);rem 
  WriteStringN(file,daten$(3), #PB_Unicode);rem 
  WriteStringN(file,daten$(4), #PB_Unicode);rem 
  WriteStringN(file,daten$(5), #PB_Unicode);rem 
  WriteStringN(file,daten$(7), #PB_Unicode);rem 
  WriteStringN(file,daten$(8), #PB_Unicode);rem 
  WriteStringN(file,daten$(9), #PB_Unicode);rem 
  WriteStringN(file,daten$(10), #PB_Unicode);rem 
  WriteStringN(file,daten$(11), #PB_Unicode);rem 
  WriteStringN(file,daten$(12), #PB_Unicode);rem 
  WriteStringN(file,daten$(13), #PB_Unicode);rem 
  WriteStringN(file,daten$(14), #PB_Unicode);rem 
  WriteStringN(file,daten$(15), #PB_Unicode);rem 
  WriteStringN(file,daten$(16), #PB_Unicode);rem 
  WriteStringN(file,daten$(17), #PB_Unicode);rem 
  WriteStringN(file,daten$(18), #PB_Unicode);rem 
  WriteStringN(file,daten$(19), #PB_Unicode);rem 
  WriteStringN(file,daten$(20), #PB_Unicode);rem 
  WriteStringN(file,daten$(21), #PB_Unicode);rem 
  WriteStringN(file,daten$(22), #PB_Unicode);rem 
  WriteStringN(file,daten$(23), #PB_Unicode);rem 
  WriteStringN(file,daten$(24), #PB_Unicode);rem 
  WriteStringN(file,daten$(25), #PB_Unicode);rem 
  WriteStringN(file,daten$(26), #PB_Unicode);rem 
  WriteStringN(file,daten$(27), #PB_Unicode);rem 
  WriteStringN(file,daten$(28), #PB_Unicode);rem 
  WriteStringN(file,daten$(29), #PB_Unicode);rem 
  WriteStringN(file,daten$(30), #PB_Unicode);rem 
  WriteStringN(file,daten$(31), #PB_Unicode);rem 
  WriteStringN(file,daten$(32), #PB_Unicode);rem 
  WriteStringN(file,daten$(33), #PB_Unicode);rem 
  WriteStringN(file,daten$(34), #PB_Unicode);rem 
  WriteStringN(file,daten$(35), #PB_Unicode);rem 
  WriteStringN(file,daten$(36), #PB_Unicode);rem 
  WriteStringN(file,daten$(37), #PB_Unicode);rem 
  WriteStringN(file,daten$(38), #PB_Unicode);rem 
  WriteStringN(file,daten$(39), #PB_Unicode);rem 
  WriteStringN(file,daten$(40), #PB_Unicode);rem 
  WriteStringN(file,daten$(41), #PB_Unicode);rem 
  WriteStringN(file,daten$(42), #PB_Unicode);rem 
  WriteStringN(file,daten$(43), #PB_Unicode);rem 
  WriteStringN(file,daten$(44), #PB_Unicode);rem 
  WriteStringN(file,daten$(45), #PB_Unicode);rem 
  WriteStringN(file,daten$(46), #PB_Unicode);rem 
  WriteStringN(file,daten$(47), #PB_Unicode);rem 
  WriteStringN(file,daten$(48), #PB_Unicode);rem 
  WriteStringN(file,daten$(49), #PB_Unicode);rem 
  WriteStringN(file,daten$(50), #PB_Unicode);rem 
  WriteStringN(file,daten$(51), #PB_Unicode);rem 
  WriteStringN(file,daten$(52), #PB_Unicode);rem 
  WriteStringN(file,daten$(53), #PB_Unicode);rem 
  WriteStringN(file,daten$(54), #PB_Unicode);rem 
                                            ;WriteStringN(file,daten$(55), #PB_Unicode);rem 
                                            ;WriteStringN(file,daten$(56), #PB_Unicode);rem 
                                            ;WriteStringN(file,daten$(57), #PB_Unicode);rem 
  
  
  
  ; Schließen der Datei.
  CloseFile(File)
  MessageRequester("Info !", "Daten wurden gespeichert!" + Chr(13) + "Gruß vom Programmier-Opa !", #PB_MessageRequester_Ok)
  
Else
  ; Wenn dies nicht erfolgreich war.
  Debug "Konnte die Daten nicht speichern: " + FileName 
  
EndIf
EndeDatenSchreiben:
Return

UnterProgramm2:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;; noch programmieren

EndeUnterProgramm2:
Return
Benutzeravatar
man-in-black
Beiträge: 362
Registriert: 21.08.2006 17:39

Re: PHP in PureBasic integrieren

Beitrag von man-in-black »

Moin,

ich bin noch nicht richtig schlau geworden, was deine Rahmenbedingungen sind. Magst du dein Problem/ Frage aus Sicht der Nutzer beschreiben? Sitzt der Anwender am gleichen PC, auf dem auch deine Software sowie die Datenbank liegt? Oder liegen die Datenbank als auch ein Teil der Verwaltungslogik (Programm) auf einem anderen PC? Im letzten Fall wäre noch zu klären, ob beim Anwender ein Klient (Programm) installiert sein darf oder ob das alles über den Browser laufen muss.

Den Code habe ich kurz überflogen und würde dir statt der goto- Sachen die Proceduren (Funktionen) ans Herz legen sowie eine automatische String Generierung für die Comboboxen vorschlagen. Gerade bei den Uhrzeiten bieten sich Schleifen (for) an. Würde ich nicht gerade im Zug sitzen, hätte ich dir fix Beispiele gebastelt.

MFG
MIB
(hab alles, kann alles, weiß alles!!^^)

Bild
Benutzeravatar
mk-soft
Beiträge: 3700
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: PHP in PureBasic integrieren

Beitrag von mk-soft »

Ich bin gerade dabei ein Procedure zu schreiben, welches aus Daten automatisch ein Formula zu erzeugt
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
brigitte2018
Beiträge: 35
Registriert: 16.07.2018 11:14

Re: PHP in PureBasic integrieren

Beitrag von brigitte2018 »

Hallo und guten Morgen, "mk-soft" und "man in black"!

Vielen Dank für Eure Hilfestellung, es tut mir und der Sache gut.

Aus Anwendersicht sieht die Aufgabenstellung wie folgt aus. Es sind 15 Mitarbeiter (Psychologen und Sozialarbeiter), die in einem Netz (NAS) mit normalen Internetanschluss in einem Haus arbeiten. Davon sind täglich in der Regel 10 Mitarbeiter mittels Desktop, Laptop und Tablett aktiv. Haupt-Organisationsmittel dieser Mitarbeiter ist eine zentral befindliche Handaktenorga, d.h. Handakten müssen unter Aufsicht entnommen werden.

Mit und für Kinder und Jugendliche werden Gesprächstermine (aktiv und passiv) vereinbart. Bei diesen und nach diesen Gesprächen entsteht überwiegend Handlungsbedarf für Psychotherapie, Spieltherapie, Bewegungstherapie, usw. und weitere Gespräche mit Personen aus dem Umfeld und natürlich auch Einrichtungen wie Schulen, Kindergärten, usw. statt. Das alles muss zeitnah dokumentiert werden und in Zusammenfassung mit anderen Gliederungen an das Land (bisher zu Fuss) und anderen Trägern weitergegeben werden. (Statistik, Personalausstattung, Werkzeuge, finanzielle Ausstattung, usw.)

Das Ganze erfolgte über Formulare, Formulare, Formulare. Und dass soll im Prinzip auch so bleiben, da die Mitarbeiter sich nur schwer auf etwas Neues einlassen können/wollen (sie sind ja auch keine Schreibkräfte) und die Dokumentation extrem wichtig ist.
Dazu kommen auch Kontrollaspekte in Bezug auf Auslastung, die manchmal eben auch durch Corona und Co. beeinflusst werden.

Ausserdem benötigt mein Sohn für alle 3 Beratungsstellen (also 3x15 Mitarbeiter) einen Gesamtüberblick und das bedeutet eben auch die Zusammenfassung aller Daten.
-------------
Ich bin offen gegenüber jeden Lösungsansatz. Beispielsweise dezentrale Programmhaltung mit zentraler Datenbank (d.h. 3 Datenbanken), zentrale PHP-Lösung, usw. usw.

@mk-soft: "Ich bin gerade dabei ein Procedure zu schreiben, welches aus Daten automatisch ein Formular erzeugt." Das wäre natürlich super!

@man-in-black: "Den Code habe ich kurz überflogen und würde dir statt der goto- Sachen die Proceduren (Funktionen) ans Herz legen sowie eine automatische String Generierung für die Comboboxen vorschlagen. Gerade bei den Uhrzeiten bieten sich Schleifen (for) an. Würde ich nicht gerade im Zug sitzen, hätte ich dir fix Beispiele gebastelt."
Was meinst Du damit, da ich das klassisch/böse 'goto' gar nicht genutzt habe? - Für Beispiele (besonders eben auch Prozedutren) wäre ich sehr dankbar. Ich selbst habe das hier gezeigte Programm neu strukturiert und die Lesbarkeit verbessert (meine ich zumindest)

Liebe Grüße und ein schönes Wochenende!
Axolotl
Beiträge: 150
Registriert: 31.12.2008 16:34

Re: PHP in PureBasic integrieren

Beitrag von Axolotl »

Hallo brigitte2018,

ich erlaube mir mal ein paar Vorschläge zu unterbreiten. Du findest hier meine persönlichen Vorlieben wieder. Natürlcih muss Du keine davon anwenden.
Los gehts:

Code: Alles auswählen

  EnableExplicit  ;' gehört an den Anfang der Hauptdatei. Das wichtigste Kommando um Schreibfehler in Variablennamen zu finden. 
Aufgrund der Projektgröße ist die Struktur, Datenhaltung und Aufteilung des Quellkodes wichtig: Siehe auch 'Projekte' oder 'XIncludefile' in der Hilfe.

Leider verwenden die Beispiele in der Hilfe keine Konstanten. Für große Projekte ist aber zu empfehlen.
Ich zeige hier verschiedene Möglichkeiten, die aber auch noch abgewandelt werden können.

Code: Alles auswählen

Enumeration EWindow  ;' durch den Namen kann man die Enums auch an anderer Stelle erweitern 
  #WINDOW_Main          ;' == 0 
  #WINDOW_ClientData    ;' == 1 
EndEnumeration 

Enumeration EGadget 
  #GADGET_strClientName    ;' == 0 
  #GADGET_strClientAge     ;' == 1 
  ; .. 
  #GADGET_cbbNationality 

  ;' Alternative : Zuordnen der Gadgets zu den Fenstern 
  #GADGET_Main_ProductName 
  ; ... 
  #GADGET_ClientData_FirstName 
  #GADGET_ClientData_LastName 
  ; .. 
  ;' Alternative : Spezifische Name mit Gadgettypen 
  #BUTTON_Start 
  ; ..
  #COMBOBOX_Nationality 
  ; .. 
  #COMBOBOX_ClientData_Nationality 
  ; .. 
EndEnumeration 
;
; Beispiel -- Vergleich (Ausschnitt beliebige Stelle ) 
;
;   TextGadget(55, 275,160,150,20, "Personenschlüssel")  ;' TextGadget benötigt kein _ReadOnly 
;   ComboBoxGadget(57, 275,180,170,20);
;
; Beispiel -- So würde ich das machen: 
;
;   TextGadget    (#GADGET_txtPersonKey, 275, 160, 150, 20, "Personenschlüssel")  
;   ComboBoxGadget(#GADGET_cbbPersonKey, 275, 180, 170, 20) 


Zum Thema Proceduren gibt es ja schon Kommentare.
Ich sehe den Vorteil auch in den definierten Begrenzungen der Kontexte (Variablengültigkeit: Global vs. Protected)

Code: Alles auswählen

Procedure OpenMainWindow()   ;' erzeuge die Fenster mit Gadgets 
; ... 
EndProcedure 

Procedure OpenClientDataWindow()   ;' erzeuge die Fenster mit Gadgets 
; ... 
EndProcedure 

Procedure OpenAllWindows()   ;' erzeuge alle Fenster mit Gadgets 
; ... 
EndProcedure 
Ich würde auf jeden Fall das erzeugen und das Befüllen der Gadgets von ein ander Trennen:

Code: Alles auswählen

Procedure FillMainWindowGadgets()  ;' fülle die Gadgets mit Daten 
EndProcedure 

Procedure FillClientDataWindow()   ;' erzeuge die Fenster mit Gadgets 
; ... 
EndProcedure 

Procedure FillAllWindowGadgets()   ;' fülle die Gadgets mit Daten 
; ... 
EndProcedure 
Das Befüllen der Gadgets kann dann mit Daten, die aus einer Datei gelesen werden, erfolgen. (hier nur exemplarisch, kein vollständig funktionierender Kode)
Ich verwende hier mal Preferences-Fileformat: Key = Value, es geht natürlich genauso mit anderen Dateiformaten: JSON, oder XML, ...

Code: Alles auswählen

; ... 
  ; ... 
  If OpenPreferences("<Directory>\FormularDefiniton.desktop")  ;' beliebiger Name möglich 
    ; ...  
    PreferenceGroup("PersonKey") 
    MaxPersonKeyData = ReadPreferenceInteger("MaxData", 0)   
    For idx = 0 To MaxPersonKeyData 
      txt$ = ReadPreferenceString("Item"+RSet(Str(idx), 2, "0"), "") 
      AddGadgetItem(#GADGET_cbbPersonKey, -1, txt$) 
    Next idx 
    SetGadgetState(#GADGET_cbbPersonKey, ReadPreferenceInteger("Selected", 0)) 
    ; ... 
    ClosePreferences()  
  EndIf 
;; Inhalt der Datei: <Directory>\FormularDefiniton.desktop 
;; .. 
;; [PersonKey] 
;; MaxData = 10 
;; Item00 = "Wählen!" 
;; .. 
;; Item09 = "andere Institution"
;; Selected = 0 

  ; Original Code Fragment: 
  ; AddGadgetItem(57, -1, "Wählen!")
  ; AddGadgetItem(57, -1, "Mutter")
  ; AddGadgetItem(57, -1, "Vater")
  ; AddGadgetItem(57, -1, "nicht leibl. Elternteil")
  ; AddGadgetItem(57, -1, "Jugendamt")
  ; AddGadgetItem(57, -1, "Lehrer/Lehrerin")
  ; AddGadgetItem(57, -1, "Polizei")
  ; AddGadgetItem(57, -1, "Gericht")
  ; AddGadgetItem(57, -1, "Eltern")
  ; AddGadgetItem(57, -1, "andere Institution")
  ; SetGadgetState(57, 0)


Um nochmal den Unterschied zwischen Proceduren mit Parametern und Procduren mit globalen Variablen zu verdeutlichen hier ein paar Beispiele:

Code: Alles auswählen

;' Datei wird geöffnet (kreiert) und die Daten$ werden geschrieben, anschließend wird die Datei geschlossen. 
Procedure DatenSchreiben(FileName$, folder$, Array daten$(1), Size=0)  ; returns 0|1 .. fehler|erfolg 
  Protected result, FID, idx, arrSize 

  If Size = 0 
    arrSize = ArraySize(daten$()) 
  Else 
    arrSize = Size 
  EndIf 

  result = #False ;' nicht nötig, variablen sind immer mit 0 oder entsprechend vorbelegt! 
  FID = CreateFile(#PB_Any, FileName$)
  If FID <> 0 ;' gültige Datei 
    WriteStringN(FID, folder$, #PB_Unicode) ;rem Datei-Ordner ----- und noch andere Sachen
    For idx = 1 To arrSize                                 ;' Achtung: Benutzung von Arrays und deren Indizes.  
      WriteStringN(FID, daten$(idx), #PB_Unicode)  
    Next idx 
    CloseFile(FID) 
    result = #True 
  EndIf 
  ProcedureReturn result 
EndProcedure 
; 
; Aufruf 
  DatenSchreiben(FileName, Folder$, daten$(), 54)  ;' 

;' 
;' Anstatt die übergabe als Parameter: Variablen als Global deklarieren. 
  Global folder$ 
  Global daten$(100) 
  Global File 
;' Aufruf -- Procedure Definiton muss vor Aufruf erfolgen, alternativ Deklaration mit Declare bevor Aufruf 
Declare DatenSchreiben(Anzahl)   
; .. 
Procedure DatenSchreiben(54)  
; .. 
Procedure DatenSchreiben(Anzahl) 
  Protected idx

  WriteStringN(File, folder$, #PB_Unicode) ;rem Datei-Ordner ----- und noch andere Sachen
  For idx = 1 To Anzahl                           ; Anmerkung: Array kann bei 0 starten !!! 
    WriteStringN(File, daten$(idx), #PB_Unicode) 
  Next idx 
EndProcedure 

; 
; => Einz-zu-Eins zum Orginal: 
; ; DatenSchreiben:
; ; If File
; ;  
; ;   WriteStringN(File,folder$,  #PB_Unicode);rem Datei-Ordner ----- und noch andere Sachen
; ;   WriteStringN(file,daten$(1), #PB_Unicode);rem
; ;   WriteStringN(file,daten$(2), #PB_Unicode);rem
; ;   .. ; entfernt .. 
; ;   WriteStringN(file,daten$(53), #PB_Unicode);rem
; ;   WriteStringN(file,daten$(54), #PB_Unicode);rem
; ;                                             ;WriteStringN(file,daten$(55), #PB_Unicode);rem
; ;                                             ;WriteStringN(file,daten$(56), #PB_Unicode);rem
; ;                                             ;WriteStringN(file,daten$(57), #PB_Unicode);rem
; ;  
; ;   ; Schließen der Datei.
; ;   CloseFile(File)
; ;   MessageRequester("Info !", "Daten wurden gespeichert!" + Chr(13) + "Gruß vom Programmier-Opa !", #PB_MessageRequester_Ok)
; ;  
; ; Else
; ;   ; Wenn dies nicht erfolgreich war.
; ;   Debug "Konnte die Daten nicht speichern: " + FileName
; ;  
; ; EndIf
; ; EndeDatenSchreiben:
; ; Return 
Und zum guten Schluss:

Code: Alles auswählen

TextGadget(102,    10,60,120,20, "Betreuerin(Lehrerin):",#PB_String_ReadOnly) 

#PB_String_ReadOnly gehört hier laut Hilfe nicht hin. Muss auch nicht, da TextGadget im Gegensatz zu StringGadget nicht schreibbar sind.
Die möglichen Konstanten sind #PB_Text_Center, #PB_Text_Right oder #PB_Text_Border
Mostly running PureBasic <latest stable version and current alpha/beta> (x64) on Windows 11 Home
brigitte2018
Beiträge: 35
Registriert: 16.07.2018 11:14

Re: PHP in PureBasic integrieren

Beitrag von brigitte2018 »

@Axolotl

Hallo und Danke für die gezeigten Vorschläge. Ich werde sie noch jetzt am Wochenende durcharbeiten. Jeder Vorschlag aus gelebter und praxisnaher Programmierung ist mehr als willkommen. Ich hoffe, ich darf schon jetzt darüberhinaus eine Zusatzfrage stellen? - Ich meine, vom Aussehen (farblos, vielleicht auch schlecht komponiert und die zwei blitzenden Fenster beim Programmstart) bin ich noch sehr selbstkritisch. Und das wohl auch zu Recht. Hättest Du auch für diesen Bereich ein paar Tips. Wie bringt man klug etwas Farbe 'rein, wie kann man ein zweites Fenster bei Nichtbearbeitung unsichtbar machen? - Für eine Antwort wäre ich dankbar. Ich wünsche Dir jedenfalls ein schönes Wochenende und bleib' gesund!
Axolotl
Beiträge: 150
Registriert: 31.12.2008 16:34

Re: PHP in PureBasic integrieren

Beitrag von Axolotl »

Hallo brigitte2018,

sehr gerne. Ich lerne hier (und im Englischen Forum) immer noch eine Menge und freue mich davon auch mal was zurückgeben zu können.
Um lästiges Flackern zu verhindern, kann man die Fenster unsichtbar erzeugen und dann später sichtbar machen.

Code: Alles auswählen

If OpenWindow(#WINDOW_Main, 0, 400, 300, 100, "Beispiel ", #PB_Window_SystemMenu | #PB_Window_Invisible) 
  ; .. 
  HideWindow(#WINDOW_Main, 0, Flags) ;' mit den folgenden Werten für Flags 
  ;   #PB_Window_NoActivate    : the window will be shown but not activated (only valid when un-hiding the window).
  ;   #PB_Window_ScreenCentered: the window will be screen centered (only valid when un-hiding the window).
  ;   #PB_Window_WindowCentered: the window will be window centered (only valid when un-hiding the window).
  ; .. 
  ; wieder verstecken : 
  HideWindow(#WINDOW_Main, 1) ;' dann haben die Flags keine bedeutung 
Um Front und Hintergrundfarbe zu verändern kannst Du SetGadgetColor() und GetGadgetColor() auf die Gadgets benutzen

Code: Alles auswählen

SetGadgetColor(#GADGET_cbbNationality, #PB_Gadget_FrontColor, RGB(80, 80, 80))  
color = GetGadgetColor(#GADGET_cbbNationality, #PB_Gadget_BackColor) 
Zum 'Layouten' gibt es auch das ContainerGadget, hier sind auch Hintergrundfarben anwendbar.

Ich wünsche viel Vergnügen beim Durcharbeiten und ebenfalls alles Gute und schön Gesund bleiben. :-)
Mostly running PureBasic <latest stable version and current alpha/beta> (x64) on Windows 11 Home
Antworten