mögliche user_id herausfinden

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Lausch
Mitglied
Beiträge: 7
Registriert: 14.05.2006 18:22

mögliche user_id herausfinden

Beitrag von Lausch »

Guten Tag, ich dreh hier grad leicht durch...

Ich habe den Code aus der phpbb-register entnommen:

Code: Alles auswählen



// $tableprefix = "phpbb_";
// $usertable = "phpbb_users";

	define('USERS_TABLE', $tableprefix.'users'); 

	$sql = "SELECT MAX(user_id) AS total
				FROM " . USERS_TABLE;
			if ( !($result = $db->sql_query($sql)) )
			{
				message_die(GENERAL_ERROR, 'Could not obtain next user_id information', '', __LINE__, __FILE__, $sql);
			}

			if ( !($row = $db->sql_fetchrow($result)) )
			{
				message_die(GENERAL_ERROR, 'Could not obtain next user_id information', '', __LINE__, __FILE__, $sql);
			}
			$user_id = $row['total'] + 1;
                      
     echo "$user_id";

Jetzt sollte ich die nextmögliche user_id angezrigt bekommen jedoch erhalte ich nur folgende ausgabe:

Fatal error: Call to a member function on a non-object in F:\server\xampp\htdocs\a.php

und zwar hier

if ( !($result = $db->sql_query($sql)) )

wieso?

hab ich sicher irgendwo was falsch ausgeklammert?

mysql connect funktioniert 100%, daran liegts nicht.

Gruss

Lausch
Benutzeravatar
mad-manne
Ehemaliges Teammitglied
Beiträge: 5403
Registriert: 18.03.2005 10:00
Wohnort: Marl im Ruhrgebiet

Beitrag von mad-manne »

Hast du den hier geposteten Code einfach so "alleine" stehen, oder ist er wie z.B. dieses Beispiel( KB:72 ) in das phpBB "eingebettet".

Ich tippe mal auf ersteres, weshalb ganz banal die db-Klasse(includes/db.php) nicht bekannt ist, weil das entsprechende include aus der common.php fehlt!

Gruss,
Manne.
Try not. Do or do not. There is no try. (YODA)
Supportanfragen via E-Mail oder PN werden ignoriert
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

Du hast das Datenbankobjekt nicht eingebunden, da fehlen die includes die du am Anfang jeder phpBB Datei findest. ("...on a non-object...") Da müsste sowas stehen wie

Code: Alles auswählen

$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.' . $phpEx);
Das an den Anfang des Skriptes und dann sollte es gehen, sofern relativ zu dem aktuellen Ordner gesehen "./" der Pfad zum Basisordner des Forums ist.

EDIT: Da war mad-manne wohl schneller :)
Zuletzt geändert von gn#36 am 06.11.2006 15:24, insgesamt 1-mal geändert.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Lausch
Mitglied
Beiträge: 7
Registriert: 14.05.2006 18:22

Beitrag von Lausch »

klar aber das muss ja auch systemunabhängig funktionieren.

ein script das eine verbindung mit einer db und tabelle aufbaut (was es tut)

Code: Alles auswählen

$server = 'localhost';
$username = "root";
$password = "root";
$database = "phpbb";
$usertable = "phpbb_users";
$tableprefix = "phpbb_";

$db = @mysql_connect($server, $username, $password)
   or die ('Konnte keine Verbindung zur Datenbank herstellen');

mysql_select_db("$database"); 
...nun soll der codeschnipsel von oben einfach herausfinden, welche die höhste user_id ist und die nächst mögliche anzeigen..

gruss

Lausch
Benutzeravatar
mad-manne
Ehemaliges Teammitglied
Beiträge: 5403
Registriert: 18.03.2005 10:00
Wohnort: Marl im Ruhrgebiet

Re: mögliche user_id herausfinden

Beitrag von mad-manne »

aber hier

Code: Alles auswählen

if ( !($result = $db->sql_query($sql)) )
und hier

Code: Alles auswählen

if ( !($row = $db->sql_fetchrow($result)) )
greifst du auf Methoden der phpBB-eigenen db-Klasse zurück. Dadurch dass sie nicht included ist, kann das Skript auch nicht wissen, was es tun soll.

Wenn du also dein Skript so aufbauen möchtest, dass es nicht die phpBB-eigenen Methoden nutzt, dann musst du auf die PHP-eigenen Befehle zur Datenbankabfrage zurückgreifen :wink:

Gruss,
Manne.
Try not. Do or do not. There is no try. (YODA)
Supportanfragen via E-Mail oder PN werden ignoriert
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

Das ist nicht die gleiche Art und Weise, wie phpBB die DB Verbindung aufbaut. Wenn du die Verbindungsinformationen an die Variable $db zuweist (was du ja durchaus machen kannst) dann enthält diese Variable auch nichts anderes. mysql_connect macht kein Objekt aus dieser Variablen, sondern speichert nur die Information über die Verbindung.
Jeder Aufruf $db->xxx führt daher zu einem Fehler, da es sich nicht um ein Objekt handelt, sondern um eine Variable.

Wenn du mit der angegebenen Verbindung arbeiten solltest, dann musst du eben weiterhin die direkten mysql Funktionen verwenden. $db ist in phpBB ein zu phpBB gehörendes Objekt (siehe includes/db.php und gesamtes Verzeichnis db) welches phpBB-eigene Funktionen enthält die es bei mysql (und anderen Datenbanken) direkt nicht gibt, die als Abstraktionsschicht zwischen Forum und DB dienen, so dass das Forum platformunabhängig ist.

EDIT: Schon wieder Überschneidung!
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Lausch
Mitglied
Beiträge: 7
Registriert: 14.05.2006 18:22

Beitrag von Lausch »

aaaaaaaaaah ich bin unwürdig. klar ich habs gelesen aber nicht kappiert.

tut mir leid klar ok, hab die files includet und jetzt gehts....

danke vielmals leute für die schnelle hilfe...

:cookie:

gruss

Lausch
Benutzeravatar
mad-manne
Ehemaliges Teammitglied
Beiträge: 5403
Registriert: 18.03.2005 10:00
Wohnort: Marl im Ruhrgebiet

Beitrag von mad-manne »

gn#36 hat geschrieben:EDIT: Schon wieder Überschneidung!
Nicht verzweifeln :wink:

Und ausserdem: Doppelt gemoppelt hält besser :D

So long,
Manne.
Try not. Do or do not. There is no try. (YODA)
Supportanfragen via E-Mail oder PN werden ignoriert
Antworten

Zurück zu „Coding & Technik“