PHP [Datum, MySQL 'Update, Insert, Select' ]

  • PHP

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Reeker.

    PHP [Datum, MySQL 'Update, Insert, Select' ]

    Hallo erstmal ! :)
    Mein Name ist Simon
    und bin noch ein Anfänger mit "PHP, MySql".
    Möchte gerne wissen ob dieser Quellcode in der Theorie passt.

    Weitere Details unter "Meine Fragen".



    Meine Frage
    Spoiler anzeigen

    PHP-Quellcode

    1. /*
    2. Das Ziel:
    3. Eine Datenbank die, die Werte: Scancode, Nummer, Anzahl und Datum beinhalten.
    4. Eine Datenbank so zu erstellen, dass ich immer eine Aktuelle Tabelle habe, aber auch sämtliche
    5. Tabelle in den letzten Monaten.
    6. ---------------------------------------------------------------------------------------------------------
    7. Meine Frage lautet:
    8. Ob dieser Quellcode in der Theorie passt.
    9. ----------------------------------------------------------------------------------------------------------
    10. Weitere Information:
    11. Das Problem mit dem Primary Key versuche ich schon irgendwie.
    12. Ich entschuldige mich, wenn ich eine Funktion falsch verstanden habe oder/und viele Rechtschreibfehler auf meine Dokumentation habe.
    13. --------------------------------------------------------------------------------------------------------------
    14. */

    Datum
    Spoiler anzeigen

    PHP-Quellcode

    1. // gibt den Wert des heutigen Datum!
    2. date_default_timezone_set('Europe/Berlin');
    3. // die ausgabe vom heutigen Datum -1 Monat
    4. echo "<p>heutiges Datum: " . date('Y-m', strtotime(date('Y-m')." -1 month"));
    5. // aktuelles Datum "2016.11"
    6. $date = date('Y-m');
    7. // -1 Monat Datum "2016.10"
    8. $ldate = date('Y-m-d', strtotime(date('Y-m')." -1 month"));



    Datenbankverbidnung
    Spoiler anzeigen

    PHP-Quellcode

    1. // Datenbanknamen
    2. $Database = "Patronen";
    3. // Verbindung zur Datenbankserver herstellen
    4. mysql_connect("server", "username", "password") or die(mysql_error());
    5. // Welche Datenbank soll genommen werden
    6. mysql_select_db($Database) or die(mysql_error());

    *Kontrolle
    Spoiler anzeigen

    PHP-Quellcode

    1. // prüft ob wir mit der Datebank verbunden sind
    2. $Test1 = mysql_ping() ? 'true' : 'false';
    3. // sucht & holt denn Wert "2016.11" wegen '{$date}'
    4. $query = "SELECT * FROM Patronenvorrat WHERE Datum = '{$date}'";
    5. // ist eine Deklaration
    6. $result = mysql_query($query);
    7. // kontrolliert ob der Wert in der Patronenvorrat verfügbar ist und gibt denn Wert für "NO" oder "YES"
    8. $Test2 = (mysql_num_rows($result) == 0) ? 'NO' : 'YES';
    9. $querys = "SELECT * FROM Patronenausgang WHERE Datum = '{$date}'";
    10. $results = mysql_query($querys);
    11. $Test3 = (mysql_num_rows($results) == 0) ? 'NO' : 'YES';
    12. $queryss = "SELECT * FROM Patroneneingang WHERE Datum = '{$date}'";
    13. $resultss = mysql_query($queryss);
    14. $Test4 = (mysql_num_rows($resultss) == 0) ? 'NO' : 'YES';

    *IF-Statement
    Spoiler anzeigen

    PHP-Quellcode

    1. // falls wir nicht mit der Datanbank verbunden sind. Schreibt er "KEINE VERBINDUNG!" und beendet die abfrage.
    2. if ($Test1 != "true") {
    3. echo "<h1><span style='color:#FF0000'> KEINE VERBINDUNG!</span></h1>";
    4. // Wenn die Tabelle nicht das aktuelen Datum hat ... soll die ganzen Werte vom letzten Monat kopiert und
    5. // eingefügt werden, mit dem neuen Datum und wiederholt die Abfrage!
    6. // Möchte eine Schleife haben wenn er es Aktualisirt soll er die If schleife weiter fortsetzen? Meine Frage lautet:
    7. // ob "continue;" da richtig steht
    8. }elseif ($Test2 != "YES") {
    9. "Insert INTO Patronenvorrat (Scancode, Nummer, Anzahl, Datum) SELECT Scancode, Nummer, Anzahl, '{$date}' FROM `Patronenvorrat` where Datum = '{$ldate}'";
    10. continue;
    11. }elseif ($Test3 != "YES") {
    12. "Insert INTO Patronenausgang (Scancode, Nummer, Anzahl, Datum) SELECT Scancode, Nummer, Anzahl, '{$date}' FROM `Patronenausgang` where Datum = '{$ldate}'";
    13. continue;
    14. }elseif ($Test4 != "YES") {
    15. "Insert INTO Patroneneingang (Scancode, Nummer, Anzahl, Datum) SELECT Scancode, Nummer, Anzahl, '{$date}' FROM `Patroneneingang` where Datum = '{$ldate}'";
    16. continue;
    17. }else {
    18. //Der voheriger Wert speichern
    19. $Nummer11 = "SELECT * FROM Patronenvorrat Nummer WHERE Datum = '{$date}' AND WHERE Scancode = '{$ScanText}'";
    20. $Anzahl11 = "SELECT * FROM Patronenvorrat Anzahl WHERE Datum = '{$date}' AND WHERE Scancode = '{$ScanText}'";
    21. $Nummer22 = "SELECT * FROM Patronenausgang Nummer WHERE Datum = '{$date}' AND WHERE Scancode = '{$ScanText}'";
    22. $Anzahl22 = "SELECT * FROM Patronenausgang Anzahl WHERE Datum = '{$date}' AND WHERE Scancode = '{$ScanText}'";
    23. $Nummer33 = "SELECT * FROM Patroneneingang Nummer WHERE Datum = '{$date}' AND WHERE Scancode = '{$ScanText}'";
    24. $Anzahl33 = "SELECT * FROM Patronenvorrat Anzahl WHERE Datum = '{$date}' AND WHERE Scancode = '{$ScanText}'";
    25. $Textfeld11 = $Nummer11 ;
    26. $Textfeld22 = $Nummer22 ;
    27. $Textfeld33 = $Nummer33 ;
    28. $Textfeld44 = $Anzahl11 ;
    29. $Textfeld55 = $Anzahl22 ;
    30. $Textfeld66 = $Anzahl33 ;
    31. // Wenn alle Abfragen mit Yes/True beantwortet worden sind,
    32. // soll das Produkt in die Tabelle reingeschrieben werden mit dem aktuellen Datum!
    33. "update Patronenvorrat Set anzahl = anzahl + '{$AnzahlText}' WHERE Datum = '{$date}' AND WHERE Scancode = '{$ScanText}'";
    34. "update Patronenausgang Set anzahl = anzahl + '{$AnzahlText}' WHERE Datum = '{$date}' AND WHERE Scancode = '{$ScanText}'";
    35. "update Patroneneingang Set anzahl = anzahl + '{$AnzahlText}' WHERE Datum = '{$date}' AND WHERE Scancode = '{$ScanText}'";
    36. // Gibt den aktuellen Stand von der geänderte Spalte mit der Bestätigung und setzt die Texte auf ""
    37. $Nummer1 = "SELECT * FROM Patronenvorrat Nummer WHERE Datum = '{$date}' AND WHERE Scancode = '{$ScanText}'";
    38. $Anzahl1 = "SELECT * FROM Patronenvorrat Anzahl WHERE Datum = '{$date}' AND WHERE Scancode = '{$ScanText}'";
    39. $Nummer2 = "SELECT * FROM Patronenausgang Nummer WHERE Datum = '{$date}' AND WHERE Scancode = '{$ScanText}'";
    40. $Anzahl2 = "SELECT * FROM Patronenausgang Anzahl WHERE Datum = '{$date}' AND WHERE Scancode = '{$ScanText}'";
    41. $Nummer3 = "SELECT * FROM Patroneneingang Nummer WHERE Datum = '{$date}' AND WHERE Scancode = '{$ScanText}'";
    42. $Anzahl3 = "SELECT * FROM Patronenvorrat Anzahl WHERE Datum = '{$date}' AND WHERE Scancode = '{$ScanText}'";
    43. $Bestätigung = "Die Werte wurden geschickt!";
    44. $Textfeld1 = $Nummer1 ;
    45. $Textfeld2 = $Nummer2 ;
    46. $Textfeld3 = $Nummer3 ;
    47. $Textfeld4 = $Anzahl1 ;
    48. $Textfeld5 = $Anzahl2 ;
    49. $Textfeld6 = $Anzahl3 ;
    50. $AnzahlText = "";
    51. $ScanText = "";
    52. }


    *IF-Statement (kurz | empfohlen)
    Spoiler anzeigen

    PHP-Quellcode

    1. // falls wir nicht mit der Datanbank verbunden sind. Schreibt er "KEINE VERBINDUNG!" und beendet die abfrage.
    2. if ($Test1 != "true") {
    3. echo "<h1><span style='color:#FF0000'> KEINE VERBINDUNG!</span></h1>";
    4. // Wenn die Tabelle nicht das aktuele Datum hat ...
    5. }elseif ($Test2 != "YES") {
    6. /* Ganze Werte vom letzten Monat kopieren und einfügen, mit dem neuen Datum.
    7. Möchte eine Schleife haben wenn er die Tabelle Aktualisiert,
    8. soll er die If schleife weiter fortsetzen.
    9. Meine Frage lautet: ob "continue;" da richtig steht. */
    10. "Insert INTO Patronenvorrat (Scancode, Nummer, Anzahl, Datum)
    11. SELECT Scancode, Nummer, Anzahl, '{$date}'
    12. FROM `Patronenvorrat` where Datum = '{$ldate}'";
    13. continue;
    14. // Wenn alle Abfragen mit Yes/True beantwortet worden sind soll das ausgeführt werden!
    15. }else {
    16. // Den voherigen Wert speichern
    17. $Nummer11 = "SELECT * FROM Patronenvorrat Nummer
    18. WHERE Datum = '{$date}' AND WHERE Scancode = '{$ScanText}'";
    19. $Anzahl11 = "SELECT * FROM Patronenvorrat Anzahl
    20. WHERE Datum = '{$date}' AND WHERE Scancode = '{$ScanText}'";
    21. // Ausgabe der voherigen Wert
    22. $Textfeld11 = $Nummer11 ;
    23. $Textfeld44 = $Anzahl11 ;
    24. // Die Information in die Tabelle reinscheiben.
    25. "update Patronenvorrat Set anzahl = anzahl + '{$AnzahlText}'
    26. WHERE Datum = '{$date}' AND WHERE Scancode = '{$ScanText}'";
    27. // Gibt den aktuellen Stand von der geänderte Spalte an.
    28. $Nummer1 = "SELECT * FROM Patronenvorrat Nummer
    29. WHERE Datum = '{$date}' AND WHERE Scancode = '{$ScanText}'";
    30. $Anzahl1 = "SELECT * FROM Patronenvorrat Anzahl
    31. WHERE Datum = '{$date}' AND WHERE Scancode = '{$ScanText}'";
    32. // Bestätigung
    33. $Bestätigung = "Die Werte wurden geschickt!";
    34. // Ausgabe der aktuellen Stand von der geänderte Spalte.
    35. $Textfeld1 = $Nummer1 ;
    36. $Textfeld4 = $Anzahl1 ;
    37. // setzt die Texte auf ""
    38. $AnzahlText = "";
    39. $ScanText = "";
    40. }


    Ganzer Code ohne Dokumentation
    Spoiler anzeigen

    PHP-Quellcode

    1. date_default_timezone_set('Europe/Berlin');
    2. echo "<p>heutiges Datum: " . date('Y-m', strtotime(date('Y-m')." -1 month"));
    3. $date = date('Y-m');
    4. $ldate = date('Y-m-d', strtotime(date('Y-m')." -1 month"));
    5. $Database = "Patronen";
    6. mysql_connect("server", "username", "password") or die(mysql_error());
    7. mysql_select_db($Database) or die(mysql_error());
    8. $Test1 = mysql_ping() ? 'true' : 'false';
    9. $query = "SELECT * FROM Patronenvorrat WHERE Datum = '{$date}'";
    10. $result = mysql_query($query);
    11. $Test2 = (mysql_num_rows($result) == 0) ? 'NO' : 'YES';
    12. $querys = "SELECT * FROM Patronenausgang WHERE Datum = '{$date}'";
    13. $results = mysql_query($querys);
    14. $Test3 = (mysql_num_rows($results) == 0) ? 'NO' : 'YES';
    15. $queryss = "SELECT * FROM Patroneneingang WHERE Datum = '{$date}'";
    16. $resultss = mysql_query($queryss);
    17. $Test4 = (mysql_num_rows($resultss) == 0) ? 'NO' : 'YES';
    18. if ($Test1 != "true") {
    19. echo "<h1><span style='color:#FF0000'> KEINE VERBINDUNG!</span></h1>";
    20. }elseif ($Test2 != "YES") {
    21. "Insert INTO Patronenvorrat (Scancode, Nummer, Anzahl, Datum) SELECT Scancode, Nummer, Anzahl, '{$date}' FROM `Patronenvorrat` where Datum = '{$ldate}'";
    22. continue;
    23. }elseif ($Test3 != "YES") {
    24. "Insert INTO Patronenausgang (Scancode, Nummer, Anzahl, Datum) SELECT Scancode, Nummer, Anzahl, '{$date}' FROM `Patronenausgang` where Datum = '{$ldate}'";
    25. continue;
    26. }elseif ($Test4 != "YES") {
    27. "Insert INTO Patroneneingang (Scancode, Nummer, Anzahl, Datum) SELECT Scancode, Nummer, Anzahl, '{$date}' FROM `Patroneneingang` where Datum = '{$ldate}'";
    28. continue;
    29. }else {
    30. $Nummer11 = "SELECT * FROM Patronenvorrat Nummer WHERE Datum = '{$date}' AND WHERE Scancode = '{$ScanText}'";
    31. $Anzahl11 = "SELECT * FROM Patronenvorrat Anzahl WHERE Datum = '{$date}' AND WHERE Scancode = '{$ScanText}'";
    32. $Nummer22 = "SELECT * FROM Patronenausgang Nummer WHERE Datum = '{$date}' AND WHERE Scancode = '{$ScanText}'";
    33. $Anzahl22 = "SELECT * FROM Patronenausgang Anzahl WHERE Datum = '{$date}' AND WHERE Scancode = '{$ScanText}'";
    34. $Nummer33 = "SELECT * FROM Patroneneingang Nummer WHERE Datum = '{$date}' AND WHERE Scancode = '{$ScanText}'";
    35. $Anzahl33 = "SELECT * FROM Patronenvorrat Anzahl WHERE Datum = '{$date}' AND WHERE Scancode = '{$ScanText}'";
    36. $Textfeld11 = $Nummer11 ;
    37. $Textfeld22 = $Nummer22 ;
    38. $Textfeld33 = $Nummer33 ;
    39. $Textfeld44 = $Anzahl11 ;
    40. $Textfeld55 = $Anzahl22 ;
    41. $Textfeld66 = $Anzahl33 ;
    42. "update Patronenvorrat Set anzahl = anzahl + '{$AnzahlText}' WHERE Datum = '{$date}' AND WHERE Scancode = '{$ScanText}'";
    43. "update Patronenausgang Set anzahl = anzahl + '{$AnzahlText}' WHERE Datum = '{$date}' AND WHERE Scancode = '{$ScanText}'";
    44. "update Patroneneingang Set anzahl = anzahl + '{$AnzahlText}' WHERE Datum = '{$date}' AND WHERE Scancode = '{$ScanText}'";
    45. $Nummer1 = "SELECT * FROM Patronenvorrat Nummer WHERE Datum = '{$date}' AND WHERE Scancode = '{$ScanText}'";
    46. $Anzahl1 = "SELECT * FROM Patronenvorrat Anzahl WHERE Datum = '{$date}' AND WHERE Scancode = '{$ScanText}'";
    47. $Nummer2 = "SELECT * FROM Patronenausgang Nummer WHERE Datum = '{$date}' AND WHERE Scancode = '{$ScanText}'";
    48. $Anzahl2 = "SELECT * FROM Patronenausgang Anzahl WHERE Datum = '{$date}' AND WHERE Scancode = '{$ScanText}'";
    49. $Nummer3 = "SELECT * FROM Patroneneingang Nummer WHERE Datum = '{$date}' AND WHERE Scancode = '{$ScanText}'";
    50. $Anzahl3 = "SELECT * FROM Patronenvorrat Anzahl WHERE Datum = '{$date}' AND WHERE Scancode = '{$ScanText}'";
    51. $Bestätigung = "Die Werte wurden geschickt!";
    52. $Textfeld1 = $Nummer1 ;
    53. $Textfeld2 = $Nummer2 ;
    54. $Textfeld3 = $Nummer3 ;
    55. $Textfeld4 = $Anzahl1 ;
    56. $Textfeld5 = $Anzahl2 ;
    57. $Textfeld6 = $Anzahl3 ;
    58. $AnzahlText = "";
    59. $ScanText = "";
    60. }


    Wenn etwas unverständlich versuche ich es zu erklären.

    Tut mir leid wenn das schwer zu versthen ist. :|
    Wieso müssen wir dir sagen ob der Code "theoretisch" funktionieren würde, wenn du innerhalb von 5 Minuten herausfinden kannst, ob er praktisch das tut was er soll, indem du ihn einfach ausführst? Bekommst du Fehlermeldungen oder ähnliches? Falls ja, bitte posten - und dann können wir dir bei einem konkreten Problem weiterhelfen.
    (Bissl unverschämt ist es schon, sowas andere machen zu lassen)

    Was ich am Code durch's überfliegen schon rausgesehen hab:
    - das ist durch und durch prozeduraler Ranz-Code
    - veraltete MySQL-Funktionen (bitte wenigstens mysqli oder besser noch PDO)
    - keine Backticks für Spalten
    - redundanter Code (die ganzen Variablen würden sich in einem Objekt oder Array viel besser speichern lassen, dann ist auch der Zugriff komfortabler)
    - wieso true und false als String, obwohl Boolean ein eigenständiger Datentyp ist?
    - die vielen Datenbankabfragen könntest du dir sparen, wenn du einfach mit JOINs arbeiten würdest
    ...

    Wie schon gesagt, wenn du ein konkretes Problem hast, können wir das i.d.R. schnell zusammen lösen.

    Link :thumbup:
    Hello World

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

    Wo auch immer du ScanText und AnzahlText herbekommst (das geht aus dem Ausschnitt nicht hervor) schau zu, dass du das vernünftig escapsed ansonsten bekommst du Probleme mit SQL Injection u.o. Cross-Site-Scripting.

    8-) faxe1008 8-)
    Ich hab jetzt einfach nur deinen code im "Ganzer Code ohne Dokumentation" spoiler überflogen und kann dir sagen, dass er so, wie er da steht, nicht funktioniert.
    Fehlende Anweisungen, die sagen, dass eine Query ausgeführt werden soll. Strings, die nicht mal einer Variable zugewiesen werden und eine Verbindung zur Datenbank, auf die auch nicht zurückgegriffen werden kann.

    Schau dir das bitte selber nochmal an. Hier ein paar Hilfestellungen:
    php.net/manual/de/function.mysql-connect.php
    php.net/manual/de/function.mysql-select-db.php
    (Dazu solltest du dir auch noch PDO anschauen, für den Fall, dass du php7 verwendest.

    Das sind hier, wie gesagt, nicht die einzigen Fehler, was aber kein Grund wäre aufzugeben. Mach weiter!