Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Themes & Theming ›

Datenbankabfrage in Template?

Eingetragen von Uwe_B (61)
am 09.02.2010 - 15:05 Uhr in
  • Themes & Theming
  • Drupal 6.x

Hallo,
ich habe einer Template-Datei eine Datenbankabfrage hinzugefügt und für die Verbindung folgenden Code vorangestellt:

mysql_connect('localhost', 'user', 'pw');
mysql_select_db('dbname');

Da Drupal ja ohnehin eine Verbindung zur Datenbank hat, würde ich das gerne durch diese ersetzen, also über meine Daten in /default/settings.php laufen lassen. Leider habe ich keinen Plan wie das geht, ist doch vermutlich nur ein kurzer Code-Schnipsel, oder?

Gruß,
Uwe

‹ [gelöst] Neues Themes kein Adminzugang ZEN cti_flex Stress mit dem IE ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Datenbank

Eingetragen von stBorchert (6003)
am 09.02.2010 - 15:09 Uhr

Du musst keine gesonderte Verbindung zur Datenbank herstellen, da Drupal diese bereits vorhält.
Verwende einfach db_query.

Ich bin mir allerdings nicht so sicher, ob Du das wirklich tun solltest, da Du offensichtlich keine Ahnung davon hast, was Du da eigentlich tust. Lies Dich bitte erst in die Grundlagen von Drupal ein, bevor Du damit weitermachst.

 Stefan

--
Sei nett zu Deinem Themer!

  • Anmelden oder Registrieren um Kommentare zu schreiben

Es geht konkret um

Eingetragen von Uwe_B (61)
am 09.02.2010 - 15:51 Uhr

Es geht konkret um folgendes, dies ist der von mir hinzugefügte Bereich in der Datei node-onlinespiel.php

<?php
// Sicherstellen, dass Seite als UTF-8 ausgeben wird

mysql_connect('localhost', 'user', 'pw');
mysql_select_db('dbname');

$q = "SELECT   `username`, `score`, `when`
      FROM     `highscores`
      WHERE    `nid` = '"
. mysql_real_escape_string($node->nid) . "'
      ORDER BY `score` DESC
      LIMIT    0,10"
;

$res = mysql_query($q);

if (
mysql_num_rows($res) > 0) {
   
$i = 1;
    while (
$row = mysql_fetch_assoc($res)) {
        echo
htmlspecialchars(sprintf('%s. %s - %s Punkte - %s',
                                     
$i, $row['username'], $row['score'], $row['when']))
           .
'<br />';
       
$i++;
    }
} else {
    echo
'Keine Einträge für Spiel ' . htmlspecialchars($title);
} 
?>

Den Code habe ich in einem anderen Forum dankenswerter Weise aufgezeigt bekommen.

Die Tabelle highscores habe ich vorher extra angelegt, die Übertragung der Daten funktioniert auch einwandfrei über eine Bridge die ich eingerichtet habe.

So wie der Code derzeit ausschaut werden die richtigen Daten ausgegeben, wenn auch die Sortierung der Punkte noch fehlerhaft ist (66 ist bspw. weiter oben als 615). Außerdem tauchen die Spieler noch mehrfach auf (jeder User soll natürlich nur mit seiner Höchstpunktzahl vertreten sein und nicht mit jeder erzielten Punktzahl). Wie ich diese beiden Punkte richtig einstelle versuche ich gerade zu klären. Falls es jemand weiß, kann er es natürlich auch gerne schreiben.

Nun möchte ich den besagten Bereich

mysql_connect('localhost', 'user', 'pw');
mysql_select_db('dbname');

gerne durch das angesprochene db_query ersetzen.

Ich gebe ja zu, dass ich nicht so richtig weiß, was ich da mache - zumindest ist mir die Grammatik noch ziemlich fremd. Aber ich denke mal da wird die Welt schon nicht von untergehen. Wenn ich mich vorher erst in die Grundlagen einlesen muss, dann bin ich damit vermutlich Tage beschäftigt. Dafür habe ich momentan leider keine Zeit. Also, lange Rede kurzer Sinn, was genau soll ich nun machen?

Gruß,
Uwe

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ist es doch schwieriger oder

Eingetragen von Uwe_B (61)
am 10.02.2010 - 09:55 Uhr

Ist es doch schwieriger oder wäre es unverantwortlich es mir zu verraten?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hallo nochmal, das

Eingetragen von Uwe_B (61)
am 13.02.2010 - 12:51 Uhr

Hallo nochmal,
das Endprodukt sieht nun so aus:

mysql_connect('localhost', 'dbuser', 'pw');
mysql_select_db('dbname');

$q = "SELECT    h.`userid`, MAX(h.`score`) AS `score`, h.`time`, u.`name`
      FROM      `highscores` h
      LEFT JOIN `users` u
      ON        h.`userid` = u.`uid`
      WHERE     h.`nid` = " . (int) $nid . "
      GROUP BY  h.`userid`
      ORDER BY  `score` DESC
      LIMIT     0,10";

$res = mysql_query($q);
if (mysql_num_rows($res) > 0) {
echo "<table><tr><th class='platz'>#</th><th class='spieler'>Spieler</th><th class='punkte'>Punkte</th><th class='datum'>Datum</th>";
    $i = 1;
    while ($row = mysql_fetch_assoc($res)) {
echo "<tr>";
    echo "<td class='platz'>".$i.".</td><td class='spieler'><a href='/user/".$row['userid']."' title='".$row['name']."'>".$row['name']."</a></td><td class='punkte'>".$row['score']."</td><td class='datum'>".$row['time']."</td>";
echo "</tr>";
        $i++;
    }
echo "</tr></table>";
} else {
    echo 'keine Highscores';
}

Wie kann ich das nun alles ohne die Eingabe meiner Daten über db_query lösen? Ich habe mich schon umgesehen, aber ehrlich gesagt verstehe ich es nicht. Wäre vielleicht jemand so freundlich es mir zu erklären?

Gruß,
Uwe

  • Anmelden oder Registrieren um Kommentare zu schreiben

In welcher DB ist dann die Tabelle

Eingetragen von tiger (415)
am 13.02.2010 - 13:12 Uhr

Es kommt drauf an wo die Tabelle die du abfragen willst liegt. Ist sie innerhalb deiner Druapl DB geht das einfach mit db_query(). Ist die Tabelle aber in einer andern Datenbank musst du diesen Connect in der settings.php hinzufügen und dann vor der Abfrage die Verbindung wechseln.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Eine SQL-Abfrage wird mit

Eingetragen von Tobias Bähr (4019)
am 13.02.2010 - 13:13 Uhr

Eine SQL-Abfrage wird mit db_query/db_query_range (mit LIMIT) abgesetzt und mit db_fetch_object/db_fetch_array in einer while-Schleife eine einzelne Row herausgeholt.

Beispiel

<?php
$items
= array()
$sql = "SELECT nid, title FROM {node} WHERE status = d%";
$query = db_query_range($sql, 1, 0, 10);
while(
$row = db_fetch_object($query)) {
$items[$row->nid] = $row->title;
}
echo
theme('item_list', $items);
?>

Mehr Informationen unter http://api.drupal.org/api/group/database/6

----------------------------------------
Gelöste Forenbeiträge mit [gelöst] im Titel ergänzen
Das Verhältnis anderen zu helfen muss höher sein, als von anderen Hilfe zu erfragen/erwarten.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Also die Tabelle habe ich in

Eingetragen von Uwe_B (61)
am 14.02.2010 - 17:26 Uhr

Also die Tabelle habe ich in der Drupal-Datenbank angelegt, aber ich habe keine Ahnung von MySQL und Datenbankabfragen und bin froh, dass der oben angeführte Code überhaupt funktioniert. Ich versteh nur leider immer noch nicht, wie ich die Verbindung herstellen soll.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Datenbankverbindung

Eingetragen von stBorchert (6003)
am 14.02.2010 - 18:02 Uhr
Uwe_B schrieb

Ich versteh nur leider immer noch nicht, wie ich die Verbindung herstellen soll.

http://www.drupalcenter.de/node/25078#comment-89458

  • 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 1 Woche 3 Tagen
  • Hey danke
    vor 1 Woche 3 Tagen
  • Update: jetzt gibt's ein
    vor 1 Woche 4 Tagen
  • Hallo, im Prinzip habe ich
    vor 2 Wochen 2 Tagen
  • Da scheint die Terminologie
    vor 2 Wochen 2 Tagen
  • Kannst doch auch alles direkt
    vor 2 Wochen 6 Tagen
  • In der entsprechenden View
    vor 2 Wochen 6 Tagen
  • Dazu müsstest Du vermutlich
    vor 2 Wochen 6 Tagen
  • gelöst
    vor 5 Wochen 2 Tagen
  • Ja natürlich. Dass ist etwas,
    vor 5 Wochen 3 Tagen

Statistik

Beiträge im Forum: 250233
Registrierte User: 20451

Neue User:

  • Mroppoofpaync
  • 4aficiona2
  • AppBuilder

» 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 0 User und 25 Gäste online.

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