UpdateSystem.Net Tutorial

    • Allgemein

    Es gibt 35 Antworten in diesem Thema. Der letzte Beitrag () ist von flori2212.

      UpdateSystem.Net Tutorial

      Hallo,
      ich dachte, machste mal nen Tutorial zu UpdateSystem.Net. Was behandelt wird:

      • Wieso UpdateSystem.Net?
      • Einrichtung
      • Integration in Windows Forms Anwendungen über das Standardfenster
      • Integration in WPF
      • Erstellen von Updatepaketen

      Voraussetzung:

      Wieso UpdateSystem.Net?



      Vielleicht wird sich ja jemand fragen, wieso er dies hier nehmen soll, statt einfach einer Textdatei auf einem FTP-Server . Meine Frage: Wieso nicht? UpdateSystem.Net bietet eine super Verwaltung für Updatepakete, Statistiken, ... Außerdem ist es, wenn man erstmal mit der einmaligen Einrichtung fertig ist, ein Kinderspiel, auf Updates zu prüfen, etc. Aber es gibt noch einen Grund, der sehr viel wichtiger ist als das, was ich gerade genannt habe: Die Sicherheit. Die Updatepakete werden bei der Erstellung mit einer 4096-Bit starken RSA Signatur versehen, welche während dem Update gegengeprüft wird. So ist es fast unmöglich für Hacker, die eure Zugangsdaten haben, einen Virus als Update einzuschleusen.


      Einrichtung



      Als erstes müssen wir uns UpdateSystem.Net downloaden. Das könnt ihr unter folgendem Link tun:
      updatesystem.net/Download/
      Leider ist die Website von UpdateSystem.Net nicht mehr verfügbar. Ihr könnt das ganze hier downloaden:
      dropbox.com/s/8mkgbeektv842jv/…System.NET.Setup.exe?dl=0
      Mirror (weil Dropbox regelmäßig die Links sperrt, weil die zu viel Traffic verursachen):
      1drv.ms/u/s!Ar7zxsseW6UlgdVgsGQbdvbhA6uGSA


      Nach dem die Datei auf eurer Festplatte ist, startet ihr diese, stimmt der Lizenz zu, Spendet ggf., wählt den Pfad aus und klickt auf Installieren. Wenn es fertig Installiert ist, schließen wir das Fenster und starten das Programm. Anschließend klicken wir auf "Neues Projekt":



      Es öffnet sich nun ein neues Fenster, wo ihr den Namen der Anwendung, die Update Url und den Pfad des Projekts auswählen könnt.
      Die Url ist einfach der Link zu eurem Webspace, wo ihr die Pakete drin speichern wollt.



      Im nächsten Schritt können wir uns entscheiden, ob wir Statistiken haben wollen (wie viele Downloads pro Tag etc.). Ich wähle "Statistikerfassung aktivieren", wenn ihr das nicht braucht könnt ihr den folgenden Schritt einfach überspringen.

      Nachdem wir den Radiobutton ausgewählt haben wird die Schaltfläche "Server auswählen" aktiviert. Da klicken wir drauf:



      Nun erscheint ein neues Fenster, wo wir auf "Neuen Statistikserver erstellen" klicken. Es poppt ein weiteres Fenster auf, wo wir PHP und MySQL auswählen. Vorraussetung ist, dass eurer Webspace midestens PHP5 und MySQL 4 hat.




      Nach einem Klick auf "Weiter" müssen wir unsere FTP-Daten eingeben:



      Um die Daten zu testen könnt ihr den Button "Server durchsuchen" anwählen. Dort könnt ihr auch euer Statistikverzeichnis festlegen. Wir klicken wieder auf "Weiter" und geben bei "Server Adresse" den HTTP-Pfad zu unserem Statistikordner an. Anschließend wählen wir einen beliebigen Benutzernamen und ein Passwort aus, welches wir wiederholen müssen:



      Als letzten Schritt müssen wir noch unsere SQL-Daten angeben. Dazu müssen wir auf unserem Webspace zuerst eine neue Datenbank anlegen. Dies ist bei jedem Hoster anders, deswegen werde ich das hier auch nicht beschreiben. Als Tabellennamen geben wir irgendeinen Namen ein, aber es darf noch keine Tabelle mit gleichem Namen vorhanden sein:



      Wir klicken nun auf "Weiter", dann nochmal auf "Weiter" und nun werden die Dateien hochgeladen und die Tabelle wird erstellt. Wenn alles fertig ist klicken wir wieder auf "Weiter" und nun ist unter "Statistiken verwalten" ein neuer Eintrag:



      Wir klicken auf "OK" und anschließend in der Form "Neues Projekt erstellen" auf "Weiter".



      Diesmal wählen wir allerdings unseren Ordner für die Updatepakete aus. Nach einem erneuten Klick auf "Weiter" klicken wir auf die Schaltfläche "Server einrichten":



      Nach einem erneuten Klick auf "Weiter" sind wir auch schon fertig und unser Projekt wird geöffnet.



      Integration in Windows Forms Anwendungen über das Standardfenster



      Als ersten Schritt erstellen wir ein neues Projekt. Dann fügen wir unserer Toolbox das UpdateSystemController-Control hinzu. Die Assembly ist standardmäßig unter
      C:\Program Files\updateSystem.NET\updateSystemDotNet.Controller.dll zu finden. Nun ziehen wir das Control ganz einfach per Drag & Drop auf das Fenster:



      Anschließend öffnen wir das Programm UpdateSystem.Net, klicken auf "Projekteinstellungen kopieren" und anschließend auf "Daten kopieren":



      Nun gehen wir wieder in unser VB-Projekt, klicken auf den Pfeil von UpdateController1 und klicken auf den Text "Projekteinstellungen aus der Zwischenablage einfügen". Nun werden im Eigenschaftsfenster einige Eigenschaften verändert.



      Wie müssen noch dem Control klar machen, welche Version wir zurzeit haben. Das geht entweder über die Assemblyversion oder ihr könnt direkt dem Control die Version mitteilen über einen String. Wir nehmen die Assemblyversion und das machen wir klar, indem wir retriveHostVerison auf True setzten. (Benutzerdefiniert würde über releaseInfo -> Version gehen)

      Tipp: Die Assembly-Version könnt ihr unter My-Project > AssemblyInformationen... > Assemblyversion verändern.

      Jetzt müssen wir nur noch an der Stelle, wo wir auf Updates überprüfen wollen, folgendes hinschreiben:

      VB.NET-Quellcode

      1. UpdateController1.updateInteractive()


      Zum Schluss könnt ihr noch folgende Zeile Code bei der Initialisierung schreiben:

      VB.NET-Quellcode

      1. UpdateController.autoCloseHostApplication = True

      dann schließt sich die Anwendung automatisch, wenn ein Update durchgeführt wird.

      Integration in WPF



      Jetzt wollen wir natürlich auch unsere WPF-Anwendungen Updaten. Dieser Abschnitt beschreibt, wie ihr einen eigenen Dialog erstellen könnt. Dieser Abschnitt ist also auch Interessant für Spiele und für Anwendungen, die andere Themes verwenden oder für die, die das Design vom Standarddialog unschön finden. Also dieser Abschnitt richtet sich nicht nur an WPFler.

      Als erstes erstellen wir ein neues WPF-Projekt, wo wir den updateSystemDotNet.Controller als Verweis hinzufügen, welcher standardgemäß unter folgendem Pfad zu finden ist:
      C:\Program Files\updateSystem.NET\updateSystemDotNet.Controller.dll

      Wir wechseln direkt in die Codeansicht, wo wir in das Event Loaded den Code aus UpdateSystem.Net Programm > Projekteinstellungen kopieren > VB.NET Code reinkopieren. Es sollte nun ungefähr so aussehen:

      VB.NET-Quellcode

      1. Class MainWindow
      2. Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
      3. 'updateController Objekt initialisieren
      4. Dim updController As New updateSystemDotNet.updateController()
      5. updController.updateUrl = "http://Server.net/Update/"
      6. updController.projectId = "ProjektID"
      7. updController.publicKey = "Key"
      8. 'Releasefilter setzen, per Default wird nur nach finalen Versionen gesucht:
      9. updController.releaseFilter.checkForFinal = True
      10. updController.releaseFilter.checkForBeta = False 'Betaversionen in die Suche mit einbeziehen? Wenn ja dann auf true setzen.
      11. updController.releaseFilter.checkForAlpha = False 'Alphaversionen in die Suche mit einbeziehen? Wenn ja dann auf true setzen.
      12. 'Anwendung nach dem Update neustarten?
      13. updController.restartApplication = True
      14. 'Wie soll die lokale Version ermittelt werden?
      15. updController.retrieveHostVersion = True 'Empfohlen, damit wird automatisch die Assemblyversion ermittelt.
      16. 'Die Version kann allerdings auch manuell gesetzt werden:
      17. 'z.B.: updController.releaseInfo.Version = "1.2.3.4"
      18. 'Einfacher Aufruf der Updatesuche:
      19. 'updController.updateInteractive()
      20. End Sub
      21. End Class


      Den UpdateController deklarieren wir aber als Member-Variable und als WithEvents:

      VB.NET-Quellcode

      1. Class MainWindow
      2. Private WithEvents updController As New updateSystemDotNet.updateController()
      3. Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
      4. '...


      Anschließend rufen wir in der FormLoad noch updController.checkForUpdatesAsync() auf. Jetzt brauchen wir das Event updateFound. Dieses wird, wie der Name schon sagt, ausgelöst, wenn ein neues Update gefunden wurde.
      Jetzt können wir ein neues Fenster hinzufügen, welches das Changelog etc. anzeigt. Hier mal eine Liste, wie ihr die Informationen bekommt, die auch in dem fertigen WinForms Dialog zu sehen sind:


      Aktuelle Version:

      VB.NET-Quellcode

      1. System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString()


      Neuste Version:

      VB.NET-Quellcode

      1. updController.currentUpdateResult.newUpdatePackages(updController.currentUpdateResult.newUpdatePackages.Count - 1).releaseInfo.Version


      Größe und Changelog:

      VB.NET-Quellcode

      1. Dim size As Long = 0
      2. Dim sb As New Text.StringBuilder
      3. For Each package As updatePackage In updController.currentUpdateResult.newUpdatePackages
      4. 'IntelliSense und der Objectbrowser helfen euch, weitere Informationen über das package auszugeben
      5. sb.Append("Änderungen in der Version " & package.releaseInfo.Version & " (Veröffentlicht am: " & package.ReleaseDate.Remove(package.ReleaseDate.Length - 10) & ")" & _
      6. Environment.NewLine & "------------------------------" & Environment.NewLine & updController.currentUpdateResult.Changelogs(package).germanChanges & Environment.NewLine)
      7. size += package.packageSize
      8. Next
      9. Dim roundsize As Double
      10. roundsize = size \ 1024
      11. roundsize = roundsize / 1024
      12. 'Größe = Math.Round(roundsize, 2).ToString & " MB"
      13. 'Changelog = sb.ToString()


      Updates downloaden:

      VB.NET-Quellcode

      1. updController.downloadUpdates()


      Updates ausführen:

      VB.NET-Quellcode

      1. updController.applyUpdate()


      Updates abbrechen:

      VB.NET-Quellcode

      1. updController.cancelUpdateDownload()


      Ein Beispielprojekt könnt ihr euch hier downloaden.


      Erstellen von Updatepaketen




      Und nun kommt der wichtigste Teil, das erstellen von Updatepaketen. Durch UpdateSystem.Net ist das super einfach. Ihr geht im UpdateSystem.Net Programm auf "Updatepakete" (Links im TabControl) und anschließend auf "Hinzufügen".




      Nun könnt ihr als erstes einstellen, welche Version des Programms im Updatepaket enthalten ist. Danach könnt ihr den Typ auswählen (Also Alpha/Beta/Final). Wenn das Paket für ein spezielles Bit-System kompeliert/erstellt wurde, könnt ihr das unter Architektur auswählen. Die Beschreibung ist für euch, die wird in der Liste der Updatepakete angezeigt. Der Rest ist schon beschrieben.

      Unter dem nächsten Tab, Verfügbarkeit, könnt ihr einstellen, welche Versionen das Update bekommen sollen:




      Als nächstes kommt der Tab Änderungen. Ihr könnt das Changelog für zwei Sprachen machen, Deutsch und Englisch. In eurem Programm wird dann das angezeigt, was eingestellt wurde.




      Ihr könnt eigene Felder hinzufügen, welche ihr über euren UpdateController mit package.customFields abrufen könnt.




      Und nun kommt das wichtigste: Die Aktionen. Hier könnt ihr einstellen, was das Updatepaket machen soll. Ich denke, das meiste erklärt sich von selbst. Wenn ihr einen Pfad eingeben müsst, habt ihr Pfadvariablen, die ich hier einmal kurz erläutern möchte:



      $approot: Programmverzeichnis
      Beschreibung: Also der Ordner, wo eure Anwendung drin ist.

      $tempdir: Temporäresverzeichnis
      Beschreibung: Dies ist der Tempordner, welcher u. a. durch %temp% erreicht werden kann.

      $windir: Windowsverzeichnis
      Beschreibung: Das Windows-Installationsverzeichnis. Standardgemäß ist dies unter C:\Windows

      $appdata: Anwendungsdaten
      Beschreibung: Dies ist der AppData ordner, welcher u. a. durch %appdata% erreicht werden kann.

      $commonAppdata: Gemeinsame Anwendungsdateien
      Beschreibung: Der Programmdata-Ordner. Dieser ist Standardgemäß unter C:\ProgramData






      Experimentiert einfach ein bisschen rum.


      Wenn jemand euer Update downloadet oder eine Anfrage sendet, ist dies, falls eingestellt, unter den Statistiken zu sehen:



      Schlusswort




      Ich hoffe, ihr habt alles verstanden. Wenn ihr Rechtschreibfehler findet, könnt ihr mir die gerne per PN schreiben. Wenn ihr fragen habt, stellt sie im Hauptforum.
      Mfg
      Vincent

      Dieser Beitrag wurde bereits 9 mal editiert, zuletzt von „VincentTB“ ()

      Ich Frage mich dennoch wieso die (offizielle) Step by Step Hilfe nicht reicht?
      Die behandelt doch genau das, was in diesem Tutorial steht.
      Mfg: Gather
      Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


      Aber die behandelt weder die genau Einrichtung anhand Beispielen noch wie man ein eigenes UI erstellt. Erfahrenere Benutzer wie du kommen da von selbst drauf, aber ich wollte es gerade für Anfänger etwas erleichtern. Nimm es als etwas ausführlichere Anleitung für Anfänger und WPFler.
      Mfg
      Vincent

      Hallo ,

      ich habe probleme mit dem Designer unswar kommen diese Fehlermeldungen :
      Fehler 1 "applicationLocation" ist kein Member von "Audiom2.updateSystemDotNet.updateController". C:\Users\Benutzer\Documents\Visual Studio 2010\Projects\Audiom2 - Kopie\Audiom2\Form1.Designer.vb 142 9 Audiom2
      Fehler 2 "projectId" ist kein Member von "Audiom2.updateSystemDotNet.updateController". C:\Users\Benutzer\Documents\Visual Studio 2010\Projects\Audiom2 - Kopie\Audiom2\Form1.Designer.vb 143 9 Audiom2
      Fehler 3 "proxyPassword" ist kein Member von "Audiom2.updateSystemDotNet.updateController". C:\Users\Benutzer\Documents\Visual Studio 2010\Projects\Audiom2 - Kopie\Audiom2\Form1.Designer.vb 144 9 Audiom2
      Fehler 4 "proxyUrl" ist kein Member von "Audiom2.updateSystemDotNet.updateController". C:\Users\Benutzer\Documents\Visual Studio 2010\Projects\Audiom2 - Kopie\Audiom2\Form1.Designer.vb 145 9 Audiom2
      Fehler 5 "proxyUsername" ist kein Member von "Audiom2.updateSystemDotNet.updateController". C:\Users\Benutzer\Documents\Visual Studio 2010\Projects\Audiom2 - Kopie\Audiom2\Form1.Designer.vb 146 9 Audiom2
      Fehler 6 "publicKey" ist kein Member von "Audiom2.updateSystemDotNet.updateController". C:\Users\Benutzer\Documents\Visual Studio 2010\Projects\Audiom2 - Kopie\Audiom2\Form1.Designer.vb 147 9 Audiom2
      Fehler 7 "releaseFilter" ist kein Member von "Audiom2.updateSystemDotNet.updateController". C:\Users\Benutzer\Documents\Visual Studio 2010\Projects\Audiom2 - Kopie\Audiom2\Form1.Designer.vb 148 9 Audiom2
      Fehler 8 "releaseFilter" ist kein Member von "Audiom2.updateSystemDotNet.updateController". C:\Users\Benutzer\Documents\Visual Studio 2010\Projects\Audiom2 - Kopie\Audiom2\Form1.Designer.vb 149 9 Audiom2
      Fehler 9 "releaseFilter" ist kein Member von "Audiom2.updateSystemDotNet.updateController". C:\Users\Benutzer\Documents\Visual Studio 2010\Projects\Audiom2 - Kopie\Audiom2\Form1.Designer.vb 150 9 Audiom2
      Fehler 10 "releaseInfo" ist kein Member von "Audiom2.updateSystemDotNet.updateController". C:\Users\Benutzer\Documents\Visual Studio 2010\Projects\Audiom2 - Kopie\Audiom2\Form1.Designer.vb 151 9 Audiom2
      Fehler 11 "requestElevation" ist kein Member von "Audiom2.updateSystemDotNet.updateController". C:\Users\Benutzer\Documents\Visual Studio 2010\Projects\Audiom2 - Kopie\Audiom2\Form1.Designer.vb 152 9 Audiom2
      Fehler 12 "updateUrl" ist kein Member von "Audiom2.updateSystemDotNet.updateController". C:\Users\Benutzer\Documents\Visual Studio 2010\Projects\Audiom2 - Kopie\Audiom2\Form1.Designer.vb 153 9 Audiom2
      Verweiß habe ich auch hinzufügt , aber immerhin bekomme ich noch diese 12 Fehler.
      Ich bin bis zu der Integration in WPF angehalten.
      Es wäre echt nett wenn mir jemand helfen würde . Mit freundlichen Grüßen thelord189

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „thelord189“ ()

      MarvinKleinMusic schrieb:

      ​Und wie kann man die Updatesuche im hintergrund laufen lassen, ohne das das Fenster aufpoppt "Suche nach Aktualisierungen"

      Siehe dazu: Integration in WPF. Da läuft das ganze dann manuell ab.
      Mfg
      Vincent

      Simples Problem - lässt sich das Tool überhaupt in Verbindung mit einem Proxy verwenden?
      Es gibt soweit ich das sehen kann keine Einstellungen wo sich ein Proxy einstellen lässt.

      Ich meine jetzt in der Administrationsoberfläche, mit welcher man die Versionen verwalten kann.

      Bei der Erstellung eines neuen Projekts muss schließlich eine Verbindung zum FTP Server aufgebaut werden.
      Super Tutorial! :)
      Aber ich muss mir hierfür zwangsweise einen Webspace mieten, oder? Gibt es da gute kostenlose?
      Es existiert ein Interesse an der generellen Rezession der Applikation relativ primitiver Methoden komplimentär zur Favorisierung adäquater komplexer Algorithmen.
      ------------------------------------------------------------------------------------
      Rising Existence - das GTA V-MP Projekt mit Zukunft und Innuvation
      Achso, vielen Dank! Habe ich glatt übersehen... :/
      Es existiert ein Interesse an der generellen Rezession der Applikation relativ primitiver Methoden komplimentär zur Favorisierung adäquater komplexer Algorithmen.
      ------------------------------------------------------------------------------------
      Rising Existence - das GTA V-MP Projekt mit Zukunft und Innuvation
      @VincentTB Auf der Homepage findet sich die Version 1.5.X - welche definitiv keinen Proxy unterstützt.

      Es gibt jedoch unter beta.updatesystem.net/Download/ eine neuere 1.6.X Version, bei welcher jedoch die Proxyunterstützung nicht korrekt funktioniert. Es handelt sich dabei aber auch um eine Beta, die wie es scheint nicht weiter entwickelt wird.

      Prinzipiell wird das Projekt nicht mehr weiterentwickelt. Der Bugtracker ist komplett offline, das Forum inaktiv / mit keinem Support mehr.
      Ich wüsste ehrlich gesagt wirklich nicht, wozu man bei nem Updatesystem nen Proxy braucht. Ich meine, man lädt nur Pakete hoch und vielleicht mal ne Konfiguration runter und das war's dann.
      Das ist imo nicht notwendig, drum baue ich das bspw. gar nicht in meinen Updater ein. ;)
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
      Ich habe ein Problem bei mir. Kann mir jemand von euch sagen wie das zu beheben ist?
      Nachdem ich alles so wie du gemacht habe, und bei mir im VS mein Programm starte gibt die Update-Suche einen Error:

      Quellcode

      1. Bei der Updatesuche ist ein Problem aufgetreten: Der Objektverweis
      2. wurde nicht auf eine Objektinstanz festgelegt.

      ?(

      Außerdem würde ich mich freuen wenn mir einer den Tab "Aktionen" beim erstellen eines Update-Paketes genauer erklären könnte. Muss ich da nicht "Dateien kopieren oder ersetzen" nehmen? Verstehe das dort nicht so ganz, sorry. :/
      Es existiert ein Interesse an der generellen Rezession der Applikation relativ primitiver Methoden komplimentär zur Favorisierung adäquater komplexer Algorithmen.
      ------------------------------------------------------------------------------------
      Rising Existence - das GTA V-MP Projekt mit Zukunft und Innuvation
      Bei den Aktionen musst Du das nehmen ja, wenn Du halt dann die Dateien bzw. Ordner angeben willst, die das alte Zeugs ersetzen.
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
      @Trade Du denkst zu einfach. In Firmennetzwerken ist es zum Beispiel möglich, dass alle Internetverbindungen zwingend über einen Proxy laufen.

      Folglich müssen alle Programme die genutzt werden auch Proxyunterstützung bieten - was soweit ich das sehe bei jedem aktuellen FTP Client der Fall ist.
      Ergo muss dies auch bei einer Administrationsoberfläche für ein Updatesystem, welches per FTP die Updates hochlädt, möglich sein.

      Bedenke das bitte und berücksichtige es in deiner nUpdate Lib.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „FireEmerald“ ()

      Hallo,

      ich nutze diesen Updater um ein Programm zu aktualisieren. (Dateien werden durch neue ersetzt) Was auch super funktioniert. Doch die Versionsnummer aktualisiert sich nicht, daher will der jedesmal die Updates installieren. Kann mir dabei wer helfen oder braucht ihr nähere Informationen?

      LG
      Du musst die Assembly-Version der Anwendung jedes mal ändern. Das machst du hier:



      (Vorausgesetzt du hast retrieveHostVersion = True)
      Mfg
      Vincent

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VincentTB“ ()

      Also erst mal Respekt für ein so qualitatives, aber trotzdem einfaches Programm! Es funktioniert einwandfrei. Ich habe nur eine Frage: Welche Daten werden zum Server übertragen (bei aktivierter Statistik)? Ich benötige diese Information für die Datenschutzklausel.
      Alle Angaben sind ohne Gewähr und mit Pistole. Glücksspiel und Drogen können süchtig machen. Weitere Infos unter spielen-mit-verantwortung.de und kenn-dein-limit.de.
      Also, ich bin nicht der Entwickler dieses Programms, hab mich aber mal schlau gemacht. Anscheinend wird während des Updatevorgangs die sendStatistics.php-Datei aus dem Update\Statistics Ordner aufgerufen (konnte den entsprechenden Code auf GitHub nicht finden, ist aber sehr, sehr wahrscheinlich). Ein Beispielaufruf wäre sendStatistics.php?projectId=123&requestType=1&appVersion=1.2&osVersion=6.1. In die Datenbank wird folgendes eingetragen:

      PHP-Quellcode

      1. $result = mysql_query("
      2. INSERT INTO " . dbTable . "
      3. (`projectId`, `requestDate`, `requestType`, `appVersion`, `osVersion`) VALUES" .
      4. "('" . $projectId . "'," . //Projekt-ID
      5. "'" . $currentDate . "'," . //Requestdate
      6. "'" . $requestType ."'," . //requestType
      7. "'" . $appVersion . "',". //appVersion
      8. "'" . $osVersion . "')"//osVersion
      9. ) or $helper->returnResponse("-1", mysql_error());


      Sollte denke ich alles klar sein :)
      Mfg
      Vincent