1. Herzlich willkommen bei WPDE.org, dem grössten und ältesten deutschsprachigen Community-Forum rund um das Thema WordPress. Du musst angemeldet oder registriert sein, um Beiträge verfassen zu können.
    Information ausblenden

WP <5.0 Datenbankspalte mit ALTER TABLE verkleinern; Problem mit Prefix

Dieses Thema im Forum "Plugins und Widgets" wurde erstellt von m266, 19. April 2018.

Schlagworte:
  1. m266

    m266 Well-Known Member

    Registriert seit:
    21. April 2010
    Beiträge:
    575
    Zustimmungen:
    12
    Hallo zusammen,

    ich möchte die Spalte "comment_author_IP" in der Tabelle "comments" auf Null Zeichen verkleinern.
    Das folgende Script funktioniert, berücksichtigt aber nicht den Präfix (wp_ usw.):
    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Wie bekomme ich den Prefix in die Anweisung rein oder wie kann ich den Tabellen-Namen mit Prefix als Variable einfügen?

    Der Code ist für ein Plugin zur Anpassung an die EU-DSGVO gedacht.
     
  2. b3317133

    b3317133 Well-Known Member

    Registriert seit:
    21. November 2014
    Beiträge:
    11.634
    Zustimmungen:
    1.778
    Ein meiner Meinung nach denkbar ungünstiger Ansatz, damit schlagen dann ggf. alle möglichen Schreibversuche auf dieses Feld fehl, mit eher unabsehbaren Folgen.

    Die gesuchte Tabelle heisst standardmässig wp_comments, siehe auch Database Description, das ggf. angepasste Prefix bekommt man über $wpdb->prefix, siehe auch wpdb Class Reference.
     
  3. r23

    r23 Well-Known Member

    Registriert seit:
    9. Dezember 2006
    Beiträge:
    7.317
    Zustimmungen:
    582
    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    danach funktioniert WordPress erfolgreich nicht mehr fehlerfrei ;)
     
  4. m266

    m266 Well-Known Member

    Registriert seit:
    21. April 2010
    Beiträge:
    575
    Zustimmungen:
    12
    Die gesuchte Tabelle heisst standardmässig wp_comments, siehe auch Database Description, das ggf. angepasste Prefix bekommt man über $wpdb->prefix, siehe auch wpdb Class Reference.

    $wpdb->prefix ist mir bekannt, hat mich aber nicht weiter gebracht.
    Danke für deine Hinweise.
     
  5. m266

    m266 Well-Known Member

    Registriert seit:
    21. April 2010
    Beiträge:
    575
    Zustimmungen:
    12
    Was geht bei dir nicht mehr? Ich habe folgende Zeilen in meinem Testweb eingefügt und es scheint alles OK zu sein:

    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    @r23:
    Das hat mir gefehlt; habe ich trotz langer Suche nicht gefunden, wie man den Code einfügt:
    Im Grunde würde es bei beiden Tabellen auch reichen, die alten IP-Adressen zu löschen. Das ist mir mit bescheidenen SQL-Kenntnissen bisher nicht gelungen. Daher habe ich die Spaltenbreite auf Null gesetzt. Kann mal jemand testen, ob es mit dieser Methode tatsächlich Fehler gibt? Ich kann jedenfalls nichts feststellen. Die Website läuft völlig normal.
    Da ich ehrenamtlich zahlreiche Websites betreue, will ich es den Admins leichter machen. Die IPs in der DB zu löschen ist für mich kein Problem; für die betreffenden Admins (i. d. R. Senioren) schon.
    Vielen Dank für die Hilfe und Hinweise. Für eine alternative Lösung bin ich natürlich dankbar.
     
  6. b3317133

    b3317133 Well-Known Member

    Registriert seit:
    21. November 2014
    Beiträge:
    11.634
    Zustimmungen:
    1.778
    Strings aneinanderzuhängen sind aber schon sehr einfache PHP-Basics...
    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Meine Meinung zu diesem Ansatz habe ich schon geschrieben.

    Wie man Werte in einer Tabelle aktualisiert, also auch löscht, steht in der inzwischen bereits mehrfach verlinkten wpdb Class Reference bei update, in etwa also so, ungetestet:

    $wpdb->update(
    $wpdb->prefix . 'comments',
    array(
    'comment_author_IP' => ''
    )
    );

    Ergänzung: Doch noch kurz getestet, offenbar benötigt $wpdb->update() explizit auch das where Array, also alternativ einfacher so:
    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
     
    #6 b3317133, 19. April 2018
    Zuletzt bearbeitet: 19. April 2018
    m266 gefällt das.
  7. m266

    m266 Well-Known Member

    Registriert seit:
    21. April 2010
    Beiträge:
    575
    Zustimmungen:
    12
    Ich suche erst mal selbst nach Lösungen und war damit schon Stunden beschäftigt. Erst dann, wenn ich nicht mehr weiter komme, wende ich mich an das Forum.
    Der Code
    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    funktioniert leider nicht und bringt folgende Fehlermeldung:
    Wäre für meine Zwecke genau richtig gewesen. Ich guck mal, ob ich den Fehler selbst finde.
     
  8. m266

    m266 Well-Known Member

    Registriert seit:
    21. April 2010
    Beiträge:
    575
    Zustimmungen:
    12
    Super! Das klappt nun endlich! Ich habe eine ganze Weile im Netz gesucht und kein Beispiel hat funktioniert. Dann baue ich mein Plugin so um, dass die Spalte "comment_author_IP" gelöscht wird. Nach euren Aussagen soll das der bessere Weg sein. Vielleicht vorher noch eine Abfrage rein, ob Inhalte vorhanden sind.

    @b3317133:
    Herzlichen Dank für deine Hilfe!
     
  9. r23

    r23 Well-Known Member

    Registriert seit:
    9. Dezember 2006
    Beiträge:
    7.317
    Zustimmungen:
    582
    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    so würde ich nicht auf die Datenbanktablle zugreifen.

    "richtiger" ist

    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    zumindest ist es dafür gedacht.

    Die Liste der Datenbanktabellen kannst du notfalls nachlesen
    https://codex.wordpress.org/Class_Reference/wpdb#Tables
     
  10. m266

    m266 Well-Known Member

    Registriert seit:
    21. April 2010
    Beiträge:
    575
    Zustimmungen:
    12
    @r23:
    Klingt logisch. Dieser Code funktioniert:
    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Wie ist die Syntax bei deinem Vorschlag?
     
  11. b3317133

    b3317133 Well-Known Member

    Registriert seit:
    21. November 2014
    Beiträge:
    11.634
    Zustimmungen:
    1.778
    Ob/was da "richtiger" ist, das lässt der Codex offen.

    Direkt im ersten Absatz "Using the $wpdb Object" wird z.B. die Variante ".. {$wpdb->prefix}options .." verwendet, obwohl es eigentlich auch eine dafür gedachte "direktere" Referenz für die Options Tabelle gibt.
     
  12. m266

    m266 Well-Known Member

    Registriert seit:
    21. April 2010
    Beiträge:
    575
    Zustimmungen:
    12
    Ich kann nicht bewerten, was nun "richtiger" ist. Der bisherige Code funktioniert jedenfalls wie gewünscht und ohne Fehlermeldungen.
    So sieht der Abschnitt in meinem Plugin aus (die jeweiligen Optionen lassen sich einzeln aktivieren):
    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
     
  13. m266

    m266 Well-Known Member

    Registriert seit:
    21. April 2010
    Beiträge:
    575
    Zustimmungen:
    12
    Nachdem der erste Teil dank eurer Hilfe wunderbar funktioniert, bleibe ich an anderer Stelle hängen. Ich will die Spalte einer Tabelle leeren, welchen keinen Prefix hat (cerber_traffic).
    Mit Prefix würde das so aussehen:
    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Wie bekomme ich die Anweisung ohne (.$wpdb->prefix .) hin? Wenn ich ".$wpdb->prefix ." entferne, gibt es einen PHP-Fehler. Die Suche im Netz hat mir leider nicht weitergeholfen.
    Wie ist in diesem Fall die Syntax?
    Vielen Dank.
     
  14. b3317133

    b3317133 Well-Known Member

    Registriert seit:
    21. November 2014
    Beiträge:
    11.634
    Zustimmungen:
    1.778
    Wenn man ' .$wpdb->prefix . ' entfernt, ist die Syntax diese, und das ergibt keinen PHP-Fehler:
    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Wie bereits gesagt, Strings aneinanderzuhängen sind einfachste PHP-Basics, evtl. mal ein PHP-Tutorial o.ä. suchen und durchgehen.
     
    m266 gefällt das.
  15. m266

    m266 Well-Known Member

    Registriert seit:
    21. April 2010
    Beiträge:
    575
    Zustimmungen:
    12
    Wenn du wüsstest, wieviele Stunden ich schon mit Tuts-Lesen verbracht habe, auch in englischen Foren...
    Erst danach frage ich im Forum nach.
    Entweder habe ich es übersehen oder es gab kein Beispiel, wie eine Spalte ohne WHERE geleert werden kann.
    Deinen Code
    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    hatte ich mir auch erarbeitet, aber er funktioniert (zumindest bei dieser Tabelle) nicht.
    Dieses Rätsel habe ich nun gelöst:
    Man kann in die Tabellen des Plugins "WP Cerber" nichts einfügen. Keine Ahnung, warum das so ist. Wirkt wie ein Schreibschutz. Da ich in einigen Tabellen des Plugins aber die IP-Adressen entfernen will, bleibt mir nur meine bisherige Methode mit der Spaltenbreite. Ich setze dann die Spaltenbreite auf 3 Zeichen. Damit ist definitiv keine Rückverfolgung aufgrund der IPs möglich. Probleme mit der Spaltenbreite konnte ich bisher nicht feststellen.
    Bei anderen Tabellen, z. B. comments, kann man mit o. g. Code Änderungen vornehmen. Deshalb sind meine bisherigen Versuche gescheitert, in die Tabelle "cerber-traffic" zu schreiben.
    Vielen Dank wieder für deine Hilfe.
     
  16. m266

    m266 Well-Known Member

    Registriert seit:
    21. April 2010
    Beiträge:
    575
    Zustimmungen:
    12
    Nachtrag:
    Diese Meldung kommt beim speichern, wenn man mit phpMyAdmin Werte in der Tabelle "cerber-traffic" verändert:
    cerber-traffic-meldung.png

    Vielleicht ist das die Ursache, dass mit PHP keine Änderungen möglich sind.
     
  17. b3317133

    b3317133 Well-Known Member

    Registriert seit:
    21. November 2014
    Beiträge:
    11.634
    Zustimmungen:
    1.778
    Versuche es mal mit Backticks um den Tabellennamen in phpMyAdmin, z.B.
    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
     
  18. m266

    m266 Well-Known Member

    Registriert seit:
    21. April 2010
    Beiträge:
    575
    Zustimmungen:
    12
    Ich habe bei meinem Versuch mit der o. g. Fehlermeldung direkt in die Tabelle mit phpMyAdmin geschrieben, also ohne SQL-Anweisung.
     
  19. m266

    m266 Well-Known Member

    Registriert seit:
    21. April 2010
    Beiträge:
    575
    Zustimmungen:
    12
    @b3317133
    @r23
    MeinPlugin ist nun fertig und läuft auf einigen Websites ohne Probleme.
    Hier könnt ihr bei Interesse das "Werk" mal ansehen.
    Auf GitHub ist der Quellcode abgelegt. Das Plugin wird auch über GitHub aktualisiert.

    Mangels anderer Möglichkeiten (und nicht, weil ich die Basics nicht kennen würde) werden die betroffenen Spalten mit "ALTER TABLE" verkleinert, um den Datenschutz sicher zu stellen. Fehler sind mir bisher nicht aufgefallen. Die Ursache (habe ich schon geschrieben) liegt an den Tabellen des Plugins "WP Cerber". Der übliche SQL-Code mit $wpdb usw. funktioniert nicht (bei anderen Tabellen sehr wohl).

    Im Prinzip würde ich die Spalten lieber leeren, wenn es dazu eine Lösung gibt.

    Frage:
    Wollt ihr beiden euch das Problem mit "WP Cerber" mal näher ansehen oder soll ich einen neuen Thread aufmachen?
     
  20. b3317133

    b3317133 Well-Known Member

    Registriert seit:
    21. November 2014
    Beiträge:
    11.634
    Zustimmungen:
    1.778
    Hast Du es denn mal mit Backticks um den Tabellennamen probiert?
     
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden