PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Informationen von externer Seite im Postbit


daFish
23.01.2005, 10:52
Morgen,

ich möchte im Postbit gerne einige Informationen eines Users darstellen, die ich aus einer anderen Datenbank hole.
Ich habe dazu schon in der functions_showthread.php die Funktion construct_postbit() erweitert.

Dies beinhaltet den Query für die Datenbankdaten aus der fremden Datenbank und die Prüfung auf Ergebnisse und das entsprechende setzen einer Variable.
Im Template postbit_legacy, wird das ganze dann entsprechend verarbeitet und, sollte es mehr als 1 Ergebniss geben, ein Link dargestellt.

Leider wird der Link komischerweise selbst dann ausgegeben, wenn kein Ergebniss vorhanden ist.

Welche Variablen beinhalten denn die UserID des Users, dessen Posting gerade dargestellt wird? Eventuell liegt da mein Fehler.

Hier mal ein kurzer Ausschnitt aus der functions_showthread.php:

$connection = mysql_connect('www.da-wo-die-datenbank-liegt.de', 'XXX', 'XXX');
$database = mysql_select_db('XXX', $connection);

$sql = "SELECT count(*)
FROM `bewertung`
WHERE userid = '$post[userid]'";
$query = mysql_query($sql) or die(mysql_error());

$inside = array();
$inside['count'] = mysql_num_rows($query);

if ($inside['count']!=0) {

$inside['comment'] = 1;

}
else {

$inside['comment'] = 0;

}

simplex
23.01.2005, 14:38
Da ist ein semantischer Fehler drin. Die Abfrage $sql = "SELECT count(*)
FROM `bewertung`
WHERE userid = '$post[userid]'";liefert dir immer genau eine Ergebnis-Zeile, deren einziges Attribut schon angibt, wie viele Bewertungen der User hat. Wenn du jetzt nochmal mysql_num_rows($query); anwendest, erhältst du immer 1 als Ergebnis.

daFish
24.01.2005, 07:08
Danke simplex.
Allerdings wundert es mich das dies nicht bei allen Usern in einem Thread auftaucht, sondern nur vereinzelt und der Query ist ja der gleiche.

Hoffi
24.01.2005, 10:12
Da wir die Struktur der Tabelle Bewertung nicht kennen kann es durchaus sein das bei dem Query mehrere Zeilen als Ergebnis kommen. Allerdings ist es schöner zu Handeln wenn du hinter count(*) noch ein AS UCount oder ähnliches einbaust um dann via assiozatives Array auf das Ergebnis zugreifst.

Dann weisst du einer Variablen (Dabei ist es egal ob es ein Eintrag in einem Array ist oder nicht) die Anzahl der gefundenen Zeilen zu.

Das bei keinen Einträgen auch ein Link kommt ist logisch, denn du fragt auf ungleich null ab.

Du solltest auf > 1 abfragen, dann auf 1 und dann einen Else-Zweig einbauen. Dann wird es korrekt funktionieren.

daFish
26.01.2005, 07:40
Da wir die Struktur der Tabelle Bewertung nicht kennen kann es durchaus sein das bei dem Query mehrere Zeilen als Ergebnis kommen. Allerdings ist es schöner zu Handeln wenn du hinter count(*) noch ein AS UCount oder ähnliches einbaust um dann via assiozatives Array auf das Ergebnis zugreifst.

Dann weisst du einer Variablen (Dabei ist es egal ob es ein Eintrag in einem Array ist oder nicht) die Anzahl der gefundenen Zeilen zu.

Das bei keinen Einträgen auch ein Link kommt ist logisch, denn du fragt auf ungleich null ab.

Du solltest auf > 1 abfragen, dann auf 1 und dann einen Else-Zweig einbauen. Dann wird es korrekt funktionieren.

Der Query ansich war korrekt, nur die weitere Verarbeitung enthielt bei mir einen Fehler.
Ich habe es ein wenig umgeschrieben und jetzt funktioniert es wie gewünscht.

vectra-a-x.de
26.01.2005, 11:06
kannst Du den geänderten Code mal einfügen, finde das ganz intressant ?

daFish
26.01.2005, 15:51
Hallo Ingo,

folgender Code, etwas "erleichtert", kommt zum Einsatz:



$connection = mysql_connect('XXX', 'XXX', 'XXX');
$database = mysql_select_db('XXX', $connection);
if(!empty($post['userid']))
{
$sql = "SELECT count(*) FROM bewertung WHERE userid = ".$post['userid']." and typ='d'";
$query = mysql_query($sql) or die(mysql_error());
while($_temp = mysql_fetch_row($query)) {
$_inside = $_temp[0];
}

//weitere Verarbeitung
}


In den Templates postbit bzw. postbit_leagcy wird dann entsprechend geprüft ob die Variable vorhanden ist und bei Bedarf angezeigt.