Beiträge von m266

    Zitat

    Woher kommt das 'xxx.' ? Hast Du den SQL-Code in der richtigen Datenbank eingegeben?


    Das "xxx" steht für den Namen der Datenbank, welchen ich nicht öffentlich machen will.

    Zitat

    Hast Du den SQL-Code in der richtigen Datenbank eingegeben?


    Ja.

    Diesen Code eingefügt:

    Code
    $wpdb->query( 'UPDATE `cerber-traffic` SET ip = "";' );


    Spalte wird nicht gelöscht.
    Das liegt wohl doch an den Tabellen. Ich bin am Überlegen, im Plugin-Forum mal nachzufragen.

    @b3317133
    @r23
    [size=14]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?
    [/SIZE]

    Zitat

    Wie bereits gesagt, Strings aneinanderzuhängen sind einfachste PHP-Basics, evtl. mal ein PHP-Tutorial o.ä. suchen und durchgehen.


    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
    $wpdb->query( 'UPDATE cerber-traffic SET ip = "";' );


    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.

    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
    $wpdb->query( 'UPDATE ' .$wpdb->prefix . 'cerber-traffic SET ip = "";' );

    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.

    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
    // IP-Adressen bei neuen Kommentaren entfernen
        if (isset($wp_h_data_protection_options['checkbox_3_2'])) { // Wenn aktiviert, lade Script
          // Alte IP-Adressen entfernen
          $wpdb->query( 'UPDATE ' .$wpdb->prefix . 'comments SET comment_author_IP = "";' );
          function wp_h_data_remove_comments_ip($comment_author_ip) {
            return '';
          }
          add_filter('pre_comment_user_ip', 'wp_h_data_remove_comments_ip');
        }
    Zitat

    Ergänzung: Doch noch kurz getestet, offenbar benötigt $wpdb->update() explizit auch das where Array, also alternativ einfacher so:

    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!

    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
    $wpdb->update(
        $wpdb->prefix . 'comments',
        array(
            'comment_author_IP' => ''
        )
    );


    funktioniert leider nicht und bringt folgende Fehlermeldung:

    Zitat

    Fatal error: Uncaught ArgumentCountError: Too few arguments to function wpdb::update(), 2 passed in...


    Wäre für meine Zwecke genau richtig gewesen. Ich guck mal, ob ich den Fehler selbst finde.

    Zitat

    danach funktioniert WordPress erfolgreich nicht mehr fehlerfrei

    Was geht bei dir nicht mehr? Ich habe folgende Zeilen in meinem Testweb eingefügt und es scheint alles OK zu sein:

    Code
    global $wpdb;
    $wpdb->query('ALTER TABLE cerber_traffic MODIFY ip VARCHAR(0)');
    $wpdb->query('ALTER TABLE ' . $wpdb->comments . ' MODIFY comment_author_IP VARCHAR(0)');

    @r23:
    Das hat mir gefehlt; habe ich trotz langer Suche nicht gefunden, wie man den Code einfügt:

    Zitat


    . $wpdb->comments .

    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.

    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
    global $wpdb;
    $wpdb->query('ALTER TABLE comments MODIFY comment_author_IP VARCHAR(0)');

    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.

    Zitat

    where (array)
    A named array of WHERE clauses (in column => value pairs). Multiple clauses will be joined with ANDs.

    OK. Übersehen beim Lesen des Textes. Ich war total auf "where" fixiert.

    Danke für den Tip und deine Hilfe.

    Super! Herzlichen Dank!
    Das hat nun geklappt. Ich dachte nicht, dass die where-Bedingung als Array eingefügt wird. Deshalb meine vergeblichen Versuche, da dieser Umstand in den gefundenen Quellen nicht erwähnt wird.
    Hier mein fertiger Code für diesen Teil des Plugin:

    Code
    // Comment Type für alte Einträge setzen
    $options = get_option('wphgb_settings');
    $wphgb_id = ($options['wphgb_text_field_0']); // Gästebuch-ID abfragen
    global $wpdb;
    $wpdb->update($wpdb->prefix . 'comments',
     array('comment_type' => 'guestbook comment'),
     array('comment_post_ID' => $wphgb_id, 'comment_type' => ''),
     array('%s',),
     array('%d', '%s')
     )

    Zum Hintergrund:
    Ich habe vor einiger Zeit ein Gästebuch-Plugin auf Basis der Kommentarfunktion erstellt, wobei die GB-Einträge bei vielen Kommentaren darin untergehen. Durch Filtern nach dem comment-type wurden die GB-Einträge aufgelistet; allerdings nur die neuen Einträge. Bei alten Einträgen stand in comment_type nichts drin. Da mein Gästebuch bei mindestens 50 Websites benutzt wird und i. d. R. alte Einträge vorhanden sind, wollte ich diese in die Auflistung für das Plugin-Update mit einbeziehen.
    Ich werde nun alles gründlich testen und dann das Plugin in neuer Version freigeben. Bei Interesse kannst du das Plugin auch unverbindlich antesten. Die bisherige Version ist hier eingestellt; zusätzlich gehostet auf GitHub.

    Hier mein Code:

    Code
    global $wpdb;
    $wpdb->insert(
        $wpdb->prefix.'comments',
        array(
            'comment_type' => 'guestbook comment',
        ),
        array(
            '%s', //name
        )
    );

    Damit erzeuge ich einen neuen Eintrag in der Spalte "comment_type" mit dem Wert "guestbook comment".
    Der Eintrag soll aber nur in Zeilen mit "comment_post_ID = 13" und leerer Zelle "comment_type" erfolgen.

    Mein Problem ist, dass ich die where-Bedingung nicht richtig in den Code rein bekomme.

    So was funktioniert, aber es ist nicht das Richtige für meinen Zweck:

    Code
    $options = get_option('wphgb_settings');
    $wphgb_id = ($options['wphgb_text_field_0']); // Gästebuch-ID abfragen
    
    
    global $wpdb;
    $user_count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->comments where comment_post_ID = $wphgb_id && comment_type = ''");
    echo "<p>User count isxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx{$user_count}

    Z. B. diesen Code habe ich versucht umzustricken:
    Quelle: https://pl%c3%b6tzlich-selbst%c3%a4ndig.de/programmieren/…prepare-update/

    Where konnte ich ohne Fehlermeldungen nicht hinzufügen:

    Code
    where comment_post_ID = '13' && comment_type = ''

    So langsam fällt mir nix mehr ein, was ich noch versuchen könnte.
    Hast du eine Idee?