PHP Problem
am 04.12.2007 - 21:16 Uhr in
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!!
- Anmelden oder Registrieren um Kommentare zu schreiben
Liegt an db_rewrite_sql
am 04.12.2007 - 23:05 Uhr
Du musst der Funktion db_rewrite_sql mitteilen, das nicht
{node}
deine Haupttabelle ist.--
OK
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!
Per Parameter
am 05.12.2007 - 10:08 Uhr
aber wie?
Indem du ihr als zweiten Parameter ein
'u'
übergibst.--
Sorry
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??
Jenzen wrote: $result =
am 05.12.2007 - 14:13 Uhr
$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);
Danke
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!
Der dritte Parameter fehlt
am 05.12.2007 - 16:16 Uhr
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.[...] aber es ist halt total komisch das es im Admin-Bereich läuft!
db_rewrite_sql
ruft Implementierungen vonhook_db_rewrite_sql
auf. Dasnode
-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 ändertnode_db_rewrite_sql
in diesem Fall deine Abfrage nicht.--
Juhu
am 06.12.2007 - 07:59 Uhr
ich hab´s hinbekommen!!
Vielen vielen Dank für das an die Hand nehmen!!!!
Gruß, der Jenzen!
Danke ebenfalls
am 06.12.2007 - 09:04 Uhr
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.
--
Usernamen auslesen
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!
User einer beliebigen Node in node-nodetype.tpl.php ermitteln
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.
Danke
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?
§node->user
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 ;
?>
Dirk
Danke
am 17.12.2007 - 13:08 Uhr
für Eure Hilfe!
Es funktioniert, ich werde jetzt mit Namen begrüßt :-)
Gruß, der Jenzen!