Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Formular übergibt Wert nicht

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Formular übergibt Wert nicht

    Hallo!
    Ich habe eine Seite erstellt, auf der ich in einer Tabelle Werte aus der Datenbank ausgebe.
    Dabei soll es in einer Spalte möglich sein, die Datenbankeintrag "on the fly" mittels eines Dropdown zu aktualisieren.
    Es funktioniert bereits, dass ich das Dropdownfeld mit allen möglichen Einträgen der DB-Tabelle integriere und hierbei der aktuell zugeordnete Wert aus der DB als selected gewählt wird.
    Wenn ich nun allerdings einen neuen Wert auswähle, wird dieser nicht übergeben, sondern nur ein leerer String.
    Kann mir da jemand weiterhelfen?

    Der Code, mit dem ich die Tabelle erstelle:
    PHP-Code:
    /*
        Tabelle mit Inhalt aus Datenbank füllen
    */
    //echo $sql;
    $sql_add=$sql." ".$add;
    mysql_query($sql_add);
    $res mysql_query($sql_add);
    $rows mysql_num_rows($res);

    echo 
    "<form method=POST action='"; echo $_SERVER["PHP_SELF"]; echo "?action=softwareUpdated'>";
    //echo "<form method=POST action='softwareUpdated.php'>";

    if ( $rows ) {
            while ( 
    $zeile mysql_fetch_object($res) ) {
        
    //SPALTE Ort
            
    $ort=urlencode(utf8_encode($zeile->ort));
                  echo 
    " <tr><td><a href=/geoinfo/geoinfo_uebersicht_anzeigen.php?action=show&ort=$ort target=\"_blank\">$zeile->ort</a></td>";
        
    //SPALTE Ip-Adresse
            
    $ipadresse=$zeile->ipadresse;
            echo 
    "<td><a href=/hardware/endgeraet_anzeige?ipadresse=$ipadresse&action=none>$zeile->ipadresse</a></td>";
        
    //SPALTE Seriennummer
            
    $seriennr=$zeile->endgeraet_seriennr;
            echo 
    "<td><a href=/hardware/endgeraet_anzeige?seriennr=$seriennr>$zeile->endgeraet_seriennr</a></td>";
    //SPALTE NinJo-Version    
            
    echo "<td>";
            
    $sqlo="SELECT sw_bemerkung FROM hw_sw  GROUP BY sw_bemerkung";
            
    $reso mysql_query($sqlo);
            
    $num=mysql_num_rows($reso);
            echo 
    "<select name='softwareupdate' size='1' style='width: 250px' onChange='this.form.submit()'>";
            while(
    $row mysql_fetch_assoc($reso)) { 
                
    //echo "<option value=\"$row->ort\"> $row->ort ";
                
    if ( $zeile->sw_bemerkung != "" ){
                    echo 
    "<option value=\"$row->sw_bemerkung\" ";
                    if ( 
    $zeile->sw_bemerkung == $row['sw_bemerkung'] ) {
                        echo 
    " selected ";
                    }
                    echo 
    ">" $row['sw_bemerkung'] . "</option>";       
                }
                else {
                    echo 
    "<option value=\"".$row['sw_bemerkung'] . "\">" $row['sw_bemerkung'] . "</option>";  
                }
        
            }
            echo 
    "</select>";
            echo 
    "</td>";
        
    //SPALTE Modell & Verband
            
    echo "<td>$zeile->Modellbezeichnung</td><td>$zeile->verband</td>";
        
    //SPALTE Mailadresse
            
    if ( strcmp$zeile->gi_nutzer_mail,"ohne" )) {
                            echo 
    "<td><a href=\"mailto:$zeile->gi_nutzer_mail\">$zeile->gi_nutzer_mail</a></td</td>";
                    } else {
                            echo 
    "<td>$zeile->gi_nutzer_mail</td>";
                    }
        
    //SPALTE Telefon
                    
    echo "</td><td>$zeile->gi_nutzer_telefon</td></tr>";
        }

    }

    echo 
    "</form>"
    Wobei der relavante Code, folgender ist:
    PHP-Code:
    //SPALTE NinJo-Version    
            
    echo "<td>";
            
    $sqlo="SELECT sw_bemerkung FROM hw_sw  GROUP BY sw_bemerkung";
            
    $reso mysql_query($sqlo);
            
    $num=mysql_num_rows($reso);
            echo 
    "<select name='softwareupdate' size='1' style='width: 250px' onChange='this.form.submit()'>";
            while(
    $row mysql_fetch_assoc($reso)) { 
                
    //echo "<option value=\"$row->ort\"> $row->ort ";
                
    if ( $zeile->sw_bemerkung != "" ){
                    echo 
    "<option value=\"$row->sw_bemerkung\" ";
                    if ( 
    $zeile->sw_bemerkung == $row['sw_bemerkung'] ) {
                        echo 
    " selected ";
                    }
                    echo 
    ">" $row['sw_bemerkung'] . "</option>";       
                }
                else {
                    echo 
    "<option value=\"".$row['sw_bemerkung'] . "\">" $row['sw_bemerkung'] . "</option>";  
                }
        
            }
            echo 
    "</select>";
            echo 
    "</td>"
    Die Abfrage, ob der Eintrag geändert wurde:
    PHP-Code:
    print_r($_POST);
    if ( isset (
    $_GET['action'] ) ) {
            
    $action=$_GET['action'];
    }

    if ( 
    $action == 'softwareUpdated' ){
        if (isset (
    $_POST['softwareupdate'])){
            
    $software $_POST['softwareupdate'];
            echo 
    "Die aktuelle Software-Version: ".$software;
        }else {
            echo 
    "Error";    
        }

    Das "print_r($_POST); benutze ich zum Testen.
    Als Ausgabe bekomme ich :
    Code:
    Array ( [softwareupdate] => ) Die aktuelle Software-Version:
    Würde mich über Anregungen, weshalb nur ein leerer String weiter gegeben wird, sehr freuen.


  • #2
    Wenn ich nun allerdings einen neuen Wert auswähle, wird dieser nicht übergeben, sondern nur ein leerer String.
    Mal in das erzeugte HTML geschaut? Hat deine Liste überhaupt richtige values?

    Denn...
    PHP-Code:
    echo "<option value=\"$row->sw_bemerkung\" "
    Von derartigen Konstrukten ist abzuraten! Benutz lieber eine gescheite Stringkonkatenation:
    PHP-Code:
    echo '<option value="'.$row->sw_bemerkung.'"'
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      mit über 30 Beiträgen sollte man wissen wie und in welchen situationen bei fortgeschrittenen posted. übertargen von POSt daten ghört mE nicht dazu, trotz deiner versuche halte ich den code auch nicht auf das wensenliche beschränkt.

      Kommentar


      • #4
        Zitat von moma Beitrag anzeigen
        trotz deiner versuche halte ich den code auch nicht auf das wensenliche beschränkt.
        Ja sehe ich auch so und deshalb habe ich wenig Lust mir das anzuschauen, dabei ist Fehler wahrscheinlich trivial.

        Kommentar


        • #5
          PHP-Code:
                      if ( $zeile->sw_bemerkung != "" ){ 
                          echo 
          "<option value=\"$row->sw_bemerkung\" "
                          if ( 
          $zeile->sw_bemerkung == $row['sw_bemerkung'] ) { 
                              echo 
          " selected "
                          } 
                          echo 
          ">" $row['sw_bemerkung'] . "</option>";        
                      } 
                      else { 
                          echo 
          "<option value=\"".$row['sw_bemerkung'] . "\">" $row['sw_bemerkung'] . "</option>";   
                      } 
          Unnötig verschachtelt und schlecht zu lesen.
          Das sollte das gleiche schaffen:
          PHP-Code:
                      $selected '';
                      if ( 
          $zeile->sw_bemerkung == $row['sw_bemerkung'] ) { 
                              
          $selected 'selected';
                      }
                      echo 
          '<option value="'.$row['sw_bemerkung'] .'" '.$selected.'>' $row['sw_bemerkung'] . '</option>'

          Und dann, das was Isteglitz sagt, mal im Quelltext nachsehen was denn beim value-Attribut der Optionen drin steht.

          Standardtext für die Datenbankverbindung:
          Die mysql_* Erweiterung ist veraltet und wird in der nächsten PHP-Version entfernt. Zudem ist deine Query anfällig für SQL-Injections (aktuell nicht, aber falls du Variablen in dein Insert nimmst).
          Durch einen Wechsel auf mysqli_* oder PDO greifst du aufdie modernere API zu und hast die Möglichkeiten Prepared Statements zu benutzen die gegen Injections wirken.
          Ich persönlich bevorzuge PDO, schönes Tutorial: http://www.peterkropff.de/site/php/pdo.htm
          Relax, you're doing fine.
          RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

          Kommentar


          • #6
            und kein PHP_SELF verwenden: http://blog.oncode.info/2008/05/07/p...scripting-xss/

            LG
            https://github.com/Ma27
            Javascript Logic is funny:
            [] + [] => "", [] + {} => object, {} + [] => 0, {} + {} => NaN

            Kommentar


            • #7
              Zitat von VPh Beitrag anzeigen
              Das sollte das gleiche schaffen:
              PHP-Code:
                          $selected '';
                          if ( 
              $zeile->sw_bemerkung == $row['sw_bemerkung'] ) { 
                                  
              $selected 'selected';
                          }
                          echo 
              '<option value="'.$row['sw_bemerkung'] .'" '.$selected.'>' $row['sw_bemerkung'] . '</option>'
              So, ich habe jetzt mal deine gekürzte Version eingefügt.
              Nun wird zumindest ein Wert übergeben, aber immer der erste der Dropdown-Liste und nicht der, den ich ausgewählt habe.

              Kommentar


              • #8
                Ja und? Dann wird deine Abfrage noch wo nicht korrekt sein, schau es dir an.

                Prüfe ob dein HTML-Formular, das du erstellst, korrekt ist (mal den W3C Validator auf deine Seite loslassen: http://validator.w3.org/ ), prüfe was im $_POST nach absenden daherkommt und was du mit den Werten dann machst etc. Einfach debuggen. Man muss es nur tun und das ist deine Aufgabe, deine Fehler in deinem Code zu finden: http://php-de.github.io/jumpto/leitfaden/

                Und ja, debuggen ist u.U. sehr lästige und unangenehme Arbeit, aber es hilft nicht, die musst du machen. Und vergiss nicht durch die "AHA-Effekte" die du bekommst, wenn du den Grund (= deinen Fehler) findest lernst du auch wieder dazu.

                Also, setzt dich hin, wenn es sein muss den ganzen Tag und analysiere Zeile für Zeile, Kommando für Kommando deine Code und du wirst fündig werden.

                LG
                Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                PHP.de Wissenssammlung | Kein Support per PN

                Kommentar


                • #9
                  Zitat von hausl Beitrag anzeigen

                  Also, setzt dich hin, wenn es sein muss den ganzen Tag und analysiere Zeile für Zeile, Kommando für Kommando deine Code und du wirst fündig werden.
                  Bevor ich mich an ein Forum wende, habe ich meistens mit bestem Wissen schon jede Zeile durchforstet...
                  Aber, ich werde weiter suchen, wenn ich keine Anregung bekomme, woran es liegen kann.

                  Kommentar


                  • #10
                    PHP-Code:
                    if ( $zeile->sw_bemerkung == $row['sw_bemerkung'] ) { 
                    Mach da zb. mal ein echo rein, für beide Vars, was da genau verglichen wird und schau ob das passt. Irgendwie fehlt mir da in der Prüfung die $_POST var (also damit du den "abgeschickten Wert" mit dem "vorhandenen Wert" vergleichen kannst), muss aber nichts heissen, je nachdem was da noch an Code rundherum ist.

                    PHP-Code:
                    if ( $zeile->sw_bemerkung == $row['sw_bemerkung'] ) 
                        echo 
                    '##' $zeile->sw_bemerkung '##' $row['sw_bemerkung'] . "##\n"
                    Anmk: Die Rauten nur damit man es leichter "findet", denn ev. musst in den HTML-Quelltext schauen damit du den Text sehen kannst.

                    LG
                    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                    PHP.de Wissenssammlung | Kein Support per PN

                    Kommentar


                    • #11
                      Als Ausgabe erscheint dann genau:

                      Code:
                      ##NinJo Client 1.8 RC 02##NinJo Client 1.8 RC 02##
                      Aber, dass ist auch nicht die Stelle im Code, bei der es hakt.
                      Die Stelle soll mir ja nur den aktuellen Wert der Datenbank als selected in der Dropdown-Liste markieren und das funktioniert auch.

                      Der Fehler entsteht danach!

                      Nachdem ich einen neuen Wert aus der Liste ausgewählt habe, soll später einmal der neu ausgewählte Eintrag in die DB geschrieben werden.

                      Um zu überprüfen, ob der neu ausgewählte Wert überhaupt richtig übermittelt wird, habe ich folgenden Code eingebaut:

                      PHP-Code:
                      print_r($_POST);
                      if ( 
                      $action == 'softwareUpdated' ){
                          if (isset (
                      $_POST['softwareupdate'])){
                              
                      $software $_POST['softwareupdate'];
                              echo 
                      "Die aktuelle Software-Version: ".$software;
                          }else {
                              echo 
                      "Error";    
                          }

                      Hier entsteht allerdings die Ausgabe:
                      Code:
                      Array ( [softwareupdate] => "1. Wert in Dropdown-Liste" ) Die aktuelle Software-Version: "1. Wert in Dropdown-Liste"
                      Erwarten würde ich die Ausgabe:
                      Array ( [softwareupdate] => "ausgewählter Wert" ) Die aktuelle Software-Version: "ausgewählter Wert"

                      Was mich halt wundert:
                      Ich benutze genau dieselbe Herangehensweise an anderer Stelle und da wird der ausgewählte Eintrag im POST übergeben.
                      Der einzige Unterschied ist, dass sich hier die Dropdown-Liste innerhalb einer Tabelle befindet.

                      Kommentar


                      • #12
                        PHP-Code:
                        print_r($_POST); 
                        Hier entsteht allerdings die Ausgabe:

                        Code:
                        Array ( [softwareupdate] => "1. Wert in Dropdown-Liste" ) Die aktuelle Software-Version: "1. Wert in Dropdown-Liste"
                        Erwarten würde ich die Ausgabe:
                        Code:
                        Array ( [softwareupdate] => "ausgewählter Wert" ) Die aktuelle Software-Version: "ausgewählter Wert"
                        Dann wiederhole ich mich: Wenn nach absenden des Form im $_POST nicht das ankommt was du erwartest, prüfe den HTML-Code deines Forms auf Korrektheit, hast du das schon gemacht?

                        Brich es herunter, prüfe step by step bis du den Punkte hast, wo der korrekte Ablauf unterbrochen wird, und an genau der Stelle prüfst du dann im Detail warum es dazu kommt.
                        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                        PHP.de Wissenssammlung | Kein Support per PN

                        Kommentar


                        • #13
                          Also, mit folgendem Code funktioniert es nun:
                          PHP-Code:
                          /*
                              Tabelle mit Inhalt aus Datenbank füllen
                          */
                          //echo $sql;
                          $sql_add=$sql." ".$add;
                          mysql_query($sql_add);
                          $res mysql_query($sql_add);
                          $rows mysql_num_rows($res);

                          if ( 
                          $rows ) {
                                  while ( 
                          $zeile mysql_fetch_object($res) ) {
                              
                          //SPALTE Ort
                                  
                          $ort=urlencode(utf8_encode($zeile->ort));
                                        echo 
                          " <tr><td><a href=/geoinfo/geoinfo_uebersicht_anzeigen.php?action=show&ort=$ort target=\"_blank\">$zeile->ort</a></td>";
                              
                          //SPALTE Ip-Adresse
                                  
                          $ipadresse=$zeile->ipadresse;
                                  echo 
                          "<td><a href=/hardware/endgeraet_anzeige?ipadresse=$ipadresse&action=none>$zeile->ipadresse</a></td>";
                              
                          //SPALTE Seriennummer
                                  
                          $seriennr=$zeile->endgeraet_seriennr;
                                  echo 
                          "<td><a href=/hardware/endgeraet_anzeige?seriennr=$seriennr>$zeile->endgeraet_seriennr</a></td>";
                              
                          //SPALTE NinJo-Version    
                                  
                          echo "<td>";
                                  echo 
                          "<form method=POST action='"; echo $_SERVER["PHP_SELF"]; echo "?action=softwareUpdated'>";
                                  include(
                          "softwareselectforupdate.php");
                                  echo 
                          "</form>";
                                  echo 
                          "</td>";
                              
                          //SPALTE Modell & Verband
                                  
                          echo "<td>$zeile->Modellbezeichnung</td><td>$zeile->verband</td>";
                              
                          //SPALTE Mailadresse
                                  
                          if ( strcmp$zeile->gi_nutzer_mail,"ohne" )) {
                                                  echo 
                          "<td><a href=\"mailto:$zeile->gi_nutzer_mail\">$zeile->gi_nutzer_mail</a></td</td>";
                                          } else {
                                                  echo 
                          "<td>$zeile->gi_nutzer_mail</td>";
                                          }
                              
                          //SPALTE Telefon
                                          
                          echo "</td><td>$zeile->gi_nutzer_telefon</td></tr>";
                              }

                          }



                          if ( isset (
                          $_GET['action'] ) ) {
                              
                          $action=$_GET['action'];
                          }

                          // -----------------------ZUM TESTEN-------------------------
                          //print_r($_POST);

                          if ($action == 'softwareUpdated') {
                              if (isset (
                          $_POST['softwareupdate'])){
                                  
                          $software $_POST['softwareupdate'];
                                  
                          //Zum Testen        
                                  
                          echo "Die aktuelle Software-Version: ".$software;
                                  
                          //Hier nun den Datenbankeintrag aktualisieren
                                  
                              
                          }else {
                                  echo 
                          "Error";    
                              }
                          }

                          echo 
                          "</table>"
                          Wobei, die Datei "softwareselectforupdate.php" wie folgt aufgebaut ist:
                          PHP-Code:
                          <?php
                          $sqlo
                          ="SELECT sw_bemerkung FROM hw_sw  GROUP BY sw_bemerkung";

                          $reso mysql_query($sqlo);
                          $num=mysql_num_rows($reso);
                          echo 
                          "<select name='softwareupdate' size='1' style='width: 250px' onChange='this.form.submit()'>";
                          while(
                          $row mysql_fetch_assoc($reso)) { 
                              
                          $selected '';
                              if ( 
                          $zeile->sw_bemerkung == $row['sw_bemerkung'] ) { 
                                     
                          $selected 'selected';
                              }
                              echo 
                          '<option value="'.$row['sw_bemerkung'] .'" '.$selected.'>' $row['sw_bemerkung'] . '</option>';    
                          }
                          echo 
                          "</select>";
                          ?>

                          Kommentar


                          • #14
                            Fragt sich nur, wo im "softwareselectforupdate.php" die Variable "$zeile" herkommt?
                            Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                            Kommentar


                            • #15
                              PHP-Code:
                              while ( $zeile mysql_fetch_object($res) ) { 
                              Bevor die 2. Datei includet wird.
                              Relax, you're doing fine.
                              RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

                              Kommentar

                              Lädt...
                              X