Ankündigung

Einklappen
Keine Ankündigung bisher.

SQL Update per Link

Einklappen

Neue Werbung 2019

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

  • SQL Update per Link

    Hallo,

    habe ein Datenbankverzeichniss erstellt indem die Einträhe entweder mit "1" angezeigt oder mit "0" ignoriert werden.
    Möchte dazu ein Admin Panel erstellen indem man die Einträge die mit "0" bezeichnet sind mit einem Klick in "1" ändern kann und somit freischalten.
    Nun weiss ich jedoch leider nicht wie ich diese SQL Abfrage über einen Link ausführen kann.

    Hier mein bisheriger Code:

    PHP-Code:
    <?php
        
    include("...");
        
    $sql "SELECT * FROM adressen WHERE Zeigen='0'";
        
    $sql2 "UPDATE adressen SET Zeigen='1' WHERE id='$id'";
        
    $result mysqli_query($db$sql);
        function 
    update($id)
        {
            return 
    mysqli_query($db$sql);
        }
        while (
    $row mysqli_fetch_assoc($result)) {
            
    $id $row[id];
            echo 
    "<tr><th>id</th><th>Unternehmen</th><th>Str</th><th>PLZ</th><th>Ort</th><th>Tel</th>
                  <tr><td>
    $row[id]</td><td>$row[Unternehmen]</td><td>$row[Str]</td><td>$row[PLZ]</td><td>$row[Ort]</td><td>$row[Tel]</td><td><a href=\"panl.php?action=edit\">Freischalten</a></tr>";
        }
         if(
    $_GET['action'] == "edit") {
            
    update($id);    //<-- Funktion aufrufen
        

        
    mysqli_close($db);
        
    ?>
    Vlt kann mir ja jemand weiterhelfen.

  • #2
    Zitat von seb.suicide Beitrag anzeigen
    PHP-Code:
    <?php
    // ... snip ...

        
    function update($id)
        {
            return 
    mysqli_query($db$sql);
        }

    // ... snip ...

         
    if($_GET['action'] == "edit") {
            
    update($id);    //<-- Funktion aufrufen
        

        
    ?>
    Deine Funktion erhält einen Parameter $id, verwendet aber für den query Aufruf $db und $sql?
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      Ja, bin neu in sachen PHP. Habe von Funktionen eigentlich noch keine Ahnung. Habe mir da nur im Internet was zusammen gesucht und dann kam das dabei raus.

      Wie könnte man es denn lösen?

      Kommentar


      • #4
        Wenn das darauf hinauslaeuft dass wir dir von a - z alles schreiben sollen (oder notgedrungen muessten) mache ich den Thread zu, das gleich zu Beginn!

        Ein Link koennte so aussehen:
        switch-flag.php?id=#

        Wobei # eine Zahl, deine Datensatz-ID ist. Jetzt musst du nurnoch per $_GET die ID aus der URL holen und dein UPDATE-Statement auf die Datenbank loslassen: UPDATE table SET zeigen = (zeigen * -1) + 1 WHERE id = $_GET["id"].

        Den Link erzeugst du in der while()-Schleife.
        "[URL="http://www.youtube.com/watch?v=yMAa_t9k2VA&feature=youtu.be&t=25s"]Mein Name ist Lohse, ich kaufe hier ein.[/URL]"

        Kommentar


        • #5
          Ist es richtig die SQL Abfrage wie ich zuvor gepostet hatte von der $sql2 abzufragen oder muss ich die direkt in der Funktion aufrufen?
          Und wie setzt sich das mit dem * -1 und + 1 zusammen? Reicht es nicht den Wert von 0 in 1 abzuändern?


          // EDIT

          Habe es gelöst. Es funktioniert nun. Danke.

          Kommentar


          • #6
            Zitat von seb.suicide Beitrag anzeigen
            Reicht es nicht den Wert von 0 in 1 abzuändern?
            Doch, aber du willst ja auch 1 in 0 ändern oder? Dann musst du dir halt eine "Formel" ausdenken die aus 0 1 und aus 1 0 macht oder eben mit Bedingungen arbeiten.
            "[URL="http://www.youtube.com/watch?v=yMAa_t9k2VA&feature=youtu.be&t=25s"]Mein Name ist Lohse, ich kaufe hier ein.[/URL]"

            Kommentar


            • #7
              Habe jetzt ein neues Problem. Ich kann die SQL Updates nun per Linkklick durchführen, jedoch nur den jeweils letzten Eintrag.
              Das Script listet alle Einträge die noch freigeschaltet werden müssen untereinander auf. Neben jedem Eintrag sind 2 Links, einer fürs freischalten und einer fürs löschen.
              Nun funktionieren diese beiden Links immer nur beim jeweils letzten Eintrag, dem untersten. Wenn ich diesen nun freischalte oder lösche dann kann ich den nächsten, der sich nun ganze unten findet bearbeiten.
              Wie kann ich das lösen das nicht nur der letzte klickbar ist?

              Außerdem möchte ich das nach freischalten oder löschen des Eintrags dieser verschwindet oder sich zumindest die Seite danach neu läd damit dieser nicht mehr zu sehen ist. Das muss man jetzt noch manuell machen.

              PHP-Code:
                  <table width="500" border="0" cellspacing="5">
                  <tr><td><a href="accs.php"><img src="reload.gif" alt="Seite neu laden" border="0"></a></td></tr><tr></tr>
                  <tr><th>Firma</th><th>Str</th><th>PLZ</th><th>Ort</th><th>Tel</th></tr>
                   
                  <?php
                  
              include("acc.php");
                  
              $sql "SELECT * FROM TABELLE WHERE Zeigen='0'";
                  
              $result mysqli_query($db$sql);
                  while (
              $row mysqli_fetch_assoc($result)) {
                      
              $id $row[id];
                      echo 
              "<tr style=\"background-color:#e7e7e7\"><td>$row[Firma]</td><td>$row[Str]</td><td>$row[PLZ]</td><td>$row[Ort]</td><td>$row[Tel]</td><td><a href=\"accs.php?flag=$id\"><img src=\"ok.jpg\" alt=\"Freischalten\" border=\"0\"></a> <a href=\"accs.php?delete=$id\"><img src=\"delete.jpg\" alt=\"Löschen\" border=\"0\"></a>";
                  }
                   if(
              $_GET['flag'] == "$id&& !empty($id)) {
                       echo 
              "<td>Wirklich Freischalten? " " <a href=\"accs.php?add=$id\">ja</a> | <a href=\"accs.php\">nein</a></td>";
                   } else if (empty(
              $id)) {
                       echo 
              "<td>Es liegen keine Eintragungen vor.</td>";
                   }
                   if(
              $_GET['add'] == "$id&& !empty($id)) {
                      
              $sql2 "UPDATE TABELLE SET Zeigen='1' WHERE id='".$id."'";
                      
              $result2 mysqli_query($db,$sql2);
                   }
                   if(
              $_GET['delete'] == "$id&& !empty($id)) {
                       echo 
              "<td>Wirklich löschen? " " <a href=\"accs.php?deletej=$id\">ja</a> | <a href=\"accs.php\">nein</a></td>";
                   } 
                   if(
              $_GET['deletej'] == "$id&& !empty($id)) {
                      
              $sql3 "DELETE FROM TABELLE WHERE id='".$id."'";
                      
              $result2 mysqli_query($db,$sql3);
                   }
                  
              mysqli_close($db);
                  
              ?>
                  </tr></table>

                  </div>

              Kommentar


              • #8
                Zitat von seb.suicide Beitrag anzeigen
                Ich kann die SQL Updates nun per Linkklick durchführen, jedoch nur den jeweils letzten Eintrag.
                Natürlich, denn du vergleichst die per GET übergebene ID ja vor dem Updaten/Löschen mit dem Inhalt von $id.
                Und $id kommt aus deiner While-Schleife, die alle Datensätze durchgeht. Nach der Schleife steht also der ID-Wert des letzten Datensatzes in $id.

                Wozu soll denn dieser Vergleich überhaupt gut sein ...?

                Außerdem möchte ich das nach freischalten oder löschen des Eintrags dieser verschwindet oder sich zumindest die Seite danach neu läd
                Auch das ist nur logisch, weil du zuerst alle Datensätze ausliest, und danach erst löschst.
                [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

                Kommentar


                • #9
                  Ich dachte man braucht diesen Vergleich weil ich es irgendwo gelesen hatte. Ist mein erstes script. Geht es denn wenn ich den vergleich weg lasse?
                  Es werden alle ausgelesen damit sie aufgelistet werden können. geht es denn anders?

                  Kommentar


                  • #10
                    Zitat von seb.suicide Beitrag anzeigen
                    Ich dachte man braucht diesen Vergleich weil ich es irgendwo gelesen hatte.
                    Überlege dir bitte selber, wie die Logik deiner Scripte aussehen muss - statt irgendwas von irgendwoher zu übernehmen, ohne es verstanden zu haben.

                    Geht es denn wenn ich den vergleich weg lasse?
                    Wir erwarten deine Antwort auf die Frage, die du nach dem Ausprobieren sicher geben kannst.

                    Es werden alle ausgelesen damit sie aufgelistet werden können. geht es denn anders?
                    Wie wär's, wenn du selbst mal ein bisschen logisch nachdenkst?

                    Wenn ein Parameter übergeben wurde - dann erst Löschen/Updaten.
                    Sonst bzw. anschliessend alle Datensätze auslesen und anzeigen lassen.
                    [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

                    Kommentar


                    • #11
                      Man kann aber doch keine Einträge löschen oder Freischalten wenn diese, die noch auf eine Bearbeitung warten nicht zuerst ausgegeben werden. Denn erst dadurch werden die Links generiert die dann letztendlich klickbar sind.
                      Wenn ich den vergleich weglasse dann arbeitet das Script die ganzen löschen / freischalten, ja / nein Zeilen automatisch ab ohne das ich es will.

                      Theoretisch müsste das Script dann ja die einzelnen $id jedes zu bearbeitenden Eintrags in eine einzelne Variable speichern was jedoch zu aufwändig wäre bzw mit den Links nicht funktionieren würde.

                      Kommentar


                      • #12
                        Noch mal: Mach dir klar, dass es sich um mehrere Scriptaufrufe handelt.

                        Wenn eine ID eines zu löschenden Datensatzes übergeben wurde - dann lösche erst, und gebe anschliessend die Liste der danach noch vorhandenen Datensätze aus.

                        Wenn keine ID übergeben wurde - dann gebe nur die Liste mit den Datensätzen aus.
                        [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

                        Kommentar


                        • #13
                          Ich habe es jetzt geschafft das man jeden beliebigen Eintrag löschen und freischalten kann. Dieser muss nicht mehr am Ende der Liste stehen. Habe den Vergleich raus gelassen und nur geprüft ob die GET Variable gesetzt ist und die id dann aus der GET Variable genommen.

                          Funktioniert soweit auch ganz gut. Nur schaffe ich es nicht das er nach dem löschen die verbleibenden Datensätze ausgibt. Die Liste bleibt so erhalten wie sie anfangs beim Seitenaufruf ausgegeben wurde.

                          Hier mein derzeitiger Code:

                          PHP-Code:
                              <br><a href="admin.php"><img src="reload.gif" alt="Seite neu laden" border="0"></a><br><br>
                              <b>&nbsp;Warten auf Bearbeitung:</b>
                              <table width="700" border="0" cellspacing="3">
                              <tr><th>Nr.</th><th>Firma</th><th>Str</th><th>PLZ</th><th>Ort</th><th>Tel</th><th></th></tr>
                               
                              <?php
                              
                          include("zugriff.php");
                              
                          $sql "SELECT * FROM tabelle WHERE Zeigen='0'";
                              
                          $result mysqli_query($db$sql);
                              
                              
                              
                               if(isset(
                          $_GET['flag'])) {
                                   echo 
                          "<table width=\"700\" border=\"0\" cellspacing=\"3\"><tr><td>Eintrag <b>Nr.</b> " $_GET['flag'] . " Wirklich Freischalten? " " <a href=\"admin.php?add=" $_GET['flag'] . "\">ja</a> | <a href=\"admin.php\">nein</a></td></tr></table>";
                               } else while (
                          $row mysqli_fetch_assoc($result)) {
                                  
                          $id $row[id];
                                  echo 
                          "<tr style=\"background-color:#e7e7e7\"><td>$row[id]</td><td>$row[Firma]</td><td>$row[Str]</td><td>$row[PLZ]</td><td>$row[Ort]</td><td>$row[Vorwahl]</td><td>$row[Nr]</td><td><a href=\"admin.php?flag=$id\"><img src=\"ok.jpg\" alt=\"Freischalten\" border=\"0\"></a> <a href=\"admin.php?delete=$id\"><img src=\"delete.jpg\" alt=\"Löschen\" border=\"0\"></a></td></tr>";
                               }
                               if(
                          $_GET['add'] == "$id") {
                                  
                          $sql2 "UPDATE tabelle SET Zeigen='1' WHERE id='".$row[id]."'";
                                  
                          $result2 mysqli_query($db,$sql2);
                               }
                               if(isset(
                          $_GET['delete'])) {
                                   echo 
                          "<table width=\"700\" border=\"0\" cellspacing=\"3\"><tr><td>Eintrag <b>Nr.</b> " $_GET['delete'] . " Wirklich löschen? " " <a href=\"admin.php?deletej=" $_GET['delete'] . "\">ja</a> | <a href=\"admin.php\">nein</a></td></tr></table>";
                               } 
                               if(isset(
                          $_GET['deletej'])) {
                                  
                          $sql3 "DELETE FROM tabelle WHERE id='".$_GET['deletej']."'";
                                  
                          $result3 mysqli_query($db,$sql3);
                                  while (
                          $row mysqli_fetch_assoc($result)) {
                                  
                          $id $row[id];
                                  echo 
                          "<tr style=\"background-color:#e7e7e7\"><td>$row[id]</td><td>$row[Firma]</td><td>$row[Str]</td><td>$row[PLZ]</td><td>$row[Ort]</td><td>$row[Vorwahl]</td><td>$row[Nr]</td><td><a href=\"admin.php?flag=$id\"><img src=\"ok.jpg\" alt=\"Freischalten\" border=\"0\"></a> <a href=\"adminphp?delete=$id\"><img src=\"delete.jpg\" alt=\"Löschen\" border=\"0\"></a></td></tr>";
                               }
                               } else while (
                          $row mysqli_fetch_assoc($result)) {
                                  
                          $id $row[id];
                                  echo 
                          "<tr style=\"background-color:#e7e7e7\"><td>$row[id]</td><td>$row[Firma]</td><td>$row[Str]</td><td>$row[PLZ]</td><td>$row[Ort]</td><td>$row[Vorwahl]</td><td>$row[Nr]</td><td><a href=\"admin.php?flag=$id\"><img src=\"ok.jpg\" alt=\"Freischalten\" border=\"0\"></a> <a href=\"admin.php?delete=$id\"><img src=\"delete.jpg\" alt=\"Löschen\" border=\"0\"></a></td></tr>";
                               }
                              
                          mysqli_close($db);
                              
                          ?>
                              </table><br><br>

                          Kommentar


                          • #14
                            Ist doch auch klar. Zuerst werden alle Datensätze ausgelesen (mit dem der gelöscht wird) und dann wird er gelöscht. Aber da die Datensätze schon ausgelesen sind existiert er eben in diesem Ergebnis noch.

                            Entweder Seite neu laden lassen oder die Einträge VOR dem auslesen löschen.

                            Kommentar


                            • #15
                              Ok, Danke trotzdem an alle die mir hier geholfen haben. Dann werde ich es mit einem automatischen Reload per Javascript versuchen.

                              Kommentar

                              Lädt...
                              X