Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von Little Tester
Thema: Codeformatierung in Visual Studion 2019 ändern
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Standardmäßig macht Visual Studio den Code ja so:


            try
            {
                if(Foo == Bar)
                {
                    // Mach was
                }
                else
                {
                    // Mach was anderes
                }
            } catch (Exception ex)
            {
                // Fehler
            }

Ich hätte das aber gerne so:

            try {
                if(Foo == Bar) {
                    // Mach was
                } else {
                    // Mach was anderes
                }
            } catch (Exception ex) {
                // Fehler
            }

Natürlich kann ich das immer von Hand so umformatieren, aber wenn ich dann irgendwas ändere und wieder Enter drücke, kann es sein das Visual Studio das wieder anpasst.
Gibt es eine Möglichkeit das zu ändern? Ich finde den Codestil von mir besser lesbar. Außerdem verballert man als kleinen Nebeneffekt keine extra Zeile für ein {.

Thema: Mehrere Bildschirme ermitteln und getrennt! anzeigen und die echte Auflösung ermitteln
Am im Forum: Rund um die Programmierung

Als Einsteiger kann das schon ne Falle sein

Thema: Wie einen sicheren Updater programmieren?
Am im Forum: Rund um die Programmierung

Ich habe die Funktion <checksum algorithm="MD5"></checksum> bzw. <checksum algorithm="SHA1"></checksum> ausprobiert und testweise eine MD5 und SHA1 Checksumme erstellt. Bekomme beim Update, bzw. schon beim Download immer:

Zitat
Die Dateiintegritätsprüfung ist fehlgeschlagen und hat einige Fehler gemeldet.
Die Hashwerte wurden mittels

PowerShell
certutil -hashfile .\Update.zip MD5
bzw.

certutil -hashfile .\Update.zip SHA1
erstellt. Bestimmt liegt der Fehler bei mir.

Thema: Flurl.Http, C#, PHP, MySQL und das Thema Sicherheit
Am im Forum: Web-Technologien

Erstmal soll mir das reichen, ja. Dennoch wird es mit Fertigstellung der Version 1 an die Version 2 gehen.

Thema: Mehrere Bildschirme ermitteln und getrennt! anzeigen und die echte Auflösung ermitteln
Am im Forum: Rund um die Programmierung

Das mit dem "screen.Bounds" ist echt gemein. Mit großen "Screen" wird das nämlich nicht angeboten. Ich hatte es mit "Screen.AllScreens" und "Screen.Bounds" probiert, aber ohne Erfolg.

Warum ich da zwei Schleifen ineinander gebaut habe? Tja, weil dumm. So Anfänger bin ich eigentlich nicht mehr als das ich das für mich selbst als Entschuldigung sehe. (Gilt vielleicht die Uhrzeit? :D) Habs natürlich sofort getrennt.
Das mit dem "i < 10" ist natürlich Mist. Habe heute gemerkt, dass eine 12-Stellige Seriennummer nicht komplett angezeigt wird. Bei meinem Arbeitgeber mit Dell-Bildschirmen und 12 Stellen haben entsprechend zwei Stellen gefehlt. Ich gucke, wie man das lösen kann. seriennummer += Char.ConvertFromUtf32(dynSerial); ist zwar codetechnisch richtig (IDE gibt keinen Fehler), aber beim Debug gibts ne Exception.

Zitat
Die beste Übereinstimmung für die überladene char.ConvertFromUtf32(int)-Methode enthält einige ungültige Argumente.

Thema: Flurl.Http, C#, PHP, MySQL und das Thema Sicherheit
Am im Forum: Web-Technologien

Cool, das funktioniert. Aber ob die anderen wollten, dass ich das erfahre?

Thema: Mehrere Bildschirme ermitteln und getrennt! anzeigen und die echte Auflösung ermitteln
Am im Forum: Rund um die Programmierung

Ich möchte ermitteln, ob an einem Computer mehrere Bildschirme angeschlossen sind. Das ist mir bereits gelungen.
Nun möchte ich die Bildschirme aber auch sauber getrennt nach Bildschirm 1 und Bildschirm2 anzeigen lassen und da klemmt es momentan.

Außerdem möchte ich die Auflösung des Bildschirm ermitteln die er wirklich kann. Wenn ich die Auflösung beispielsweise auf 125% skaliere, dann sagt mir das Programm der Bildschirm hätte eine Auflösung von 1536 x 864. Stimmt natürlich nicht. Der Bildschirm kann eine Auflösung von 1920 x 1080 und nur das interessiert mich. Die Information, dass der Anwender skaliert hat wäre vielleicht nett zu wissen, aber so sehr als das ich da jetzt (schon) recherchiert habe interessiert mich das im Grunde nicht. Fürs Inventar spielt es keine Rolle was der Anwender eingestellt hat.

Außerdem muss ich feststellen, dass "monitorResolution" beim zweiten Bildschirm die gleiche Auflösung anzeigt wie beim ersten. Ich denke das liegt am "Screen.PrimaryScreen.Bounds.[...]". "screen.Bounds.ToString());" zeigt es richtig an, aber in einer Art und Weise, wie mir das nicht gefällt (Siehe Anhang)

Anbei erstmal der Code:


            // Monitor(e) ermitteln
            // https://mycsharp.de/forum/threads/111965/wmi-object-vom-typ-uint16-wie-in-string?page=1#forumpost-3758901
            try
            {
                foreach (var screen in Screen.AllScreens)
                {
                    ManagementObjectCollection mozReturn;
                    ManagementObjectSearcher mozSearch;

                    mozSearch = new ManagementObjectSearcher(@"root\wmi", "SELECT * FROM WmiMonitorID");
                    mozReturn = mozSearch.Get();
                    foreach (ManagementObject moz in mozReturn)
                    {
                        string monitorname = "";
                        string seriennummer = "";
                        dynamic dynName;
                        dynamic dynSerial;
                        dynName = moz["UserFriendlyName"];
                        dynSerial = moz["SerialNumberID"];

                        for (int i = 0; i < 10; i++)
                        {
                            monitorname += Char.ConvertFromUtf32(dynName[i]);
                            seriennummer += Char.ConvertFromUtf32(dynSerial[i]);
                        }
                        monitorModel += monitorname + " | ";
                        monitorSerial += seriennummer + " | ";
                    }
                    var screenWidth = Screen.PrimaryScreen.Bounds.Width.ToString();
                    var screenHeight = Screen.PrimaryScreen.Bounds.Height.ToString();

                    monitorResolution += screenWidth + " x " + screenHeight + " | ";

                    // For each screen, add the screen properties to a list box.
                    listBox1.Items.Add("Device Name: " + screen.DeviceName);
                    listBox1.Items.Add("Bounds: " + screen.Bounds.ToString());
                    listBox1.Items.Add("Type: " + screen.GetType().ToString());
                    listBox1.Items.Add("Working Area: " + screen.WorkingArea.ToString());
                    listBox1.Items.Add("Primary Screen: " + screen.Primary.ToString());
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Problem im Abschnitt Monitore.");
            }
Das listBox ist natürlich nur temporär während der Programmierung. Kommt später weg.

Freue mich, wenn ihr mir auch da weiterhelfen könnt.

Thema: Flurl.Http, C#, PHP, MySQL und das Thema Sicherheit
Am im Forum: Web-Technologien

Hmmm, also entweder habe ich mich jetzt total in die falsche Richtung verbissen oder es ist mit Flurl wirklich nicht möglich in C# eine Rückmeldung von PHP zu erhalten oder ich mache was grundlegend falsch mit der Libray. Ich habe folgenden PHP Code ergänzt:


	# Prüfen, ob es die Seriennummer in der Datenbank gibt.
	$db_read = "Select computerSerial from db_computer where computerSerial=?";
	$db_prepare = $db_connect->prepare($db_read);
	$data = array($_POST['computerSerial']);
	$db_prepare->execute($data);

	$number = $db_prepare->rowCount();
	# Falls kein Eintrag gefunden wurde, Vorgang abbrechen
	if ($number = 0) {
		echo "Computer nicht in der Datenbank";
[...]
Zumindest das "Computer nicht in der Datenbank" hätte ich gerne als MessageBox.Show in C#. Wenn MySQL selbst einen Fehler wirft, beispielsweise weil man Mist in der Syntax oder so gebaut hat, wäre es natürlich auch schön das zu bekommen.

Thema: Flurl.Http, C#, PHP, MySQL und das Thema Sicherheit
Am im Forum: Web-Technologien

Komplex Thematik und alles in englisch. Mach mich nicht unglücklich

Thema: Flurl.Http, C#, PHP, MySQL und das Thema Sicherheit
Am im Forum: Web-Technologien

Danke für eure Antworten und die Aufklärung / Hinweise.

Kann mir nun noch jemand sagen, wie ich vom PHP eine Rückmeldung in C# verarbeiten kann? Wenn man nach "C# PHP" und vergleichbaren Suchbegriffen sucht findet man halt immer Beispiele und Anfragen, wie man von C# etwas nach PHP schicken kann, aber nicht umgekehrt. Wenn das mit Flurl zu bewerkstelligen ist wäre das natürlich echt Klasse. Ist mir ne sympathische Libray, weil sie so wenig Code erfordert und damit auch leicht zu verstehen ist :D.

Zum Ablauf des Programms:

Im Webinterface trage ich die Seriennummer (und einige andere Dinge, wie beispielsweise Rechnungsdatum und so) des Rechners in ein Formular ein und schicke das in die Datenbank.
Das C# Tool soll dann die Inventardaten liefern und orientiert sich an der Seriennummer. Was nun aber, wenn es in der Datenbank die Seriennummer gar nicht gibt? Zumindest dafür braucht es eine Rückmeldung.

Thema: Flurl.Http, C#, PHP, MySQL und das Thema Sicherheit
Am im Forum: Web-Technologien

Ja, ich hatte mir überlegt, ob das eher ein Thema fürs PHP-Forum wäre, aber das PHP-Script wird ja aus C# heraus aufgerufen und mit Daten gefüttert. Daher denke ich muss auch alles von der Anwendung kommen? Zudem möchte ich die Antwort des PHP-Scripts in der C#-Anwendung sehen. Das SQL-Statement ist natürlich mittels Prepared Statement abgesichert.

Thema: Flurl.Http, C#, PHP, MySQL und das Thema Sicherheit
Am im Forum: Web-Technologien

Hallo liebe Gemeinschaft,

zunächst: Mir wurde in diesem Thread das das Erstellen einer Web-API mit ASP.NET Core empfohlen und ein Tutorial verlinkt. Ich habe es versucht nach zu bauen und absolut nichts verstanden. Ich schätze ich bin noch nicht so weit.

Ich wollte mich dann mit dem Thema WebClient befassen, aber irgendwie hatte ich immer nur Beispiele mit $_GET gefunden, woran ich mich ziemlich störte. Zudem habe ich sehr viele Daten zu übertragen. Das wäre über die URL totaler Quatsch gewesen, (wenn das überhaupt gegangen wäre).

Ich habe dann die Libray Fluent HTTP entdeckt. Genau mein Geschmack. Total einfach. Ruckzuck war der entsprechende Code geschrieben. Sieht im groben so aus:


using Flurl.Http;
        string securityKey = "$2y$10$GRcTbg!q2fj/7fSMgz0Eef4uFrbAFM8jILV2b((4bK323OFl57o1a";

var responseString = await "https://example.tld/update_db.php"
                .PostUrlEncodedAsync(new {
                    securityKey = securityKey,
                    computerName = computerName,
                    computerModel = computerModel,
                    computerType = computerType,
                    computerSerial = computerSerial
                })
                .ReceiveString();

Das PHP-Script sieht so aus:

if(isset($_POST['securityKey']) == "$2y$10$GRcTbg!q2fj/7fSMgz0Eef4uFrbAFM8jILV2b((4bK323OFl57o1a"){
# Datenfankverbindung herstellen
$db_connect = db_connect();

$db_update = "Update db_computer ...

Nun sind wir aber mal ehrlich. Ja, das funktioniert, aber glücklich kann man damit nicht sein. Wirklich sicher ist das mit dem "securityKey" ja nicht, oder? Außerdem steht er noch hardcoded im PHP-File wobei... naja, in der config-Datei zum Herstellen der Datenbankverbindung stehen die Daten ja auch im Klartext
Außerdem bekomme ich keine Rückmeldung vom PHP-Script wenn was schief läuft. Auch nicht so toll.

Daher meine Fragen:
1) Kann man es mit Fluent HTTP anstellen, dass man im C#-Programm (oder sonnst irgendwie) eine Rückmeldung bekommt oder wird der String einfach nur abgeschickt und der Rest ist der Libray egal? Mein Englisch hapert leider etwas, so dass ich auf der Seite nicht mit allem zurecht komme.

2) Kann man die PHP-Datei sicherer machen, so dass nicht gerade jeder daher gelaufene Bot oder ein zufällig darüber stolperndes Script Kiddy Unfug anstellen kann?

Nur Klarstellung:
Ich will mich schon auch noch mit Rest-API und / oder SOAP näher befassen, aber mir wäre es wirklich wichtig erstmal ein Projekt zu Ende zu bringen. (Ich habe in den vielen Jahren so viele begonnen und nie zu Ende gebracht, bzw. wieder aufgehört weil es irgendwo klemmte. Das hier ist das erste auf der Zielgeraden und ich möchte es nicht kurz vor knapp wieder abbrechen, weils mal wieder Probleme gibt. Das demotiviert dann auch jedes mal). Danach will ich es komplett neu entwickeln auf einer völlig neuen Basis, beispielsweise mit Symfony oder Laravel als PHP-Framework.

Edit: Ich habe das Thema ganz bewusst nicht in der Rubrik Code-Reviews gepostet, weil es nicht um ein Review geht. Vielmehr habe ich ja Fragen zur Thematik. Ich schreib das nur, weil ich in letzter Zeit ein Händchen dafür hatte in der falschen Rubrik zu posten.

Thema: Sammelthema Wünsche und Bugreports myCSharp
Am im Forum: Wünsche und Kritik

In der Fehlermeldung stehen die Richtlinien nicht, aber hinter dem Passwortfeld steht ja was verlangt ist und das deckte das Passwort ja ab (Bei dir ging es wohl auch)

Vielleicht ist auch bei meinem Account was kaputt. Ich habe hier auch eine PN die sich nicht löschen lässt:

Zitat
Fehler

Keine Nachricht mit der Id #45363 gefunden.
War ne PN als ich einen Thread von mir selbst gemeldet hatte, weil aus versehen doppelt erstellt.

Thema: Programm soll nichts tun, bis Rechner online ist
Am im Forum: Code-Reviews

Sorry, irgendwie müsst ihr meine Threads immer rumschieben :-(

Es geht glaube ich eher darum, dass ich das Programm in eine Endlosschleife schicke, sofern keine Internetverbindung besteht und es sich quasi aufhängt und der Fehler nicht sauber behandelt wird. So wurde mir das damals in einem anderen Forum (in dem ich nicht mehr aktiv bin) gesagt. Deswegen eben die Frage, ob und wie man das vernünftig löst.

Thema: Sammelthema Wünsche und Bugreports myCSharp
Am im Forum: Wünsche und Kritik

Hab es eben hier probiert.

Zitat
Fehler
Das Passwort konnte nicht geändert werden. Bitte überprüfe Deine Angaben.

Probiert mit folgendem Passwort:
Zitat
tz34!c=v4Hfe24f!f4fDg
Hab das aber auch mit ( oder ohne = probiert.

Thema: Sammelthema Wünsche und Bugreports myCSharp
Am im Forum: Wünsche und Kritik

Kann es sein, dass es nicht möglich ist das Passwort zurück zu setzen? Ich habe das vor einigen Wochen mal probiert und heute Mittag erneut. Obwohl alle Richtlinien eingehalten wurden, gab es immer einen Fehler.

Edit: Passwort wurde versucht über die "Passwort vergessen"-Funktion zurück zu setzen, weil ich vom Geschäft aus einen Beitrag einstellen wollte.

Thema: Programm soll nichts tun, bis Rechner online ist
Am im Forum: Code-Reviews

Also zunächst möchte ich nochmal sagen, dass ich Anfänger bin. Also steinigt mich für den folgenden Code (der ja immerhin schonmal funktioniert) nicht. Das das ganze ein bisschen Murks ist weis ich, deswegen möchte ich fragen, wie man es besser machen kann.

Ziel ist es, dass das Programm erst los läuft, sobald der Computer eine Internetverbindung hat. Dazu teste ich alle 10 Sekunden, ob www.google.de erreichbar ist. Erst wenn das geschieht hören die Versuche auf und das Programm läuft los. Aber hier erstmal, was ich so zusammengebaut habe:


        bool isOnline = false;

        public void testping() {
            try  {
                Ping ping = new Ping();
                PingReply pingReply = ping.Send("www.google.de");
                if (pingReply.Status == IPStatus.Success) {
                    isOnline = true;
                }
            } catch {
                Thread.Sleep(10000); // 10 Sekunden nichts machen
            }
        }

        private void Form1_Load(object sender, EventArgs e) {

            while(isOnline == false) {
                testping();
            }
// Und hier geht das eigentliche Programm los

Thema: Wie einen sicheren Updater programmieren?
Am im Forum: Rund um die Programmierung

Ja, solange es derart einfach ist steige ich da noch durch, aber sobald es eben komplexer wird bekomme ich da schon massive Probleme, sowohl mit der Sprache, als auch mit der Komplexität der Thematik. Das jetzt war ja jetzt nahezu selbsterklärend.

Thema: Wie einen sicheren Updater programmieren?
Am im Forum: Rund um die Programmierung

Danke Th69. Das ist ja schon unverschämt einfach. Hat prima geklappt. Echt klasse Ist auf der Github Seite auch wirklich super erklärt worden.

Thema: Wie einen sicheren Updater programmieren?
Am im Forum: Rund um die Programmierung

Hallo,

ich suche deutschsprachtige Informationen, wie man einen Updater für sein Programm entwickeln kann. Das Thema Programmieren ist für mich ohnehin nicht einfach und mit englisch bin ich da einfach überfordert. Es gibt zwar auf YouTube Videos die das mehr oder weniger in groben Zügen erklären, aber eher so Proof of Concept-Mäßig. Heute muss man die Updates ja auch irgendwie absichern, dass einem nicht irgendwer ein Update unterjubelt, sondern es wirklich vom Entwickler kommt. Updates muss ich auf unserem Webspace zur Verfügung stellen.

Hat mir bitte dazu jemand ein gutes Tutorial? Gerne kann man mich auch auf kostenpflichtige Videotutorials oder Bücher aufmerksam machen, in denen das Thema für Anfänger verständlich und anhand von Beispielen erklärt wird. Es sollte wie gesagt aber deutschsprachig sein.

Benutze Visual Studio 2019 Community Edition.

Thema: Kein externes Zugriff auf die MySQL-Datenbank bei IONOS
Am im Forum: Datentechnologien

Upsi, jetzt kann ich nicht mehr editieren:

Also das


	       # Datenbankverbindung schließen.
	       $db_connect->close();
habe ich rausgenommen, weils nen Fehler wirft. (Hatte es vorher auskommentiert)

Habe es durch

			$db_insert = NULL;
			$db_connect = NULL;
ersetzt. Gut so?

Thema: Kein externes Zugriff auf die MySQL-Datenbank bei IONOS
Am im Forum: Datentechnologien

Das ist zwar ein CSharp-Forum, aber ein bisschen wurde das Thema PHP hier ja angeschnitten. Ich hoffe es ist OK, wenn ich das hier etwas weiter führe, da ich mich eurer Ratschläge annehmen wollte. Außerdem wurde ich hier nicht direkt abgespeist und darauf verwiesen wieder zu kommen, wenn ich programmieren kann. Danke :-)

Zunächst möchte ich mal den PHP-Teil in Ordnung bringen. Passend dazu kamen jetzt auch die Bücher zu PHP 8 bei mir an (Einstieg in PHP 8 und MySQL und PHP 8 und MySQL Das umfassende Handbuch)

Naja, im Einsteigerbuch wird PDO nur grob im Zusammenhang mit SQLite3 angerissen. Da wird mehr so auf MySQLi gesetzt. Im umfassenden Handbuch ist ein sehr schönes Beispiel drin, dass ich übernehmen habe und jetzt nachfragen wollte ob nun alle Aspekte abgedeckt sind oder noch was fehlt.


    else {
		try {				
	        $db_insert = ("Insert into db_computer (computerSerial, controlBillDate, fk_controlCostcentre, controlInvestmentNumber, controlCheckNumber, controlExpires, otherComment, controlFirstEntry) VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
	        $data = [$_POST['computerSerial'], $_POST['controlBillDate'], $_POST['fk_controlCostcentre'], $_POST['controlInvestmentNumber'], $_POST['controlCheckNumber'], $_POST['controlExpires'], $_POST['otherComment'], date('Y-m-d')];
	        
	        $unklareVariable = $db_connect->prepare($db_insert);
			$unklareVariable->execute($data);
	        	        
	       # Datenbankverbindung schließen.
	       $db_connect->close();
	        
	    	# Code 10 = "Eintrag gespeichert."
			$_SESSION['code'] = 10;
			header("Location: https://".$_SERVER['HTTP_HOST']."/computer/show.php"); exit;
		} catch (PDOException $e) {
			echo 'Fehler: ' . htmlspecialchars($e->getMessage());
		}
    }

Die Variable, die ich "$unklareVariable" genannt habe ist mir tatsächlich unklar. Sie wird zugewiesen, kommt aber nirgends zum Einsatz?

Davon abgesehen hatte ich beim Umschreiben noch Fehler im try-Block, aber der catch-Block funktionierte nicht. Was ich so ergoogelt habe ist das try/catch in PHP auch nicht vorgesehen. Wieso wird das dannin dem Buch verwendet, bzw. wenn mittlerweile doch, warum kam er nicht zur Anwendung?

Das Datenbankverbindung schließe, also $db_connect->close(); kommt in dem Beispiel nicht vor, finde das aber sauberer. Oder braucht es das gar nicht, bzw. ist aus anderen Gründen Blödsinn?

Thema: Kein externes Zugriff auf die MySQL-Datenbank bei IONOS
Am im Forum: Datentechnologien

Danke für deine Worte.

Also das gepostete PHP-Script ist natürlich vom Webinterface und hat nichts mit der C#-Anwendung zu schaffen. Deswegen hatte ich es nie erwähnt. Ich hatte das nur gepostet, weil JimStark (mehr oder weniger) danach gefragt hat. Das PHP-Script, dass mit C# zusammen arbeiten soll müsste ich erst noch erstellen und wird dann auch nur Update-Befehle ausführen, keine Inserts und keine Deletes! (Anlegen der Computer in der Datenbank (mit Seriennummer) und Löschen erfolgen über das Webinterface). Ob die C#-Anwendung ein Select benötigtet muss ich gucken, ich glaube aber nicht. Ich wollte aber erstmal abklären, ob das mit PHP überhaupt Sinn ergibt, bevor ich das mache nur um es am Ende enttäuscht in die Tonne treten zu müssen.

Wenn wir aber schon dabei sind, einfach kurz zwischenrein:
Bist du noch so nett und sagst mir, was an dem geposteten PHP-Script nicht optimal ist? Bislang hieß es immer PDO sei sicher und man muss sich nicht wie bei MYSQL, bzw. MySQLi um das absichern der Variablen und Strings kümmern, weil das by design schon gegeben ist. Deswegen habe ich mich auch da umgestellt und den Absprung von der alten Methode geschafft. Gilt das nicht mehr?

Was ich inzwischen noch gemacht habe ist, den $db_connect erst innerhalb der if(isset($_POST['computerSave']))-Variable zu setzen. Ich glaube das ist aber egal, erscheint mir nur logischer vom Ablauf her.

Thema: Kein externes Zugriff auf die MySQL-Datenbank bei IONOS
Am im Forum: Datentechnologien

Ja, ihr gebt mir wertvolle Tipps und Hilfestellungen. Das merke ich und versuche auch damit zurecht zu kommen. Aber ich fühle mich total überfordert :(. Das Tutorial von der Microsoft-Seite verstehe ich nicht. Ich suche einfach ein ordentliches Beispiel, wo das ganze anschaulich, möglichst auch noch deutsch weil kompliziert genug, erklärt wird.

Warum ich PHP dafür verwenden will? Naja, bin zufällig drauf gestoßen und da ich PHP (mehr oder weniger) auch gut kann und mir vertraut ist und das scheinbar auch ohne Umwege funktioniert dachte ich, dass man das auch so machen kann. C#-Anwendung schickt Anfrage an PHP-Script-> PHP-Script macht die Datenbankeintrag. Einfacher könnte es für mich nicht sein und ich konnte den Vorgang nachvollziehen und habs verstanden.

Thema: Kein externes Zugriff auf die MySQL-Datenbank bei IONOS
Am im Forum: Datentechnologien

Ich habe endlich ein Video gefunden und ich glaube es sogar verstanden zu haben. Taugt das was? Sieht sehr einfach aus.
Wäre vielleicht noch cool, wenns per post gehen würde, anstatt über get.

Edit: Das hier scheint besser zu sein, sogar mit Rückmeldung an die WinForm

Thema: Kein externes Zugriff auf die MySQL-Datenbank bei IONOS
Am im Forum: Datentechnologien

Die Webseite habe ich gemacht und hält neben dem üblichen HTML und CSS eigentlich nur den PHP-Block zur Abfrage der Daten aus der Datenbank. Der einzige Insert der statt findet ist eigentlich nur die Seriennummer des Rechners die ich eintrage (und über die findet das Programm dann den passenden Rechner) und einige Daten, die die Buchhaltung eintragen kann (Rechnungsdatum, Kostenstelle...) Mehr passiert da nicht. Sieht so aus (Noch nicht fertig, fehlt jegliche Rechteprüfung) Ich hoffe ihr schlagt hier nicht auch schon wieder direkt die Hände überm Kopf zusammen. "control" steht in dem Fall für das "Controlling", nicht für ein Steuerelement.


<?php session_start();

# Diese Datei enthält Funktionen, welche für das Script zwingend benötigt werden.
require_once("../functions.inc.php");
# Diese Datei enthält die Fehlercodes.
require_once("../codes.php");

# Datenbankverbindung herstellen
$db_connect = db_connect();

// Prüfen, ob das Formular abgeschickt wurde.
if(isset($_POST['computerSave'])) {

	// Prüfen, ob Seriennummer gesetzt ist.
	if(empty($_POST['computerSerial'])) {
		# Code 13 = "Es wurden nicht alle Pflichtfelder ausgefüllt."
		$_SESSION['code'] = 13;
		header("Location: http://".$_SERVER['HTTP_HOST']."/computer/show.php"); exit;
	}
        # Prüfen, ob der Computer bereits angelegt wurde
        $db_read = $db_connect->prepare('select computerSerial from db_computer where computerSerial=?');
        $db_read->execute([$_POST['computerSerial']]);
        $number = $db_read->rowCount();
        # Falls ein Eintrag gefunden wurde, Vorgang abbrechen
        if($number ≥ 1){
            # Code 30 = Den Computer gibt es bereits."
            $_SESSION['code'] = 30;
            header("Location: http://".$_SERVER['HTTP_HOST']."/computer/show.php"); exit;
        }
    else {
        $db_insert = $db_connect->prepare("Insert into db_computer (computerSerial, controlBillDate, fk_controlCostcentre, controlInvestmentNumber, controlCheckNumber, controlExpires, otherComment, controlFirstEntry) VALUES (:computerSerial, :controlBillDate, :fk_controlCostcentre, :controlInvestmentNumber, :controlCheckNumber, :controlExpires, :otherComment, :controlFirstEntry)");
        $db_insert->execute([
            'computerSerial' => $_POST['computerSerial'],
            'controlBillDate' => $_POST['controlBillDate'],
            'fk_controlCostcentre' => $_POST['fk_controlCostcentre'],
            'controlInvestmentNumber' => $_POST['controlInvestmentNumber'],
            'controlCheckNumber' => $_POST['controlCheckNumber'],
            'controlExpires' => $_POST['controlExpires'],
            'otherComment' =>  $_POST['otherComment'],
            'controlFirstEntry' => date('Y-m-d')
        ]);

		# Code 10 = "Eintrag gespeichert."
		$_SESSION['code'] = 10;
		header("Location: http://".$_SERVER['HTTP_HOST']."/computer/show.php"); exit;
    }
}
else
{
	header("Location: http://".$_SERVER['HTTP_HOST']."/computer/show.php"); exit;
}
$db_connect->close();
?>

Thema: Kein externes Zugriff auf die MySQL-Datenbank bei IONOS
Am im Forum: Datentechnologien

OK, Danke.

Das Problem war, dass ich überhaupt nicht wusste, wie es jetzt weitergehen soll. Die Antwort, dass es "nur" um die Übertragung der Daten geht hat mir jetzt geholfen. Jetzt komme ich hoffentlich erstmal weiter. Ich habe hier auch ein Buch (Einstieg in C# mit Visual Studio 2019), aber leider wird das Thema da nicht erklärt. Nur wie man in eine MySQL-Datenbank schreibt die "ohne Hindernisse" zugänglich ist. Es gibt zwar ein Kapitel "9.9 Datenbank im Internet ändern", aber das beinhaltet was ganz anderes. Schade, dass so etwas nicht erklärt wird. Das Stichwortverzeichnis gibt auch nichts her, wenn nach Rest API oder Web API sucht.

Ich lese also schon auch selbst und lasse mir nicht alles vorkauen. Es ist mir wichtig hier nicht den falschen Eindruck zu vermitteln, wenn ich blöde oder scheinbar ganz offensichtliche Fragen stelle.

Edit: Kann es sein, dass das Thema selbst in diesem umfassenden Handbuch nicht behandelt wird oder suche ich im Inhaltsverzeichnis nach etwas, das dort anders bezeichnet ist?

Kennt jemand Linkedin Learning und weiß zufällig, ob dort das Thema anschaulich erklärt wird?

Thema: Kein externes Zugriff auf die MySQL-Datenbank bei IONOS
Am im Forum: Datentechnologien

Wieso wäre meine Umsetzung unseriös, wenn das Angebot an sich seriös ist? Schließt sich meiner Meinung nach dann aus.

Das mit der WebAPI habe ich absolut nicht kapiert. Muss ich das zusätzlich in meine Anwendung einbauen? Muss ich meine Anwendung über Board werfen und neu anfangen? Wie greife ich über eine Webanwendung auf WMI und Registry des Systems zu? Was steckt da überhaupt dahinter? Ist es noch WinForms?

Entschuldige bitte, wenn ich etwas nerve. Du hast es mit einer Person zu tun, die über einen sehr niedrigen Wissensstand in der Programmierung verfügt und der auch das so genannte "logische Denken" fehlt. Ich will es können, tue mich aber leider sehr schwer.

Thema: Kein externes Zugriff auf die MySQL-Datenbank bei IONOS
Am im Forum: Datentechnologien

Danke für deine Antwort, auch wenn es natürlich nicht das ist, was ich lesen wollte :D.

Ich habe noch einige Fragen, weil ich mich jetzt zwangsweise angefangen habe mit der Thematik zu befassen und verzweifelt irgend eine Lösung suche.
1) Es gibt Anbieter im Internet, die Remote-Zugriff auf die Datenbank erlauben. Beispielsweise Cloudways oder Fritz Managed IT GmbH Ist das per se unseriös?

2) Ich weis nicht, ob es einen Unterschied macht, aber im Grunde müssen zwar die Daten die die Anwendung sammelt irgendwie in die Datenbank gelangen, aber zum Abrufen der Daten würde es reichen, wenn das nur von einer einzigen IP aus möglich ist. Wir haben eine feste IP. Das Eintragen von Daten könnte man auf IPs aus der Region Baden-Württemberg beschränken. Woanders sind unsere Leute, auch jene mit Laptops, nicht. (wenn es da solche Filter gibt (Cloudways schreibt hier was davon, aber nur für SSH und SFPT, müsste man also erfragen, ob das auch für die Datenbank möglich ist).

3) Es wäre kein Problem für mich den Webserver im eigenen Netzwerk der Geschäftsstelle verfügbar zu machen. Dort will ich die Daten ja abrufen. Einen OpenVPN-Server gibt es, eine feste IP haben wir auch. Ich konnte aber kein Ergebnis finden, wo es möglich ist, dass man eine C#-Anwendung so programmieren kann, dass diese eine VPN-Verbindung aufbaut und auch nur diese Anwendung dann das VPN nutzt. Über Nu-Get findet sich dahingehend auch kein Paket. Geht also nicht?

4) In einem YouTube-Video wird gezeigt, wie man mittels SSH auf einen MySQL-Server zugreift. Mit SSH kenne ich mich aber nicht aus. Ich kenne das nur als Zugriffsmöglichkeit bei einigen IoT-Geräten. Wenn man SSH aber direkt beim Router zum MySQL-Server durchschleift hat das doch ohnehin den gleichen Effekt, als wenn ich den Server direkt offen ins Netz stelle. SSH ist ja nur ein anderes Protokoll. Also völlig schwachsinnig?

5) Warum ist ein Datenbankserver im Internet unsicherer als ein SFTP-, Web- oder Mailserver? Was ist der Unterschied?

6) Gibt es Möglichkeiten eine Datenbank, die man remote zugänglich machen will vernünftig abzusichern, beispielsweise in dem man einen Key in seine Anwendung einbaut der (neben Benutzername und Passwort natürlich) zur Authentifizierung abgefragt wird und das ein Zugriff nur zu bestimmten Uhrzeiten möglich ist, oder der Hashwert der anwendung geprüft wird, etc.

Das verlinkte Tutorial habe ich leider absolut nicht kapiert. Ich danke euch schonmal.

Thema: Kein externes Zugriff auf die MySQL-Datenbank bei IONOS
Am im Forum: Datentechnologien

Verwendetes Datenbanksystem: MySQL 5.7 beim Provider IONOS

Ich habe mir in mühevoller Kleinarbeit ein Inventarisierungsprogramm in C# geschrieben, dass jetzt fast fertig ist. Nun wollte ich die ersten Daten in unsere MySQL-Datenbank speichern und eine Verbindung aufbauen. Schon das funktioniert nicht. Aus Sicherheitsgründen lässt IONOS keine externen Programme zu, sondern nur direkt über den Webspace.

Auf dem Webspace läuft schon die Webseite, wo ich die Daten aus der Datenbank abfragen und anzeigen kann.

Tja, jetzt stehe ich ziemlich doof da, weil die ganze Arbeit scheinbar völlig umsonst war Weiß vielleicht jemand was ich nun machen kann? Klar, mein Arbeitgeber könnte einen Root-Server mieten, aber ist das nicht etwas weit ausgeholt? Außerdem bin ich eher Hobbyprogrammierer und Scripter (deswegen auch die mühevolle Kleinarbeit) und würde von daher nicht behaupten, dass meine Scripte und Anwendungen absolut sicher sind. Ich schätze mal die Angriffsmöglichkeiten sind außerhalb der IONOS Bubble deutlich größer und ein starkes Passwort alleine wird mich nicht schützen wenn ich einen Root-Server miete.

Vielleicht kann jemand von euch das Projekt noch retten und hat eine Idee, was machbar ist.

Edit: Noch eine Ergänzung: Das Programm soll bei jedem Systemstart ausgeführt werden und aktuelle Inventardaten in die Datenbank eintragen. Wir haben mehrere Startorte und auch Mobile Arbeitsplätze. Einfach einen Server ins Intranet stellen ist also keine Möglichkeit.