Ankündigung

Einklappen
Keine Ankündigung bisher.

Dropdown Liste um Daten zu ändern

Einklappen

Neue Werbung 2019

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

  • Dropdown Liste um Daten zu ändern

    Guten Tag,

    ich betreibe eine kleine Community und möchte das sich meine Nutzer registrieren. Die Daten kommen dann in eine Datenbank zusammen mit dem Rang des "Newbie". Das funktioniert auch alles wunderbar, nun möchte ich aber das meine Admin's den Rang im Browser bearbeiten können. Ich stell mir das in etwa so vor, dass alle Einträge in einer Tabelle ausgegeben werden und beim Rang Feld eine dropdown Auswahl ist.

    Die Tabelle gebe ich so aus:
    PHP-Code:
        echo '<table border="1">';
        while (
    $zeile mysqli_fetch_array$db_ergMYSQL_ASSOC))
        {
          echo 
    "<tr>";
          echo 
    "<td>"$zeile['vorname'] . "</td>";
          echo 
    "<td>"$zeile['nachname'] . "</td>";
          echo 
    "<td>"$zeile['geburtstag'] . "</td>";
          echo 
    "<td>"$zeile['email'] . "</td>";
          echo 
    "<td>"$zeile['nickname'] . "</td>";
          echo 
    "<td>"$zeile['anwerber'] . "</td>";
          echo 
    "<td>"$zeile['geschlecht'] . "</td>";
          echo 
    "<td>"$zeile['steamnick'] . "</td>";
          echo 
    "<td>"$zeile['handy'] . "</td>";
          echo 
    '<td><form action="rang.php?id='.$row['id'].'" method="post"><input type="text" value="'htmlentities($zeile['rang']) . '"><input type="submit"></form></td>';      
          echo 
    "</tr>";
        }
        echo 
    "</table>"

    und in der rang.php steht:
    PHP-Code:
    <?php
        
        
    require __DIR__.'/pdo.php';  

        if (isset(
    $_POST['rang']) and isset($_GET['id'])) { 
            
    $rang $_POST['rang']; 
            
    $id = (int) $_GET['id']; 

             
            
    $stmt $db->prepare('INSERT INTO member (id, rang) VALUES (Leader, Moderator, Member, Newbie)'); 
            
    $stmt->bindParam(1$id); 
            
    $stmt->bindParam(1$rang); 
            
    $stmt->execute(); 

            echo 
    'Update erfolgreich.'
        } else { 
            echo 
    'Ungueltiger Aufruf - Rang und ID muessen korrekt angegeben werden.'
        }
    ?>
    Das dropdown Menü fehlt noch aber ich habe eine Eingabe. Diese wird jedoch nicht gespeichert.... Jemand ne Idee?


  • #2
    Updates macht man auch mit dem SQL-Befehl UPDATE. Du machst ein zusätzliches INSERT, was also den Eintrag verdoppeln würde. (De facto aber wahrscheinlich einen Fehler bringt, weil du die ID doppelt verwendest, was nicht erlaubt ist.)

    Kommentar


    • #3
      Wo verwende ich die ID denn doppelt?

      Kommentar


      • #4
        Na bei deinem "Update". Du bearbeitest nämlich nicht einen User, sondern versuchst einen neuen anzulegen (INSERT) mit der ID, die ein vorhandener User bereits hat.

        Das deine Eingabe nicht übernommen wird liegt übrigens daran, das dein Feld keinen Namen hat.

        Kommentar


        • #5
          DD-Gamer wie ich dir schon mitgeteilt habe - Eigeninitiative ist von Nöten! Du weißt - bei allem Respekt - im Grunde nicht, was dein Code tut. Zum Beispiel: Warum gibt es einen Zugriff auf $row['id'] wenn sonst immer mit dem Array $zeile gearbeitet wird?

          Was Tropi meint ist: Mit dem SQL-Ausdruck INSERT INTO fügt man einen Datensatz neu ein. Wenn du also einen Datensatz bearbeitest, den es schon gibt, versuchst du, diesen neu einzufügen - aber mit einer bereits vorhandenen ID. Das gibt dann - sofern das Attribut korrekt konfiguriert ist - einen Fehler. Ich glaube hier reicht es, INSERT INTO durch UPDATE zu ersetzen (da du keine neuen Datensätze anlegen können musst) - das ändert aber den Aufbau des Statements. Deine Aufgabe ist nun, herauszufinden, wie du das SQL-Statement umbauen musst.

          Kommentar


          • #6
            Muss ich die Variablen mit $_POST übergeben damit sie empfangen werden können?

            Kommentar


            • #7
              Oder muss ich die gesamte Tabellenausgabe verändern? Z.b. wie diese hier? http://www.php-einfach.de/einf_mysql...he_abfrage.php

              Kommentar


              • #8
                Zitat von DD-Gamer Beitrag anzeigen
                Oder muss ich die gesamte Tabellenausgabe verändern? Z.b. wie diese hier? http://www.php-einfach.de/einf_mysql...he_abfrage.php
                Nein.

                Du solltest zunächst diese Frage beantworten:
                Warum gibt es einen Zugriff auf $row['id'] wenn sonst immer mit dem Array $zeile gearbeitet wird?
                Das führt weiter.

                Kommentar


                • #9
                  Weil er zwar alles ausliest, die ID aber nicht mit der Zeile ausgibt?

                  Kommentar


                  • #10
                    Weil es keinen Array namens $row gibt?

                    Kommentar


                    • #11
                      Und inwiefern ist das nun schlimm?

                      Kommentar


                      • #12
                        PHP-Code:
                        echo '<td><form action="rang.php?id='.$row['id'].'" method="post"><input type="text" value="'htmlentities($zeile['rang']) . '"><input type="submit"></form></td>'
                        Du kannst nicht den Wert für den Schlüssel id abfragen ( $row['id'] ), wenn es den Array $row nicht gibt. Somit kannst du auch nicht die ID beim Absenden des Forms übergeben, somit kann das PHP-Skript dann auch nicht den Rang für den richtigen Datensatz ändern.

                        Anstatt auf $row muss auf einen anderen Array zugegriffen werden - rate mal, auf welchen!

                        Kommentar


                        • #13
                          PHP-Code:
                          $zeile['id'
                          Du hattest mir die Zeile so geschickt, da dachte ich row sei ne spezielle Funktion...

                          Kommentar


                          • #14
                            [closed]
                            Standards - Best Practices - AwesomePHP - Guideline für WebApps

                            Kommentar


                            • #15
                              Zitat von DD-Gamer Beitrag anzeigen
                              Du hattest mir die Zeile so geschickt, da dachte ich row sei ne spezielle Funktion...
                              Variablen in PHP beginnen mit $ - Namen von Funktionen nicht. Wenn du so etwas sieht:
                              PHP-Code:
                              $macheIrgendwas() 
                              Dann ist das zwar ein Funktionsaufruf, dennoch ist macheIrgendwas eine Variable und keine Funktion - da ein $ vorangestellt ist. Allerdings eine Variable, die einen Verweis auf eine Funktion enthält. Wie auch immer, $row ist eine Variable. Genau wie übrigens auch $_GET und $_POST. Das sind auch keine "speziellen Funktionen", sondern "spezielle Variablen". Man kann auch keine Konstanten definieren die mit $ beginnen. $ = Variable. Immer.

                              Ja ich habe dir das so geschickt. Dennoch ist es falsch. Ich habe das herunter getippt, ohne es zu testen oder mir noch ein zweites Mal durchzulesen. Dich hätte auch stutzig machen können, dass ich im Nachhinein sogar noch Tippfehler korrigiert habe. Wie auch immer, $row ist die falsche Variable.

                              In Zukunft: Je mehr du selber verstehst, desto besser. Desto eher kannst du solche Probleme handeln. Grundlagenwissen ist dafür essentiell.

                              Kommentar

                              Lädt...
                              X