Ankündigung

Einklappen
Keine Ankündigung bisher.

In einer Tabelle alle Felder verändern die den Werst XXX haben zu ZZZ

Einklappen

Neue Werbung 2019

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

  • In einer Tabelle alle Felder verändern die den Werst XXX haben zu ZZZ

    Hallo, ich bin Anfänger und habe bestimmt nur einen kleinen Fehler ... Denke ich
    Ich möchte in der Tabelle etchat_smileys alle Felder ändern die in etchat_smileys_cat sind mit den in halt von zum Beispiel Test zu Test2 (Dies kann in mehren Zeilen vorkommen.
    Dazu habe ich ein Formular was die Daten Sendet mit name_old und name.
    Wo ist mein Fehler in der abfrage oder gar falscher Ansatz? Bitte um Hilfe.

    PHP-Code:
    UPDATE {$this->_prefix}etchat_smileys SET etchat_smileys_cat REPLACE(etchat_smileys_cat,'".$_POST["name_old"]."''".$_POST["name"]."'WHERE etchat_smileys_cat 

  • #2
    Moin.
    Mal angesehen davon, dass es grob fahrlässig ist Daten aus $_POST unbehandelt auf deinen SQL Server loszulassen, ist deine WHERE Bedingung unvollständig.
    Lg

    Kommentar


    • #3
      Oh beim Kopieren den Rest verschluckt. Aber danke für den Hinweis.
      Die Daten aus Post sind zwar unbehandelt, aber der Skript Prüft vorab ob man das machen darf bzw. ob man der berechtigte Sender ist durch eine If Bedingung und ob gesetzt ist...... . Nur wenn diese erfüllt ist wird der Code ausgefüllt.
      Aber leider klappt das nicht so mit der Schreibweise. Denke das ich da einen Fehler habe bei den " oder ' Zeichen. Da blicke ich noch nicht 100 pro durch. oder ??

      PHP-Code:
      UPDATE {$this->_prefix}etchat_smileys SET etchat_smileys_cat REPLACE(etchat_smileys_cat,'".$_POST["name_old"]."''".$_POST["name"]."'WHERE etchat_smileys_cat  LIKE '%'".$_POST["name"]."'%' COLLATE utf8mb4_bin 

      Kommentar


      • #4
        Zitat von Powermen Beitrag anzeigen
        Die Daten aus Post sind zwar unbehandelt, aber der Skript Prüft vorab ob man das machen darf bzw. ob man der berechtigte Sender ist durch eine If Bedingung und ob gesetzt ist...... .
        Falsch! Es gibt exakt niemanden der berechtigt ist einen Query mit übergebenen, ungeprüften Parametern darin abzuschicken. Verwende prepared Statements um die Werte zu übergeben - das hat auch den Vorteil dass du dich nicht bei den Anführungszeichen verknoten kannst.

        Aber leider klappt das nicht so mit der Schreibweise. Denke das ich da einen Fehler habe bei den " oder ' Zeichen.
        "Klappt nicht" ist (und war noch nie) eine Fehlerbeschreibung. Mehr lässt sich aber anhand des gezeigten Codes nicht sagen: das ist kein gültiges PHP.

        Aber was hast du eigentlich vor? Soll in eine Spalte »foo« geschrieben werden wenn da genau »bar« steht oder sollen auch Teile der Spalte ersetzt werden? Wenn du nur den genauen Wert ersetzen möchtest, reicht ein einfaches Update dass alle Felder auf den gewünschten Wert setzt mit einer WHERE-Bedingung auf den zu ersetzenden Wert - das REPLACE-Ding bräuchte es dann nicht.

        Kommentar


        • #5
          Hallo Danke für deine Mühe, bin Leider ja Anfänger und suche mir hier und da Teile zusammen wie man was evtl. machen kann. Erweitern verändern Komfortabler machen kann.
          Daher kann ich nicht so gut PHP und SQL.

          Ich möchte in der Tabelle etchat_smileys alle Felder auf einen schlag ändern die den Zellen etchat_smileys_cat sind die einen bestimmten wert haben zu einem anderen.
          Der wert kann in unterschiedlicher Anzahl in den Zeilen der Zelle vorkommen.
          Das müsste nun die ganze PHP Code Zeile sein (Hoffe ich
          Die mir da Probleme macht. Der Code selbst ohne der Zeile klappt und ändert mir schon mal in einer anderen Tabelle das eine Feld.

          Diese Anweisung ist eine Zeile davor im PHP Code.
          PHP-Code:
           $this->dbObj->sqlSet("UPDATE {$this->_prefix}etchat_smileys_cat SET name = '".$_POST["name"]."' WHERE id = ".(int)$_POST["id"]); 
          Und diese wollte ich einbauen, mit der ich Probleme habe, nach der Zeile, das er auch in einer anderen Tabelle noch die beschriebenen Änderungen macht.
          PHP-Code:
          $this->dbObj->sqlSet("UPDATE {$this->_prefix}etchat_smileys SET etchat_smileys_cat = REPLACE(etchat_smileys_cat,'".$_POST["name_old"]."', '".$_POST["name"]."') WHERE etchat_smileys_cat  LIKE '%'".$_POST["name"]."'%' COLLATE utf8mb4_bin"); 

          Kommentar


          • #6
            Zitat von Powermen Beitrag anzeigen
            Hallo Danke für deine Mühe, bin Leider ja Anfänger und suche mir hier und da Teile zusammen wie man was evtl. machen kann. Erweitern verändern Komfortabler machen kann.
            Daher kann ich nicht so gut PHP und SQL. ...
            Das was du da zusammen gesammelt hast ist eine Sicherheitslücke!!!

            Kommentar


            • #7
              Danke für den Hinweis.
              Und wieso? Die erste Zeile ist ja nicht von mir, die ist ja Original.

              Die zweite will ich hin zubauen. Da ich eine weitere Tabelle verändern mit anpassen will.
              wie ich schrieb ist das Post durch eine abfrage if und SESSION ID abgesichert von den Ersteller. .....

              Kommentar


              • #8
                Zitat von Powermen Beitrag anzeigen
                Und wieso? Die erste Zeile ist ja nicht von mir, die ist ja Original.
                Spielt keine Rolle. Der Ersteller der Zeilen hatte offenbar ebenfalls keine Ahnung, was er da tut.

                Mach dich vertraut mit dem Begriff SQL-Injection, was das ist, wie es funktioniert und wie man sich davor schützen kann.
                Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                Kommentar


                • #9
                  Zitat von tk1234 Beitrag anzeigen

                  Aber was hast du eigentlich vor? Soll in eine Spalte »foo« geschrieben werden wenn da genau »bar« steht oder sollen auch Teile der Spalte ersetzt werden? Wenn du nur den genauen Wert ersetzen möchtest, reicht ein einfaches Update dass alle Felder auf den gewünschten Wert setzt mit einer WHERE-Bedingung auf den zu ersetzenden Wert - das REPLACE-Ding bräuchte es dann nicht.
                  Danke an TH1234 mit der WHERE Bedingung hat es denn geklappt, Dachte immer das die nur eine Zeile bearbeiten kann, nun weis ich das es alle Zeilen bearbeitet werden die die Bedienungen enthält und bin wieder ein Stück schlauer geworden.

                  Werde mir Natürlich mal mit "SQL-Injection" beschäftigen, aber so weit ich es gesehen habe ist im Skript eine SESSION gestartet die man nur bekommt als Admin bzw. wenn man Admin ist das Admin darin enthalten ist und die man nur durch den Anmelden bekommt mit Passwort (Benutzername) wenn man Admin ist.

                  Kurz um einen Link mit den angegebenen Variablen auf der PHP Datei zu Posten reicht da nicht aus. oder ich verstehe es Leider immer noch nicht ganz

                  Kommentar


                  • #10
                    Zitat von Powermen Beitrag anzeigen
                    aber so weit ich es gesehen habe ist im Skript eine SESSION gestartet die man nur bekommt als Admin bzw. wenn man Admin ist das Admin darin enthalten ist und die man nur durch den Anmelden bekommt mit Passwort (Benutzername) wenn man Admin ist.
                    Eine Session ist unabhängig von Authentifizierung und Authorisierung. Beides muss ebenfalls gesondert voneinander betrachtet werden.
                    Je nach Servereinstellung kann PHP eine Session automatisch starten (was sogar Standard ist, soweit ich weiß), dann hat jeder Besucher der Seite, eingeloggt oder nicht, eine gültige Session.

                    Authentifizierung erfolgt beim Login - ein Benutzer gibt seine Logincredentials ein, es wird verifiziert, ob es diesen Benutzer gibt.
                    Authorisierung ist das, was der angemeldete Benutzer dann darf... das ist in der Regel Anwendungsspezifisch, aber im Prinzip sagt es aus, welche Resourcen (URL) bzw. Operationen ein User verwenden darf.
                    Klassisches Beispiel CRUD (Create, Read, Update, Delete):
                    • Standard User hat keinerlei Rechte zur Bearbeitung von Daten (create, update, delete), darf aber lesen (read).
                    • Admin Benutzer haben die CRUD Rechte, wobei auch hier wieder Abstufungen existieren können.
                      Dh. Ein Content-Admin dürfte CMS Inhalte bearbeiten, aber keine Produkte. Dafür wäre dann eine andere Admin-Rolle zuständig.

                    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                    Kommentar


                    • #11
                      Zitat von Powermen Beitrag anzeigen
                      Werde mir Natürlich mal mit "SQL-Injection" beschäftigen, aber so weit ich es gesehen habe ist im Skript eine SESSION gestartet die man nur bekommt als Admin bzw. wenn man Admin ist das Admin darin enthalten ist und die man nur durch den Anmelden bekommt mit Passwort (Benutzername) wenn man Admin ist.
                      Du sitzt da einem fatalen Irrtum auf: es ist völlig egal wer auf das Script zugreifen darf, Werte von außen müssen *immer* (ohne Ausnahme!) behandelt werden. Beschäftige dich auch mit dem Thema Kontextwechsel (SQL-Injection wird da auch behandelt), potentiell gefährliche Daten müssen bei einem Kontextwechsel (was anderes ist der Einbau von Daten aus $_POST in eine Query nicht) immer behandelt werden - wobei das Problem noch weiter geht: auch z.B. bei der Ausgabe von Daten in den HTML-Quelltext einer Seite hast du einen Kontextwechsel der behandelt werden muss.

                      Kommentar

                      Lädt...
                      X