Ankündigung

Einklappen
Keine Ankündigung bisher.

php (datetimepicker) Übertragung auf MySQL bereitet Probleme

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • php (datetimepicker) Übertragung auf MySQL bereitet Probleme

    Hallo zusammen,
    ich habe eine Frage zu einem Übertragungsproblem auf eine Datenbank.
    Ausgangssituation ist wie folgt: Kunde soll in einem Formular einen Termin mittels Datetimepicker wählen und, falls gewünscht, auf gleich einen Ersatztermin in einem weiteren Formularfeld.
    Erstes Feld steht auf required, zweites nicht.
    Wenn ich jetzt das Formular mit Daten fülle und absende, bekomme ich den Fehler "Ungültige Abfrage", wenn das Ersatzterminfeld nicht gefüllt wurde.
    Wird es gefüllt, dann läuft alles sauber durch, Daten werden in DB eingetragen und per Mail versendet.
    Hier ist das Formular, welches die Daten an die DB sendet. Dabei ist der Wunschtermin Pflicht und der Ersatztermin eben nicht.
    Kann mir bitte jemand sagen, was ich ergänzen muss, damit der Eintrag in beiden Fällen (nicht ausgefüllt und ausgefüllt) funktioniert.
    PHP-Code:
    echo "Erfolg: es wurde ordnungsgemäß mit MySQL verbunden! Die Datenbank "anfrage" ist OK." PHP_EOL;
    echo 
    "Host-Informationen: " mysqli_get_host_info($link) . PHP_EOL;
    $firma $_POST['firma'];
    $anrede $_POST['anrede'];
    $vorname $_POST['vorname'];
    $nachname $_POST['nachname'];
    $email $_POST['email'];
    $massageart $_POST['massageart'];
    $datetimepicker $_POST['wunschtermin'];
    $dauer $_POST['dauer'];
    $datetimepicker1 $_POST['ersatztermin'];
    $ersatzdauer $_POST['ersatzdauer'];
    $newsletter $_POST['newsletter'];  
    $eintrag "INSERT INTO anfrage  (firma, anrede, vorname, nachname, email, massageart, datetimepicker, dauer, datetimepicker1, ersatzdauer, newsletter)  
    VALUES  ('"
    .$firma."', '".$anrede."', '".$vorname."', '".$nachname."', '".$email."', '".$massageart."', '".$datetimepicker."', '".$dauer."', '".$datetimepicker1."', '".$ersatzdauer."', '".$newsletter."')";  
    $db_erg mysqli_query$link$eintrag );
    if ( ! 
    $db_erg )
    {  
      die(
    'Ungültige Abfrage: ' mysqli_error());
    }
    mysqli_close($link); 
    Für eure Unsterstützung bedanke ich mich schon sehr.
    mfg, Michael

  • #2
    https://www.php.de/forum/webentwickl...rf-hier-posten

    und bitte sourceCodde in einer Zeile über 80 zeichen ist einfach eine Sauerrei

    Kommentar


    • #3
      Es tut mir Leid, das ich meine Frage im falschen Forum gepostet habe. Ebenso wollte ich keine "Sauerei" verursachen, in meiner Vorschau wurde der php-Code sauber untereinander dargestellt.
      mfg, Michael

      Kommentar


      • #4
        Zitat von wuppti Beitrag anzeigen
        Es tut mir Leid, das ich meine Frage im falschen Forum gepostet habe. Ebenso wollte ich keine "Sauerei" verursachen, in meiner Vorschau wurde der php-Code sauber untereinander dargestellt.
        Das Board hat manchmal seine Macken und entfernt Zeilenumbrüche einfach - den Code ganz zu entfernen ist aber auch keine Lösung.

        Welche Fehlermeldung bekommst du denn von der Datenbank?

        Und wie das Datum ausgewählt wurde ist irrelevant, wichtig ist was bei Server, bzw. dann im Query mit dem die Datenbank befüllt wird, ankommt - ob das jetzt ein "Datetimepicker"-Feld ist oder ein einfaches input mit type=date ist egal.

        Kommentar


        • #5
          Hallo tk1234
          danke für deine Nachfrage.
          in der Datenbank kommt, wenn beide inputs gefüllt sind, das Datum mit der Uhrzeit in der Form 2020-01-31 11:00:00 als Beispiel an
          wenn nur ein input vom Formular gefüllt wird, dann wird zwar der die DB aufgerufen aber es kommt die Fehlermeldung
          Erfolg: es wurde ordnungsgemäß mit MySQL verbunden! Die Datenbank "anfrage" ist OK. Host-Informationen: xxx.de.mysql via TCP/IP Ungültige Abfrage:
          mehr leider nicht

          Kommentar


          • #6
            Zitat von wuppti Beitrag anzeigen
            in der Datenbank kommt, wenn beide inputs gefüllt sind, das Datum mit der Uhrzeit in der Form 2020-01-31 11:00:00 als Beispiel an
            wenn nur ein input vom Formular gefüllt wird,
            … dann sieht der Query wie aus? Und wie sieht die Tabellendefinition aus?

            Zitat von wuppti Beitrag anzeigen
            dann wird zwar der die DB aufgerufen aber es kommt die Fehlermeldung
            Erfolg: es wurde ordnungsgemäß mit MySQL verbunden! Die Datenbank "anfrage" ist OK. Host-Informationen: xxx.de.mysql via TCP/IP Ungültige Abfrage:
            mehr leider nicht
            Da muss noch mehr kommen, da fehlt noch die Ausgabe von mysqli_error(). Allerdings kann der Code so wie du ihn oben wieder reingestellt hast nicht funktionieren, das gibt gleich in der ersten Zeilen einen Syntaxfehler!

            Außerdem:
            - dein Code ist anfällig für SQL-Injection - du musst den Kontextwechsel zu SQL behandeln und nicht einfach ungeprüft die Daten in den Query einbauen!
            - das Umkopieren von Werten aus $_POST in extra Variablen ist (und war schon immer) Unsinn
            - die Datenbankverbindung musst du nicht schließen, das passiert am Scriptende automatisch

            Kommentar


            • #7
              Das war nicht dei richtige Antwort auf die Frage
              Zitat von tk1234 Beitrag anzeigen
              Welche Fehlermeldung bekommst du denn von der Datenbank?
              Was liefert dir
              PHP-Code:
              $db_erg mysqli_query$link$eintrag );
              if ( ! 
              $db_erg )
              {  
                die(
              'Ungültige Abfrage: ' mysqli_error());

              Also das mysqli_error muss eine Maldung ausgeben, ansonsten schaust du in die DB was dort eingetragen wurde.

              Zudem ist das umkopieren von Variablen ziemlich dämlich.
              PHP-Code:
              $firma $_POST['firma'];
              $anrede $_POST['anrede'];
              ... 
              weil in $firma ja das gleiche drin steht wie in $_POST['firma'] und genauseo bei den anderen Variablen.

              Zitat von wuppti
              Wenn ich jetzt das Formular mit Daten fülle und absende, bekomme ich den Fehler "Ungültige Abfrage", wenn das Ersatzterminfeld nicht gefüllt wurde.
              Ist ja logisch, weil du eine Spalte in der DB befüllen willst, die nicht von dir übergeben wurde, heisst in dem Fall, die Variable $_POST['ersatzdauer']; ist nicht vorhanden.
              Eigentlich hätte hier PHP schon meckern müssen, aber wahrscheinlich hast du das error reporting nich aktiviert.

              Du musst also vorab schauen ob die Variable, sprich Parameter gesetzt ist und wenn nicht dann ein Vorgabewert wie null dort reinschreiben.

              Du darfst auch nicht die Parameter ungeprüft und unmaskiert in die DB schreiben, Stichwort SQL injection.

              EDIT
              Einiges hat sich mit dem vorherigen Beitrag überschnitten, macht aber nichts doppelt hält evtl. besser.






              Kommentar


              • #8
                Zitat von protestix Beitrag anzeigen
                Ist ja logisch, weil du eine Spalte in der DB befüllen willst, die nicht von dir übergeben wurde, heisst in dem Fall, die Variable $_POST['ersatzdauer']; ist nicht vorhanden.
                Ich weiß nicht wie das Formular bzw. der "Datetimepicker" aussieht - ich würde aber mal vermuten dass der Wert im Prinzip über ein normales Text-Feld übertragen wird und damit kommt - wenn kein Wert ausgewählt wurde - einfach ein Leerstring an und PHP wird auch mit error_reporting=E_ALL nicht meckern.

                Kommentar


                • #9
                  tk1234 Kann sein.
                  Der TE ist am Zug, er muss nun schauen was ankommt und unsere Hinweise lesen und umsetzen.

                  Kommentar


                  • #10
                    Zitat von tk1234 Beitrag anzeigen
                    … dann sieht der Query wie aus? Und wie sieht die Tabellendefinition aus?
                    In der DB ist der Typ auf datetime eingestellt
                    wenn ich für den Ersatztermin den Typ auf varchar191 setzte, dann funktioniert es, das Feld in der DB bleibt einfach leer wenn es vom Formular nicht gefüllt wird.
                    Also das mysqli_error muss eine Maldung ausgeben, ansonsten schaust du in die DB was dort eingetragen wurde.
                    Aber wenn in der DB der Typ für Erstaztermin auf datetime steht, dann kommt es zu der Fehlermeldung und es wird gar nichts eingetragen, es wird an der Stelle komplett abgebrochen

                    Außerdem:
                    - dein Code ist anfällig für SQL-Injection - du musst den Kontextwechsel zu SQL behandeln und nicht einfach ungeprüft die Daten in den Query einbauen!
                    - das Umkopieren von Werten aus $_POST in extra Variablen ist (und war schon immer) Unsinn
                    - die Datenbankverbindung musst du nicht schließen, das passiert am Scriptende automatisch
                    Womit ich sicher eindrucksvoll gezeigt habe, das ich davon keine Ahnung habe. Ich bin/war dennoch irgendwie froh, das ich die Daten überhaupt von meiner Testseite in die DB bekomme
                    Ich habe mir den php-Code von verschiedenen Stellen zusammengetragen und solange kombiniert, bis ich ein Ergebnis hatte.
                    Danke für eure vielen Hinweise und Verbesserungsvorschläge, ich werde wohl noch ein paar Einheiten Nachsitzen müssen.

                    mfg, Michael

                    Kommentar


                    • #11
                      Datetime ist richtig aber DEFAULT NULL fehlt dir wohl.

                      Ich habe mir den php-Code von verschiedenen Stellen zusammengetragen und solange kombiniert,
                      Das Ergebnis ist, das du daraus nichts lernst.

                      Kommentar


                      • #12
                        Zitat von protestix Beitrag anzeigen
                        Datetime ist richtig aber DEFAULT NULL fehlt dir wohl.
                        Hallo protestix,
                        ich habe die Einstellung in der DB bei Standard, wenn ich dich richtig verstanden habe, auf NULL gesetzt, leider ohne Erfolg.


                        Kommentar


                        • #13
                          Zitat von wuppti Beitrag anzeigen
                          ich habe die Einstellung in der DB bei Standard, wenn ich dich richtig verstanden habe, auf NULL gesetzt, leider ohne Erfolg.
                          Deswegen habe ich nach der Tabellendefinition (»SHOW CREATE TABLE anfrage«) gefragt - und zwar nach der kompletten, nicht nur dem Spaltentyp der einen Spalte! Und auch die Fehlermeldung die mysqli_error() ausspucken müsste bist du uns noch schuldig …

                          Kommentar


                          • #14
                            [MOD: verschoben von PHP-Fortgeschritten]
                            Competence-Center -> Enjoy the Informatrix
                            PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                            Kommentar


                            • #15
                              Zitat von tk1234 Beitrag anzeigen
                              Deswegen habe ich nach der Tabellendefinition (»SHOW CREATE TABLE anfrage«) gefragt - und zwar nach der kompletten, nicht nur dem Spaltentyp der einen Spalte! Und auch die Fehlermeldung die mysqli_error() ausspucken müsste bist du uns noch schuldig …
                              Sorry, jetzt wo du mir sagst wie es geht reiche ich das gerne sofort nach
                              Code:
                              CREATE TABLE `anfrage` (
                               `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
                               `firma` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
                               `anrede` text COLLATE utf8mb4_unicode_ci NOT NULL,
                               `vorname` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
                               `nachname` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
                               `email` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
                               `telefon` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
                               `massageart` text COLLATE utf8mb4_unicode_ci NOT NULL,
                               `datetimepicker` datetime NOT NULL,
                               `dauer` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
                               `datetimepicker1` datetime DEFAULT NULL,
                               `ersatzdauer` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
                               `newsletter` text COLLATE utf8mb4_unicode_ci NOT NULL,
                               PRIMARY KEY (`id`)
                              ) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
                              was muss ich tun, um die Fehlermeldung von mysqli_error() auf den Schirm zu bekommen ? Das ist für mich leider alles neu.

                              Kommentar

                              Lädt...
                              X