Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Allgemeines zu Drupal ›

Datenbankabfrage aus Node heraus

Eingetragen von Ghostwriter (64)
am 10.07.2008 - 09:39 Uhr in
  • Allgemeines zu Drupal
  • Drupal 6.x

Ich möchte aus einem Node heraus eine Datenbankabfage durchführen. Besteht die Möglichkeit die bestehende Verbindung zu nutzen, und wenn ja, wie?

‹ HTML-Code in Menu-Titel einfügen Gliederung/inhaltliche Trennung per Parameter? ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Datenbankabfrage aus Node heraus

Eingetragen von traxer (1009)
am 11.07.2008 - 12:20 Uhr
Ghostwriter schrieb

Ich möchte aus einem Node heraus eine Datenbankabfage durchführen.

Du kannst aus einem Node heraus keine Datenbankabfragen durchführen, da ein Node nicht etwas ist was ausgeführt wird.

Ghostwriter schrieb

Besteht die Möglichkeit die bestehende Verbindung zu nutzen, und wenn ja, wie?

Das erklährt dir die Dokumentation zur Datenbankschicht von Drupal.

--
XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

Du kannst eine ganz normale

Eingetragen von Andi (116)
am 12.07.2008 - 15:32 Uhr

Du kannst eine ganz normale Datenbankabfrage wie du es in PHP gewohnt best machen, die Verbindung ist bereits geöffnet.

  • Anmelden oder Registrieren um Kommentare zu schreiben

traxer schrieb Ghostwriter

Eingetragen von Ghostwriter (64)
am 14.07.2008 - 07:54 Uhr
traxer schrieb
Ghostwriter schrieb

Ich möchte aus einem Node heraus eine Datenbankabfage durchführen.

Du kannst aus einem Node heraus keine Datenbankabfragen durchführen, da ein Node nicht etwas ist was ausgeführt wird.

Das ist nicht ganz richtig, ich kann sehr wohl eine Datenbankabfrage ausführen, nur leider scheinbar nicht mit der bereits bestehenden Verbindung.

Andi schrieb

Du kannst eine ganz normale Datenbankabfrage wie du es in PHP gewohnt best machen, die Verbindung ist bereits geöffnet.

Wie schon erwähnt, lässt Drupal dies nicht zu. Ich muss wie es aussieht definitiv eine eigene Verbindung zur Datenbank herstellen.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Wenn als Eingabeformat PHP

Eingetragen von rcj (66)
am 14.07.2008 - 08:18 Uhr

Wenn als Eingabeformat PHP benutzt wird, klappt dies eigentlich problemlos.

<?php
$query
= db_query("SELECT nid FROM {node} LIMIT 1");
$obj = db_fetch_object($query);
print_r($obj);
?>

Liefert bei mir das erwartete Ergebnis.

stdClass Object ( [nid] => 1 )

Grüße,
Robin

  • Anmelden oder Registrieren um Kommentare zu schreiben

Bei einem Zugriff auf eine

Eingetragen von Andi (116)
am 14.07.2008 - 21:05 Uhr

Bei einem Zugriff auf eine andere DB auf dem Server, sieht es dann so aus:
$query = db_query("SELECT * FROM Datenbank.Tabelle LIMIT 1");

Gruß
Andreas

  • Anmelden oder Registrieren um Kommentare zu schreiben

Andi schrieb Bei einem

Eingetragen von Alexander Langer (3416)
am 14.07.2008 - 21:29 Uhr
Andi schrieb

Bei einem Zugriff auf eine andere DB auf dem Server, sieht es dann so aus:
$query = db_query("SELECT * FROM Datenbank.Tabelle LIMIT 1");

Veto! Das funktioniert nur, wenn der User, der für die Verbindung mit der Drupal-Datenbank konfiguriert ist, auch die entsprechenden Berechtigungen hat, auf die andere Datenbank zuzugreifen. Davon kann und sollte man aber nicht ausgehen.

--
http://www.alexander-langer.de

  • Anmelden oder Registrieren um Kommentare zu schreiben

rcj schrieb

Eingetragen von Ghostwriter (64)
am 15.07.2008 - 08:03 Uhr
rcj schrieb

Wenn als Eingabeformat PHP benutzt wird, klappt dies eigentlich problemlos.

<?php
$query
= db_query("SELECT nid FROM {node} LIMIT 1");
$obj = db_fetch_object($query);
print_r($obj);
?>

Liefert bei mir das erwartete Ergebnis.

stdClass Object ( [nid] => 1 )

Grüße,
Robin

Leider hatte ich noch keine Zeit das zu testen, werde mich aber heute Abend mal daran machen. Danke schonmal für den Tipp. :)

Edit: nun bin ich doch noch dazu gekommen es schnell zu testen. Leider hat sich am Ergebnis nichts geändert. Ich erhalte weiterhin folgende Meldung:

Access denied for user 'ODBC'@'localhost' (using password: NO)

  • Anmelden oder Registrieren um Kommentare zu schreiben

Wie genau gehst du denn vor?

Eingetragen von rcj (66)
am 15.07.2008 - 08:39 Uhr

Wie genau gehst du denn vor? Wo und mit welchen Einstellungen testet du dies?
Auf all meinen Drupalinstallationen (5 und 6) klappt dies ohne Probleme.

Grüße,
Robin

  • Anmelden oder Registrieren um Kommentare zu schreiben

Das ganze läuft mit einer

Eingetragen von Ghostwriter (64)
am 15.07.2008 - 08:46 Uhr

Das ganze läuft mit einer xampp-standardinstallation auf Windows 2008 in einem Firmennetzwerk.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Wie testest du den Code?

Eingetragen von rcj (66)
am 15.07.2008 - 08:56 Uhr

Wie testest du den Code? Neue Seite erstellen mit Eingabetyp PHP und dann den Code von oben?

Grüße,
Robin

  • Anmelden oder Registrieren um Kommentare zu schreiben

Um so etwas zu realisieren ..

Eingetragen von UwBach (310)
am 15.07.2008 - 08:58 Uhr

.. solltest du auf ein eigenes Modul zurückgreifen. Dazu gibt es grundsätzlich zwei Möglichkeiten:

  • Einen eigenen Content generieren
  • oder einen vorhandenen Node verändern

Die Ursache für deine Probleme liegt in dem etwas problematischen Datenbankhandling von Drupal was Fremddatenbanken betrifft. Nun soll dir aber geholfen werden, brauche dazu aber noch ein paar Informationen:

  • warum soll in einem Node Änderungen gemacht werden?
  • betrifft das nur einen Inhalt (nid), generell einen bestimmten Node-Type oder alle Nodes?
  • soll nur der Inhalt angepasst werden oder auch schon der Teaser?
  • sollen die Änderungen/Ergänzungen aus der Datenbank im Node gespeichert werden?

Die einfachste Möglichkeit ist über den Hook hook_nodeapi() den Node abzufangen, deine DB-Abfrage zu machen, die Änderungen im Inhalt vorzunehmen und den geänderten Node dann weiter zu schicken.

Also was genau soll gemacht werden, ich kann dir für beide Vorgehensweisen Hinweise anbieten. Habe das zwar bisher nur in Drupal 5.x realisiert, sollte aber nicht so problematisch sein das auch in Drupal 6.x umzusetzen.

Gruß

UwBach

  • Anmelden oder Registrieren um Kommentare zu schreiben

Die Sache ist schon etwas

Eingetragen von Ghostwriter (64)
am 15.07.2008 - 10:40 Uhr

Die Sache ist schon etwas komplizierter und es gibt bereits ein Thema von mir, wo ich versucht habe die Problematik zu erläutern.

Sinn & Zweck des ganzen:
Zunächst habe ich in der Tabelle 'users' ein neues Feld 'lastaccept' erzeugt in dem das aktuelle Datum und Uhrzeit im Format JJJJ-MM-TT 00:00:00 geschrieben wird. Dieses Datum dient zum Vergleich mit einem von mir, mit CCK angelegtem Feld für einen Nodetyp der dazu dient, Aktualisierungen der Inhalte zu dokumetieren.

Nun möchte ich also eine Tabelle ausgeben die alle Datensätze, mit neuerem Datum als das in der tabelle users hinterlegte, des schon angesprochenen Nodetyps auflistet.

Im nächsten Schritt bestätigt der Benutzer per Forular-Button das er die Änderungen gelesen und akzeptiert hat. Nun wird in die Tabelle 'users' in das Feld 'lastaccept' das aktuelle Datum eingetragen und die zuvor angezeigten Einträge verschwinden daraufhin.

Ursprünglich wollte ich das ganze über Views2 realisieren, jedoch habe ich damit keine für mich passende Möglichkeit herausgefunden.

Betroffen ist davon lediglich ein Node keines bestimmten Inhaltstyps.
Eine Teaseranzeige wird nicht benötigt.
Der Node soll nicht veränderbar sein. Es geht mir nur um die Darstellung bereits bestehender Daten/Nodes in tabellarischer Form mit komplexen Verlinkungsmöglichkeiten sowie der Bestätigung das die Inhalte gelesen wurden.

Ich muss dazu sagen das ich in Sachen PHP nicht gerade der Checker bin. Im folgenden dennoch der bereits funktionierende Code, der sicherlich etwas Optimierung vertragen könnte.

Inhalt des Nodes:

<?php
global $user;
if ((
$user->uid) >= 1) {
$_uid = ($user->uid);

///// Datum der letzten Update Bestätigung auslesen

$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '***';

$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');
$dbname = 'qms';
mysql_select_db($dbname);

   
$sql = "SELECT
                uid,
                lastaccept
            FROM
                users
            WHERE
                uid = '
$_uid'
            "
;

$result = mysql_query($sql) OR die (mysql_error());

if(
$row = mysql_fetch_assoc($result)) {
   
$lastaccept = $row['lastaccept'];
    }
/////

///// Datum der Aktualisierungen erfassen und mit Update Bestätigung vergleichen
$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');
   
$sql = "SELECT
                *
            FROM
                content_type_update
            WHERE
                field_freigabe_value > '
$lastaccept'
            "
;

   
$result = mysql_query($sql) OR die (mysql_error());
    echo
"<table id=\"data_left\" width=\"100%\"><tr>
        <th valign=\"top\">Titel</th><th valign=\"top\" width=\"180\">KVP</th><th width=\"35%\" valign=\"top\">Beschreibung</th><th valign=\"top\">Freigabe</th>
        <th valign=\"top\">Seite</th><th valign=\"top\">Punkt</th><th valign=\"top\">Alt</th><th valign=\"top\">ID</th>
    </tr>"
;
   
       while(
$row = mysql_fetch_assoc($result)) {
       echo
"<tr>       
        <td valign=\"top\">"
.$row['field_title_value']."</td><td valign=\"top\" width=\"180\">".$row['field_kvp_value']."&nbsp;".$row['field_info_value']."</td>
        <td valign=\"top\">"
.$row['field_description_value']."</td><td valign=\"top\">".$row['field_freigabe_value']."</td>
        <td valign=\"top\"><a href=\""
.$row['field_seite_value']."\">".$row['field_seite_value']."</a></td><td valign=\"top\">".$row['field_step_value']."</td>
        <td valign=\"top\"><a href=\""
.$row['field_old_value']."\">".$row['field_old_value']."</a></td><td valign=\"top\"><a href=\"".$row['nid']."\">".$row['nid']."</a></td>
        </tr>"
;
    }
   
    echo
"</table>";
        }
else {
}
echo
"<p>Durch einen Klick auf den \"OK\"-Button bestätigen Sie, die aktuellen Änderungen zur Kenntnis genommen zu haben.</p>\n";
echo
"<form name=\"qmsUpdate\" action=\"../../qms/qmsupdate_.php?writeDate=1&userid=".$user->uid."\" method=\"post\">\n";
echo
"<input type=\"submit\" value=\"OK\" name=\"Submit\" />\n";
echo
"</form>\n";
?>

Inhalt der Datei qmsupdate_.php

In den ersten zwei Zeilen frage ich per GET die zwei Variablen aus der URL ab. Aus irgendwelchen Gründen erhalte ich eine Fehlermeldung wenn ich diese Zeilen posten will.

<?php
$actualDate
= date("Y-m-d H:i:s");
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '***';
$dbname = 'qms';
$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');

mysql_select_db($dbname);
$sql = "
            UPDATE
                users
            SET
                lastaccept = '
$actualDate'
            WHERE
                uid = '
$user'
            "
;

       
$result = mysql_query($sql) OR die (mysql_error());
       
header("Location: h**p://***/qms/node/366");
?>

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 6 Wochen 5 Tagen
  • Hey danke
    vor 6 Wochen 6 Tagen
  • Update: jetzt gibt's ein
    vor 7 Wochen 3 Stunden
  • Hallo, im Prinzip habe ich
    vor 7 Wochen 4 Tagen
  • Da scheint die Terminologie
    vor 7 Wochen 4 Tagen
  • Kannst doch auch alles direkt
    vor 8 Wochen 1 Tag
  • In der entsprechenden View
    vor 8 Wochen 1 Tag
  • Dazu müsstest Du vermutlich
    vor 8 Wochen 1 Tag
  • gelöst
    vor 10 Wochen 5 Tagen
  • Ja natürlich. Dass ist etwas,
    vor 10 Wochen 6 Tagen

Statistik

Beiträge im Forum: 250233
Registrierte User: 20460

Neue User:

  • marouane.blel
  • capilclinic
  • Quabzibboter

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 1 Benutzer und 8 Gäste online.

Benutzer online

  • ian_radnor

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association