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

PHP Problem

Eingetragen von Jenzen (216)
am 04.12.2007 - 21:16 Uhr in
  • Allgemeines zu Drupal
  • Drupal 5.x

Hallo zusammen,
ich habe folgenden Code in einen Block eingefügt:

<?php
// Untested
$count = 3;
$no_avatar = "";
$odd = TRUE;
$result = db_query_range(db_rewrite_sql("SELECT * FROM {users} u ORDER BY RAND()"), 0, $count);
  while (
$user_info = db_fetch_object($result)) {
   if(
$user_info->uid){
       print
'<div class="' . ($odd ? 'odd-user' : 'even-user') . '">';
       if(
$user_info->picture){
       print
'<div id="blockpic">
       <img src="/'
.$user_info->picture.'"
       width=70></div>
       '
;
       }
       else {
       print
'<div id="blockpic"><img src="/'.$no_avatar.'"
       width=60></div>'
;
       }
       print
l($user_info->name, "user/$user_info->uid");
       print
'</div>';
       if ( !
$odd ) {
         print
'<br class="clear">';
       }
      
$odd = ( $odd ? FALSE : TRUE );
    }
  }
?>

um zufällige Userphotos anzuzeigen.

Im Administrator-Bereich funktioniert das auch problemlos, wenn ich als "normaler" User angemeldet bin erhalte ich jedoch folgende Fehlermeldung:

user warning: Unknown table 'n' in on clause query: SELECT * FROM users u INNER JOIN node_access na ON na.nid = n.nid WHERE (na.grant_view >= 1 AND ((na.gid = 0 AND na.realm = 'all') OR (na.gid = 3 AND na.realm = 'content_access_author') OR (na.gid = 2 AND na.realm = 'content_access_rid'))) ORDER BY RAND() LIMIT 0, 3 in /home/www/includes/database.mysql.inc on line 172.

Würde mich freuen wenn mir jemand sagen könnte was ich an dem Code falsch ist und wie ich den Fehler beheben kann!

Vielen Dank!

Gruß, der Jenzen!!

‹ Suchfunktion Darstellung von inhalten : Blöcke, menüs ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Liegt an db_rewrite_sql

Eingetragen von traxer (1009)
am 04.12.2007 - 23:05 Uhr

Du musst der Funktion db_rewrite_sql mitteilen, das nicht {node} deine Haupttabelle ist.

--
XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

OK

Eingetragen von Jenzen (216)
am 05.12.2007 - 09:49 Uhr

aber wie?

Danke für den Tipp!!
Ich weiß jedoch nicht wie ich das machen kann/muss, habe mir die Datei "database.mysql.inc" angesehen doch dort finde ich die Funktion nicht. Wo befindet sie sich, wie kann ich sie ändern und was muss ich ändern?

:-( du siehst, bin auf diesem Gebiet ein völlig unbeholfener Anfänger!

Über Hilfe würde ich mich freuen!

  • Anmelden oder Registrieren um Kommentare zu schreiben

Per Parameter

Eingetragen von traxer (1009)
am 05.12.2007 - 10:08 Uhr
Jenzen schrieb

aber wie?

Indem du ihr als zweiten Parameter ein 'u' übergibst.

--
XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

Sorry

Eingetragen von Jenzen (216)
am 05.12.2007 - 11:45 Uhr

aber ich bekomme es nicht auf die Reihe!

$result = db_query_range(db_rewrite_sql("SELECT * FROM {users} u ORDER BY RAND()"), 0, $count);

habe an der Stelle anstatt der 0 ein $u eingeben! Aber irgendiwe funktioniert das noch nicht, war wahrscheinlich falsch!?

Wieso tritt der Fehler beim Administrator eigentlich nicht auf??

  • Anmelden oder Registrieren um Kommentare zu schreiben

Jenzen wrote: $result =

Eingetragen von XPectIT@drupal.org (48)
am 05.12.2007 - 14:13 Uhr
Jenzen schrieb

$result = db_query_range(db_rewrite_sql("SELECT * FROM {users} u ORDER BY RAND()"), 0, $count);

Deine db_rewrite_sql() hört nach
'...RAND()")' auf, die ', 0,' sind Argumente für db_query_range()

db_query_range(db_rewrite_sql("$arg1", $arg2), 0, $count);

  • Anmelden oder Registrieren um Kommentare zu schreiben

Danke

Eingetragen von Jenzen (216)
am 05.12.2007 - 14:40 Uhr

für den Tipp! :-)

Dann sollte die Zeile nach dem Tipp mit dem 'u' wohl in etwa so aussehen:

$result = db_query_range(db_rewrite_sql("SELECT * FROM {users} u ORDER BY RAND()", "'u'"), 0, $count);

im Administrator-Bereich funktioniert die Anzeige weiterhin!

Im normalen User-Bereich bekomme ich dann folgende Fehlermeldung:

user warning: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.nid WHERE (na.grant_view >= 1 AND ((na.gid = 0 AND na.realm = 'all') OR (na.gid' at line 1 query: SELECT * FROM users u INNER JOIN node_access na ON na.nid = 'u'.nid WHERE (na.grant_view >= 1 AND ((na.gid = 0 AND na.realm = 'all') OR (na.gid = 3 AND na.realm = 'content_access_author') OR (na.gid = 2 AND na.realm = 'content_access_rid'))) ORDER BY RAND() LIMIT 0, 3 in /home/www/includes/database.mysql.inc on line 172.

Kann natürlich sein das ich wieder etwas falsch gemacht habe, aber es ist halt total komisch das es im Admin-Bereich läuft!

  • Anmelden oder Registrieren um Kommentare zu schreiben

Der dritte Parameter fehlt

Eingetragen von traxer (1009)
am 05.12.2007 - 16:16 Uhr
Jenzen schrieb

Kann natürlich sein das ich wieder etwas falsch gemacht habe [...]

Kann sein das du dir die Dokumentation von db_rewrite_sql nicht durchgelesen hast.

Du musst db_rewrite_sql als dritten Parameter den Primärschlüssel der Tabelle, die du im zweiten Parameter angegeben hast, übergeben.

Jenzen schrieb

[...] aber es ist halt total komisch das es im Admin-Bereich läuft!

db_rewrite_sql ruft Implementierungen von hook_db_rewrite_sql auf. Das node-Modul stellt eine solche Implementierung bereit: node_db_rewrite_sql. Diese Implementierung ist dafür zuständig, sicherzustellen, das in Ergebnislisten nur Einträge auftauchen, auf die der aktuelle Benutzer Zugriff hat. Der Benutzer mit der uid 1 (i.e. der Administrator) hat auf alle Einträge Zugriff, deshalb ändert node_db_rewrite_sql in diesem Fall deine Abfrage nicht.

--
XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

Juhu

Eingetragen von Jenzen (216)
am 06.12.2007 - 07:59 Uhr

ich hab´s hinbekommen!!

Vielen vielen Dank für das an die Hand nehmen!!!!

Gruß, der Jenzen!

  • Anmelden oder Registrieren um Kommentare zu schreiben

Danke ebenfalls

Eingetragen von traxer (1009)
am 06.12.2007 - 09:04 Uhr
Jenzen schrieb

Vielen vielen Dank für das an die Hand nehmen!

Hat mir auch geholfen. Ich habe mich endlich mal hingesetzt und versucht den Sinn hinter db_rewrite_sql zu ergründen.

--
XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

Usernamen auslesen

Eingetragen von Jenzen (216)
am 17.12.2007 - 11:27 Uhr

Hallo zusammen,
ich habe folgenden Code:

User

<?php

if ($user->uid) {
        print(
'<strong>'.$user->name.'</strong>');
    }
?>

in die user_profile_tpl eingefügt um den Namen des Users ausgeben zu lassen.

Da das problemlos funktioniert dachte ich mir das ich diesen Code in jedem anderen Inhaltstypen einfügen kann und er mir dort ebenso den Namen ausgibt solange ich als Eingabeformat PHP-Code angebe. Tja, hab ich mir wohl zu einfach vorgstellt....

Kann mir jemand erklären wieso das nicht funktioniert!

Danke für die Hilfe!!

Gruß, der Jenzen!

  • Anmelden oder Registrieren um Kommentare zu schreiben

User einer beliebigen Node in node-nodetype.tpl.php ermitteln

Eingetragen von quiptime (4972)
am 17.12.2007 - 11:46 Uhr

In der "user_profile.tpl.php" steht die Variable $user zur Verfuegung. In einem beliebigen "node-nodetype.tpl.php" nicht.

Um in einem "node-nodetype.tpl.php" auf diese Variable zugreifen zu koennen ist Folgendes moeglich:

1.
Mit global $user diese Variable initialisieren. Wird aber vermutlich nicht funktionieren.

2.
Mittels der Node ID die Uservariable fuellen, in dem der zum jeweiligen Node gehoerende User ermittelt wird.

<?php
if (arg(0) == 'node' && is_numeric(arg(1))) {
 
$node = node_load(arg(1));
 
$user = user_load(array('uid' => $node->uid));
}
?>

Mit diesem Code wird ein vollstaendiges Userobjekt, ja die Variable $user ist ein Objekt, geladen. Danach kann man
$user->uid und $user->name verwenden.

-------------
quiptime

Nur tote Fische schwimmen mit dem Strom.

XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

Danke

Eingetragen von Jenzen (216)
am 17.12.2007 - 12:01 Uhr

für deine schnelle Hilfe!
Es geht in die richtige Richtung... er zeigt mir jetzt wahrscheinlich den Namen des Users an der die Seite erstellt hat. Mein Ziel ist es eine Art Begrüßung auf der Startseite nach dem einloggen zu erreichen. Hallo "User"!

Er zeigt mir so auch erst den Namen an wenn ich die Seite "Titel" anklicke, vorher nicht woran liegt das?

  • Anmelden oder Registrieren um Kommentare zu schreiben

§node->user

Eingetragen von Dirk Gebhardt (111)
am 17.12.2007 - 12:23 Uhr

Hi Jenzen,

wenn du einen user anzeigen möchtest der einen node erstellt hat wäre das hier das richtige für dich $node->user, das userbild eines user der einen node erstellt hat geht so

<?php
print '<div id="user_picture">' .theme('image', $node->picture). '</div>';
?>
.

Einfach nur den user der gerade eingeloggt ist

<?php
print $user->name ;
?>
. Das if müßte sein if §user->uid > 0.

Dirk

  • Anmelden oder Registrieren um Kommentare zu schreiben

Danke

Eingetragen von Jenzen (216)
am 17.12.2007 - 13:08 Uhr

für Eure Hilfe!

Es funktioniert, ich werde jetzt mit Namen begrüßt :-)

Gruß, der Jenzen!

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

Statistik

Beiträge im Forum: 250233
Registrierte User: 20451

Neue User:

  • ByteScrapers
  • Mroppoofpaync
  • 4aficiona2

» 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 30 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