Seite 1 von 2

MySQL Abfrage: Fehler

Verfasst: 18.01.2012 14:48
von efrick
Hi Leute.

Da bin ich wieder.

Ich habe soeben was versucht und bekommen dabei eine Fehlermeldung:

Mein Quellcode:

Code: Alles auswählen

<?php

define('IN_PHPBB', true);
$phpbb_root_path = './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);

include($phpbb_root_path . 'config.' . $phpEx);
include($phpbb_root_path . 'includes/db/' . $dbms . '.' . $phpEx);
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);

$db = new $sql_db();

$db->sql_connect($dbhost, $dbuser, $dbpasswd, $dbname, $dbport);

// We do not need this any longer, unset for safety purposes
unset($dbpasswd);

$sql_in = array(1,2,3,4,5);

$sql = 'SELECT count(*) AS anzahl
    FROM phpbb_users
    WHERE ' . $db->sql_in_set('group_id', $sql_in);

$user = $db->sql_query($sql);

$row = $db->sql_fetchrow($user);

$template->assign_vars(array(
        'ANZAHL'    => $row['anzahl'],
));

?>
Wenn ich den Script ausführen will bekomme ich folgende fehlermeldung:

Fatal error: Cannot redeclare class dbal_mysql in C:\xampp\htdocs\phpbb\includes\db\mysql.php on line 490

Woran könnte das liegen?

Wäre sehr froh über eine Antwort :-)

Danke

Re: MySQL Abfrage: Fehler

Verfasst: 18.01.2012 14:54
von Mahony

Re: MySQL Abfrage: Fehler

Verfasst: 18.01.2012 15:01
von efrick
Habe nun alle includes und include_once umgeschrieben, trotzdem ist die fehlermeldung noch da :(

Re: MySQL Abfrage: Fehler

Verfasst: 18.01.2012 15:07
von Mahony
Hallo
Du inkludierst die config.php. Warum hast du dann diesen Code

Code: Alles auswählen

$db = new $sql_db();

$db->sql_connect($dbhost, $dbuser, $dbpasswd, $dbname, $dbport);
in deiner Datei?

P.S. Ansonsten schau auch mal hier --> http://wiki.phpbb.com/Main_Page
Hier insbesondere diese Anleitung --> http://wiki.phpbb.com/Deutsch:Vorlage_f ... ene_Seiten

Grüße: Mahony

Re: MySQL Abfrage: Fehler

Verfasst: 18.01.2012 15:18
von efrick
Diese Zeilen habe ich nun auskommentiert, immer noch die gleiche Fehlermeldung :cry:

Re: MySQL Abfrage: Fehler

Verfasst: 18.01.2012 15:19
von Mahony
Hallo
Schau dich am besten mal hier um http://wiki.phpbb.com/Deutsch:Vorlage_f ... ene_Seiten

Grüße: Mahony

Re: MySQL Abfrage: Fehler

Verfasst: 18.01.2012 15:27
von efrick
Diese Seite habe ich schon mehrmals durchgelesen.

Trotzdem komme ich nicht drauf, was an meinem Quellcode nicht stimmt:

Code: Alles auswählen

<?php

define('IN_PHPBB', true);
$phpbb_root_path = './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);

include_once($phpbb_root_path . 'config.' . $phpEx);
include_once($phpbb_root_path . 'includes/db/' . $dbms . '.' . $phpEx);
include_once($phpbb_root_path . 'common.' . $phpEx);
include_once($phpbb_root_path . 'includes/functions_display.' . $phpEx);

$sql = 'SELECT count(*) AS anzahl
    FROM phpbb_users
    WHERE group_id IN (1,2,3,4,5)'; 

$result = $db->sql_query($sql);

$row = $db->sql_fetchrow($result);

$template->assign_vars(array(
        'ANZAHL'    => $row['anzahl'],
));

page_header('Hallo');

$template->set_filenames(array(
    'body' => 'mein_template.html',
));

page_footer();

?>

Re: MySQL Abfrage: Fehler

Verfasst: 18.01.2012 15:34
von Mahony
Hallo
Du benötigst doch nur das hier (am Anfang der Datei)

Code: Alles auswählen

define('IN_PHPBB', true);
$phpbb_root_path = './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
Ansonsten solltest du dich lediglich an die Coding guidelines --> http://area51.phpbb.com/docs/30x/coding-guidelines.html halten.


Grüße: Mahony

Re: MySQL Abfrage: Fehler

Verfasst: 19.01.2012 09:26
von efrick
Danke für die Antworten, das hat wunderbar geklappt.

Aber ich hätte da vielleicht noch eine Frage:

Wenn ich mein Template in das overall-Templatte einbinde und und dann das Forum starte, wird die {ANZAHL} in meinel Template nicht angezeigt, weil ich ja in diesem Moment meinen Script nicht ausführe.

Meine Frage ist:

Wie kriege ich meine Script in diesem Moment zum laufen, so dass die die ANZAHL auch beim Aufruf der Startseite angezeigt wird?

Und wie gesagt, mit geht es dabei nicht um die Anzahl der User, sonder um irgendwelche Daten, die ich auf der Stastseite durch ein Template zeigen will, ohne den eigentlichen Quellcode von phpBB zu verändern.
Gibt es da nicht sowas wie hooks im Quellcode?

Ich hoffe meine Frage ist verständlich geworden :)

Danke im voraus.

Re: MySQL Abfrage: Fehler

Verfasst: 19.01.2012 10:52
von Helmut
Hallo efrick,

du willst also den Wert {ANZAHL} auf allen Seiten angezeigt bekommen, habe ich das richtig verstanden?

Wenn ja, dann ist es ganz einfach, du gehts so vor:

Öffne die includes/functions.php und finde folgendes:

Code: Alles auswählen

    // The following assigns all _common_ variables that may be used at any point in a template.
    $template->assign_vars(array(
 
und füge davor deinen Code ein:

Code: Alles auswählen

// Dein Code
$sql = 'SELECT count(*) AS anzahl
    FROM' . USERS_TABLE . '
    WHERE group_id IN (1,2,3,4,5)';

$result = $db->sql_query($sql);

$row = $db->sql_fetchrow($result);
//--------------------------
 
finde folgendes:

Code: Alles auswählen

    // The following assigns all _common_ variables that may be used at any point in a template.
    $template->assign_vars(array(
  
und füge danach ein:

Code: Alles auswählen

'ANZAHL'    => $row['anzahl'], 
Jetzt kannst du {ANZAHL}an beliebiger Stelle in deinem Forum einbauen, muss nicht zwinfgend die overall_header.html sein und du hast den Wert immer da.

Wenn du einen längeren Code machst, dann würde ich den Code in eine eigene z.B. includes/functions_deinedatei.php auslagern und mit include($phpbb_root_path . 'includes/functions_deinedatei.' . $phpEx); vor // The following assigns all _common_ variables that may be used at any point in a template. einbinden.

Deine includes/functions_deinedatei.php würde dann so aussehen:

Code: Alles auswählen

<?php
/**
*
* @author Original Author 
* 
*
* @package svi
* @version $Id: functions_deinedatei.php,v 0.0.1 2012/01/19 Exp $
* @copyright (c) 2012 .....
* @license http://opensource.org/licenses/gpl-license.php GNU Public License 
*
*/

/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
    die('Hacking Attempt!'); 
}
    
//Ab hier dein Code
$sql = 'SELECT count(*) AS anzahl
    FROM' . USERS_TABLE . '
    WHERE group_id IN (1,2,3,4,5)';

$result = $db->sql_query($sql);

$row = $db->sql_fetchrow($result);

//Ausgabe
$template->assign_vars(array(
        'ANZAHL'    => $row['anzahl'],
));


?>
Eine eigene php Datei ist nur interessant wenn du z.B. eine zusätzliche Seite in dein Forum einbauen willst wie etwa ein Impressum, der Code recht lang ist oder du den Code nur für bestimmte Seiten brauchst.

Gruß Helmut