Lizenzsystem mit VB 2010, PHP und MySQLi

    • VB.NET

    Es gibt 81 Antworten in diesem Thema. Der letzte Beitrag () ist von Manawyrm.

      $mysqli wird offenbar nirgends definiert, wenn du es nicht in der dbdaten.php machst.
      „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

      -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
      Nur so ein Frage am Rande: Hoffst du ernsthaft, dass du durch diese Rumfrickelei ein brauchbares System bekommst? Wenn irgendwann nochmal ein Problem auftritt, wirst du nicht mal im Ansatz in der Lage sein, es selbst zu lösen (in Anbetracht der bisherigen Laufzeit dieser Diskussion).
      „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

      -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
      Die Daten werden ja bereits in der dbdaten.php definiert. Die brauchst du dann da nicht mehr reinzuschreiben.

      PHP-Quellcode

      1. <?php
      2. require_once "../sicher/dbdaten.php";
      3. $mysqli = new mysqli(datenbank,benutzername,passwort,server);
      4. if($mysqli->connect_error) {
      5. echo "Fehler bei der Verbindung:" . $mysqli_connect_error();
      6. exit();
      7. }
      8. $ergebnis = $mysqli->query("SELECT license,until FROM licensesystem WHERE used = '0'");
      9. while($result = $ergebnis->fetch_array()) {
      10. if($result['license'] == $_POST["license"]) {
      11. if($update = $mysqli->prepare("UPDATE licensesystem SET used = '1' WHERE license = ".$_POST['license']."")) {
      12. echo "Erfolgreich";
      13. echo "Gültig: " . htmlspecialchars($result['until']);
      14. } else {
      15. echo "Fehlgeschlagen";
      16. }
      17. }
      18. }
      Jetzt kommen noch mehr Fehler:
      Warning: mysqli::mysqli() [mysqli.mysqli]: php_network_getaddresses: getaddrinfo failed: Name or service not known in /users/tolio/www/licenceHFS52/get.php on line 5

      Warning: mysqli::mysqli() [mysqli.mysqli]: [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known (trying to connect via tcp://tolio:3306) in /users/tolio/www/licenceHFS52/get.php on line 5

      Warning: mysqli::mysqli() [mysqli.mysqli]: (HY000/2002): php_network_getaddresses: getaddrinfo failed: Name or service not known in /users/tolio/www/licenceHFS52/get.php on line 5

      Fatal error: Function name must be a string in /users/tolio/www/licenceHFS52/get.php on line 8
      Sorry, aber das Script ist so schlecht, ich bekam fast einen Anfall.
      Also ich habe das Ganze nun bei mir lokal gestestet und hier sind meine Verbesserungen.
      Habe nur die Fehler verbessert, nicht auf Sicherheit getestet!

      generate.php

      PHP-Quellcode

      1. <?php
      2. require_once "sicher/dbdaten.php";
      3. $str1 = substr($_POST["vorname"], 3) . rand(0,10);
      4. $str2 = substr($_POST["nachname"], 3) . rand(0,10);
      5. $hash = $str1 . $str2;
      6. $license = hash('sha256', $hash);
      7. $mysqli = new mysqli(server,benutzername,passwort,datenbank);
      8. if($mysqli->connect_error) {
      9. echo "Fehler bei der Verbindung:" . $mysqli_connect_error();
      10. exit();
      11. }
      12. $program = $mysqli->real_escape_string("IhrProgramm"); /* Geben sie ihren Programmennamen ein */
      13. $used = $mysqli->real_escape_string("0");
      14. $until = $mysqli->real_escape_string(date("d.m.Y",strtotime("+1 year")));
      15. if($stmt = $mysqli->prepare("INSERT INTO licensesystem (license,program,used,until) VALUES (?,?,?,?)")) {
      16. $stmt->bind_param("ssis", $license, $program, $used, $until);
      17. $stmt->execute();
      18. }
      19. if($stmt->affected_rows != 0) {
      20. echo "Ihr Lizenzschlüssel:";
      21. echo "<br />";
      22. echo htmlspecialchars($license);
      23. } else {
      24. echo "Er ist ein Fehler aufgetreten.";
      25. }
      26. $stmt->close();
      27. $mysqli->close();


      get.php

      PHP-Quellcode

      1. <?php
      2. require_once "sicher/dbdaten.php";
      3. if($mysqli->connect_error) {
      4. echo "Fehler bei der Verbindung:" . $mysqli_connect_error();
      5. exit();
      6. }
      7. $ergebnis = $mysqli->query("SELECT license,until FROM licensesystem WHERE used = '0'")
      8. while($result = $ergebnis->fetch_array()) {
      9. if $result['license'] = $_POST["license"] {
      10. if($update = $mysqli->prepare("UPDATE licensesystem SET used = '1' WHERE license = $_POST["license"]")) {
      11. echo "Erfolgreich";
      12. echo "Gültig: " . htmlspecialchars($result['until']);
      13. } else {
      14. echo "Fehlgeschlagen";
      15. } else {
      16. echo "Fehlgeschlagen";
      17. } }
      18. $ergebnis->close();
      19. $stmt->close();
      20. $update->close();
      21. $mysqli->close();
      Probier mal so:
      Könnte auch an deinen PHP Einstellungen liegen weils halt total unsauberer Code ist und unvollständig.

      PHP-Quellcode

      1. require_once "../sicher/dbdaten.php";
      2. $mysqli = new mysqli(server,benutzername,passwort,datenbank);
      3. if($mysqli->connect_error) {
      4. echo "Fehler bei der Verbindung:" . $mysqli_connect_error();
      5. exit();
      6. }
      7. $ergebnis = $mysqli->query("SELECT license,until FROM licensesystem WHERE used = '0'");
      8. while($result = $ergebnis->fetch_array()) {
      9. if($result['license'] == $_POST["license"]) {
      10. if($update = $mysqli->prepare("UPDATE licensesystem SET used = '1' WHERE license = ".$_POST['license']."")) {
      11. echo "Erfolgreich";
      12. echo "Gültig: " . htmlspecialchars($result['until']);
      13. } else {
      14. echo "Fehlgeschlagen";
      15. }
      16. }
      17. }
      Ist 1 Monat ungefähr her, aber bekomme folgenden Fehler bei get.php:

      HTML-Quellcode

      1. Parse error: syntax error, unexpected T_WHILE in /var/customers/webs/WEBSPACE/htdocs/lizenz/get.php on line 8


      Er generiert undso, kriege ihn auch angezeigt, aber "get.php" funktionietr nicht.
      In der Zeile davor fehlt das Semikolon.
      „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

      -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
      Dann erscheint:

      HTML-Quellcode

      1. Parse error: syntax error, unexpected T_VARIABLE, expecting '(' in /var/customers/webs/ni84770_2/htdocs/lizenz/get.php on line 9


      und get.php sieht so aus:

      PHP-Quellcode

      1. <?php require_once "sicher/dbdaten.php"; if($mysqli->connect_error) { echo "Fehler bei der Verbindung:" . $mysqli_connect_error(); exit(); } $ergebnis = $mysqli->query("SELECT license,until FROM licensesystem WHERE used = '0'");while($result = $ergebnis->fetch_array()) { if $result['license'] = $_POST["license"] { if($update = $mysqli->prepare("UPDATE licensesystem SET used = '1' WHERE license = $_POST["license"]")) { echo "Erfolgreich"; echo "Gültig: " . htmlspecialchars($result['until']); } else { echo "Fehlgeschlagen"; } else { echo "Fehlgeschlagen"; } } $ergebnis->close(); $stmt->close(); $update->close(); $mysqli->close(); ?>

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

      Dann schau dir in der PHP-Doku nochmal an, wie eine if-Abfrage aussieht

      ->if
      „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

      -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.

      Lukas schrieb:

      Dann schau dir in der PHP-Doku nochmal an, wie eine if-Abfrage aussieht

      ->if
      Hast du recht, doch kenne mich garnicht mit PHP aus und kann da nichts machen :(
      Könntest du mir nicht helfen?

      EDIT:
      Hab da eine "(" rein gemacht.

      Da kommt nun:

      HTML-Quellcode

      1. Parse error: syntax error, unexpected '"', expecting T_STRING or T_VARIABLE or T_NUM_STRING in /var/customers/webs/ni84770_2/htdocs/lizenz/get.php on line 10


      EDIT #2: Das obere hab ich auch gelöst, jetzt komtm das:

      HTML-Quellcode

      1. Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /var/customers/webs/ni84770_2/htdocs/lizenz/get.php on line 10


      Aktueller get.php Quellcode:

      PHP-Quellcode

      1. <?php
      2. require_once "sicher/dbdaten.php";
      3. if($mysqli->connect_error) {
      4. echo "Fehler bei der Verbindung:" . $mysqli_connect_error();
      5. exit();
      6. }
      7. $ergebnis = $mysqli->query("SELECT license,until FROM licensesystem WHERE used = '0'");
      8. while($result = $ergebnis->fetch_array()) {
      9. if ($result['license'] = $_POST["license"]) {
      10. if($update = $mysqli->prepare("UPDATE licensesystem SET used = '1' WHERE license = $_POST['license']")) {
      11. echo "Erfolgreich";
      12. echo "Gültig: " . htmlspecialchars($result['until']);
      13. } else {
      14. echo "Fehlgeschlagen";
      15. } else {
      16. echo "Fehlgeschlagen";
      17. } }
      18. $ergebnis->close();
      19. $stmt->close();
      20. $update->close();
      21. $mysqli->close();
      22. ?>


      WAS IST DAS?

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „OneBestMetin“ ()

      PHP-Quellcode

      1. if($update = $mysqli->prepare("UPDATE licensesystem SET used=1 WHERE license='".$_POST['license']."'"))

      ...

      eigne dir lieber ein paar mehr Grundverständnisse bezüglich PHP an, denn du vergisst auch die Sicherheit deines Skriptes. Derzeit können deine Anfragen manipuliert werden, da du die POST-Variable einfach in die Query einsetzt. Durch solche Lücken kann die ganze Datenbank z.B. gelöscht werden.

      mysqli::real_escape_string (!!)
      „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

      -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Lukas“ ()

      @Lukas:
      Hab ich auch gedacht, aber vorher ist eine Prüfung, ob die Query irgendwo schon in der Datenbank ist.
      Er geht alle nicht-verwendeten durch und vergleicht zuerst. Und wenn sein if funktionieren würde,
      würde auch nur in einem Übereinstimmungsfall diese Query ausgeführt werden. Aber natürlich hast du recht!
      Auf die Abfragen habe ich nicht geachtet, dass lässt sich natürlich auch schöner machen.

      SQL-Abfrage

      1. "SELECT `license`,`until` FROM `licensesystem` WHERE `used`=0 AND license='".$license."'"

      $license ist escapet, wichtig!

      Danach per num_rows gucken, ob da was da ist.
      „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

      -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.