Ankündigung

Einklappen
Keine Ankündigung bisher.

Übergabe Inputfield-Value an Datenbank

Einklappen

Neue Werbung 2019

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

  • Übergabe Inputfield-Value an Datenbank

    HalliHallo,

    heute habe ich ein vermutlich unlösbares Problem. Aber da ich noch nicht alle Möglichkeiten und Grenzen von PHP erkundet habe stelle ich euch dennoch die Frage.

    Konstrukt:

    Ich habe ein Text-Input-Element und ein Submit-Input-Element

    kkk.JPG
    Außerdem eine MySQL-Datenbanktablle namens T_wochentag
    es befindet sich ein einziger Datensatz in der Tabelle
    id Wochentag
    0 Montag
    Mein Job ist es jeden Tag zu Arbeitsbeginn den aktuellen Wochentag manuell über die Form s.o. in die Datenbank zu schreiben.

    Beim klicken auf Submit wird also ein Update ausgeführt.

    Nun möchte ich das der aktuell in der Datenbank stehende Wert im Textfeld angezeigt wird.
    Wenn ich also Dienstag früh den aktuellen Datensatz eintragen möchte steht vorab der (alt)Wert Montag im Textfeld, erst nach dem Submit wird der entsprechnend aktualisierte Wert im Textfeld angezeigt.

    Was ich bisher probiert habe war, dass ich den Attribut Value im Input-Tag mittels SQLAbfrage ermittelt und gesetzt habe
    PHP-Code:
    $sql = "SELECT 'Wochentag' FROM 'T_Wochentag' WHERE 'id' = '1';";  
    <input type="text" name="wochentag" value= <?php echo "'".$row['Wochentag]."'"?>>


    Das Problem dabei ist... das er beim POST immer die Feld-Value übergibt, egal ob ich Sonntag, Dienstag, Freitag, Apfepbaum oder Kartoffelbrei eintrage... er nimmt den Tabellenwert "Montag" .

    Wer dafür eine Lösung hat, Chapeau! und Hut ab!


  • #2
    Schau mal hier in der Wissenssammlung -> Formularverarbeitung an. Du brauchst ein sog. Affenformular. Ist dort alles erläutert inkl. Beispiele. Denke dann wird dir vieles klarer.

    Kommentar


    • #3
      Zitat von Jepbolto Beitrag anzeigen
      Mein Job ist es jeden Tag zu Arbeitsbeginn den aktuellen Wochentag manuell über die Form s.o. in die Datenbank zu schreiben.
      Ist das eine Arbeitsbeschaffungsmaßnahme? Wofür soll die Tabelle überhaupt gut sein? Da jeden Tag von Hand den aktuellen Wochentag reinzustellen ist Unsinn und sehr fehleranfällig. Theoretisch könnte man einen Cronjob aufsetzen der jeden Tag den Wert in der Datenbank ändert was aber auch wenig sinnvoll ist: einfach die Tabelle ersatzlos entfernen und an der Stelle die bisher die Datenbank ausgelesen hat einfach strftime('%A') schreiben (ggf. noch ein setlocale() davor).

      Was ich bisher probiert habe war, dass ich den Attribut Value im Input-Tag mittels SQLAbfrage ermittelt und gesetzt habe
      PHP-Code:
      $sql = "SELECT 'Wochentag' FROM 'T_Wochentag' WHERE 'id' = '1';";
      <input type="text" name="wochentag" value= <?php echo "'".$row['Wochentag]."'"?>>
      Syntaxfehler (sowohl im SQL als auch im PHP), umständliche Ausgabe des Wertes und fehlende Behandlung des Kontextwechsels. Zudem fehlt da noch einiges, wenn wir dir sagen sollen was da falsch ist musst du schon deinen ganzen Code posten, anhand der zwei Zeilen lässt sich da nicht wirklich was sagen.

      In SQL dürfen/müssen übrigens nur Werte in Anführungszeichen stehen, Spalten und Tabellennamen nicht. Und oben war die ID des Datensatzes noch 0, hier fragst du nach dem Datensatz mit der ID 1 …

      Kommentar


      • #4
        Zitat von tk1234 Beitrag anzeigen
        Ist das eine Arbeitsbeschaffungsmaßnahme? Wofür soll die Tabelle überhaupt gut sein? Da jeden Tag von Hand den aktuellen Wochentag reinzustellen ist Unsinn und sehr fehleranfällig. Theoretisch könnte man einen Cronjob aufsetzen der jeden Tag den Wert in der Datenbank ändert was aber auch wenig sinnvoll ist: einfach die Tabelle ersatzlos entfernen und an der Stelle die bisher die Datenbank ausgelesen hat einfach strftime('%A') schreiben (ggf. noch ein setlocale() davor).


        Syntaxfehler (sowohl im SQL als auch im PHP), umständliche Ausgabe des Wertes und fehlende Behandlung des Kontextwechsels. Zudem fehlt da noch einiges, wenn wir dir sagen sollen was da falsch ist musst du schon deinen ganzen Code posten, anhand der zwei Zeilen lässt sich da nicht wirklich was sagen.

        In SQL dürfen/müssen übrigens nur Werte in Anführungszeichen stehen, Spalten und Tabellennamen nicht. Und oben war die ID des Datensatzes noch 0, hier fragst du nach dem Datensatz mit der ID 1 …
        Wo für die Tabelle gut sein soll? -> Als Beispiel

        Aber ich habe wohl zu viel Verstand vorausgesetzt, als ich das nicht explizit als solches deklariert habe.

        Kommentar


        • #5
          Hat jetzt nicht direkt was mit dem Thema zu tun, aber davor
          Zitat von tk1234 Beitrag anzeigen
          einfach strftime('%A') schreiben (ggf. noch ein setlocale() davor).
          kann ich nur abraten. Die funktion strftime ist stark systemabhängig und die notwendigen locales sind oft gar nicht installiert.

          Für nicht englische (z.B. deutsche) Tages und Monatsnamen bietet sich die IntlDateFormatter class an. Die intl-Klassen sind bei den meisten Standardinstallationen von PHP mit dabei und sind zudem systemunabhängig sprich funktionieren auf allen Plattformen.



          Kommentar


          • #6
            Keine Ahnung wo Dein Problem ist.

            Die im Bild dargestellte ID lautet "0" im select lautet sie "1".

            Ich habe es mal in SQLITE und PDO skizziert:

            PHP-Code:
            <?php
            function htmlOut ($val){
              return 
            htmlspecialchars($valENT_COMPAT ENT_HTML5"UTF-8");
            }
            $database __DIR__.'/'.'formtest.sqlite';
            if (!
            file_exists($database)) {
              
            $db = new PDO('sqlite:' $database);
              
            $db -> exec (
                
            "CREATE TABLE wochentag (
                  id INTEGER PRIMARY KEY,
                  wochentag VARCHAR(10))"
                
            );
              
            $db -> exec (
                
            "INSERT INTO wochentag (id, wochentag)
                VALUES ('1','Montag')"
              
            );
            } else {
               
            $db = new PDO('sqlite:' $database);
            }
            $myData $db->query("SELECT id, wochentag FROM wochentag")->fetch();
            $savedWeekDay $myData['wochentag'];

            if (
            $_SERVER['REQUEST_METHOD'] === 'POST') {
                
            $newWeekDay =  $_POST['wochentag'];
                if (
            $newWeekDay != ""){
                  
            $query 'UPDATE wochentag set wochentag = :wochentag where id="1"';
                  
            $myQuery $db->prepare($query);
                  if (
            $myQuery){
                    
            $prep = ['wochentag' => $newWeekDay];
                    
            $isOK $myQuery->execute($prep);
                    if (
            $isOK){
                      
            $savedWeekDay $newWeekDay;
                    }
                  }
                }
            }
            ?>
            <!DOCTYPE html>
            <html lang="de">
            <head>
              <meta charset="UTF-8">
              <title>Document</title>
              <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/water.css@2/out/water.css">
            </head>
            <body>
              <form method="POST">
                <input type="text" name="wochentag" value="<?=htmlOut($savedWeekDay)?>">
                <input type="submit">
              </form>
            </body>
            </html>

            Kommentar

            Lädt...
            X