MySQL-Verbindung aufbauen

  • Hallo

    Ich möchte ein Newsletter-Plugin schreiben. Nun soll sich der User in der Sidebar anmelden können, die E-Mail-Adresse wird per AJAX an eine Datei weitergeleitet. In dieser Datei soll die E-Mail-Adresse in die MySQL-Datenbank eingefügt werden, die im Admin-Menü erzeugt wird. Problem ist nun aber, dass der normale MySQL-Befehl mysql_query(); nicht funktioniert. Im Admin-Menü aber schon?! Woran liegt das, wie kann ich außerhalb des Admin-Menüs eine MySQL-Verbindung aufbauen?

    Danke für eure Hilfe schonmal im voraus ;-)

    Lg, Andy

    Achja, mysql_error() liefert: Access denied for user 'ODBC' localhost (using password: NO). Kein Passwort, weil alles lokal läuft.

    Einmal editiert, zuletzt von TechnoLogiY (25. Juni 2008 um 12:36)

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Nimm' einfach wpdb, dann brauchst du dich um den Aufbau der Verbindung nicht kümmern.

    Mal ein Themenfremdes Beispiel:

    PHP
    <?php $comments = $wpdb->get_results("SELECT comment_post_ID, comment_author, comment_author_email, comment_content, comment_date, DATE_FORMAT(comment_date,'%d.%m.%Y %H:%i') AS new_comment_date
      FROM $wpdb->comments
      WHERE comment_type = ''
      && comment_approved = '1'
      ORDER BY comment_date
     DESC LIMIT 3"); ?>

    "Eine gut gestellte Frage ist schon halb beantwortet."

  • Und wie kann man mit $wpdb etwas in eine Datenbank eintragen?

    Danke schonmal für deine Hilfe :-)

    EDIT: mit $wpdb->query(); gehts nicht: Fatal error: Call to a member function query() on a non-object in C:\xampp\htdocs\wordpress\wp-content\plugins\newsletter\sendMail.php on line 4
    EDIT2: Nun, wp-db.php wurde inkludiert, jetzt kommt: Unknown MySQL server host 'DB_HOST' (11001)
    EDIT3: Hier noch die Funktion:

    Code
    $query = $wpdb->query("INSERT INTO `newsletter_mails` (
    `id` ,
    `mail` ,
    `status`
    )
    VALUES (
    NULL , '".$_GET["mail"]."', 'active'
    );");

    Einmal editiert, zuletzt von TechnoLogiY (25. Juni 2008 um 13:05)

  • In Edit2 seh ich kein "global"... ich wette da ist $wpdb nicht initialisert bzw. NULL, und damit gibts natürlich auch keine query-methode. Ich rede von der Instanz $wpdb, nicht von der Klasse wp_db. Nur um Missverständnisse zu vermeiden ;-)

    PHP
    global $wpdb;
    $query = $wpdb->query("INSERT INTO `newsletter_mails` (
    `id` ,
    `mail` ,
    `status`
    )
    VALUES (
    NULL , '".$_GET["mail"]."', 'active'
    );");
  • Mh, so sieht mein Script bis jetzt aus (ist noch unvollständig, geht mir erstmal darum, dass das eintragen geht...

    Aber es geht einfach nicht?! Kommt immernoch dieser Fehler: Unknown MySQL server host 'DB_HOST' (11001)

    Kann es sein, dass versucht wird, auf den Server "DB_HOST" (anstatt localhost) zuzugreifen? Wenn ja, wie kann ich das ändern? :-|

  • Mh, ne, dann kommt das hier wieder:

    Fatal error: Call to a member function query() on a non-object in C:\xampp\htdocs\wordpress\wp-content\plugins\newsletter\sendMail.php on line 7

    Ist ja auch logisch, woher soll er die Funktion auch sonst kennen? Blöder Fehler =/

    GELÖST! Ich Idiot habe vergessen die wp-config.php Datei zu inkludieren, sprich, er wusste nich was "DB_HOST" ist... Oh mann, sorry für das Gedöns hier xD

    Einmal editiert, zuletzt von TechnoLogiY (25. Juni 2008 um 14:34)

  • Also normalerweise reicht es, den Blog-Header zu includen:

    PHP
    require('./wp-blog-header.php');

    Aber wenn du die Funktion in einem (aktivierten) Plugin heraus nutzt, und aus WP heraus rufst, dann ist $wpdb bekannt (muss nur per "global" sichtbar gemacht werden), und auch die DB-Verbindung ist da.

    Schaff dir auch hier mal nen überblick, kann nicht schaden. ;-)
    Writing a Plugin « WordPress Codex

  • Und seit WP2.5 bitte alles mit prepare() auszeichnen:

    PHP
    $wpdb->query( $wpdb->prepare( "UPDATE $wpdb->posts SET post_title = %s WHERE ID = %d", $lala, $lala2 ) );

    wpseek.com - Die WordPress-Code-Suchmaschine

  • Japp, find ich ne schöne Sache. Somit können auch Einsteiger sichere(re) Plugins schreiben, ohne sich um Absicherung vor SQL Injections etc. Gedanken machen zu müssen.

    wpseek.com - Die WordPress-Code-Suchmaschine

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!