Seite 1 von 4
Einige Fragen zu SQL-Anweisungen ...
Verfasst: 28.05.2006 15:27
von YoOoOoOo
Wieso geschieht bei folgender Anweisung nichts und wie kann ich einstellen, dass eine Nachricht erscheint, wenn es erfolgreich war? Wenn ich den Button klicke, passiert nämlich gar nichts. In der DB wird auch nichts erhöht.
Ausschnitt aus
buildings.php (in phpBB eingebundene Seite):
Code: Alles auswählen
if( isset($HTTP_POST_VARS['church']) )
{
$sql = "UPDATE " . USERS_TABLE . "
SET user_posts = user_posts + 4,
user_cash = user_cash - 500,
user_gold = user_gold - 0,
user_holz = user_holz - 300,
user_stein = user_stein - 500,
user_metall = user_metall - 0,
user_church = user_church + 1
WHERE user_id = $user_id";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Deine Arbeiter können nicht so schnell arbeiten!', '', __LINE__, __FILE__, $sql);
}
$row = $db->sql_fetchrow($result);
}
$user_id = $userdata['user_id'];
Und in der .tpl-Datei steht:
Code: Alles auswählen
<table width="100%" cellpadding="3" cellspacing="1" border="0" class="forumline">
<tr>
<form action="buildings.php"><td class="row1" align="left" width="1%">...
</td><td class="row1" align="left" width="50%"><span class="gensmall">Kirche
</td><td class="row1" align="right" width="50%">
<input type="submit" name="church" value="Bauen"></td></form>
</tr>
</table>
Hoffe es ist jetzt etwas klarer...
Verfasst: 28.05.2006 15:46
von derd
Das ist doch keine SQL-Anweisungen die man in der Datenbank ausführen kann. Welchen Mod willst du denn Installieren
Bye derd
Verfasst: 28.05.2006 16:41
von YoOoOoOo
Noch einmal
buildings.phpCode: Alles auswählen
///
/// Anweisung zum Auslesen von der Datenbank
///
$sql = "SELECT user_posts, user_cash, user_gold, user_holz, user_stein, user_metall, user_church
FROM " . USERS_TABLE . "
WHERE user_id = $user_id";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Die Daten konnten nicht ausgelesen werden', '', __LINE__, __FILE__, $sql);
}
$row = $db->sql_fetchrow($result);
$template->assign_block_vars(array(
'CASH' => $cash)
);
///
/// Anweisung zum Updaten der Datenbank
///
if( isset($HTTP_POST_VARS['church']) )
{
$sql = "UPDATE " . USERS_TABLE . "
SET user_posts = user_posts + 4,
user_cash = user_cash - 500,
user_gold = user_gold - 0,
user_holz = user_holz - 300,
user_stein = user_stein - 500,
user_metall = user_metall - 0,
user_church = user_church + 1
WHERE user_id = $user_id";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Deine Arbeiter können nicht so schnell arbeiten!', '', __LINE__, __FILE__, $sql);
}
$row = $db->sql_fetchrow($result);
}
$user_id = $userdata['user_id'];
Die erste Abfrage ergibt den Fehler
Code: Alles auswählen
Die Daten konnten nicht ausgelesen werden
DEBUG MODE
SQL Error : 1064 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 '' at line 3
SELECT user_posts, user_cash, user_gold, user_holz, user_stein, user_metall, user_church FROM phpbb_users WHERE user_id =
Line : 390
File : buildings.php
Bei der zweiten geschieht gar nichts, wenn man Button drücken will.
H I L F E
In der .tpl-Datei steht folgendes:
Code: Alles auswählen
<table width="100%" cellpadding="3" cellspacing="1" border="0" class="forumline">
<tr>
<form action="buildings.php"><td class="row1" align="left" width="1%">...
</td><td class="row1" align="left" width="50%"><span class="gensmall">Hafen
</td><td class="row1" align="right" width="50%">
<input type="submit" name="church" value="Bauen"></td></form>
</tr>
</table>
Verfasst: 28.05.2006 16:49
von PhilippK
Die Variable $user_id scheint da nicht definiert zu sein. Ohne mehr Hintergrundwissen wird dir da wohl keiner weiterhelfen können.
Gruß, Philipp
Verfasst: 28.05.2006 16:52
von YoOoOoOo
Ja das scheint das Problem zu sein - nur wie muss die Variable $user_id definiert werden?
Hoffende Grüsse!
Verfasst: 28.05.2006 16:53
von Patrik
Stelle folgendes an den Anfang des Scipts und nicht an das Ende.
Verfasst: 28.05.2006 17:04
von YoOoOoOo
So, nun ist zwar die Fehlermeldung verschwunden aber ausgelesen wird dennoch nichts
Slytherin
Verfasst: 28.05.2006 17:07
von Patrik
Folgendes muss noch an den Anfang des Scriptes, wenn du mit phpBB arbeiten willst.
Code: Alles auswählen
define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
//
// Start session management
//
$userdata = session_pagestart($user_ip, PAGE_BUILDINGS);
init_userprefs($userdata);
//
// End session management
//
Verfasst: 28.05.2006 17:09
von YoOoOoOo
Natürlich. So sieht die Datei nun aus:
Code: Alles auswählen
<?php
define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
//
// Start session management
//
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);
//
// End session management
//
if (!$userdata['session_logged_in'] )
{
redirect(append_sid("login.$phpEx?redirect=index.$phpEx", true));
}
$is_auth_ary = array();
$is_auth_ary = auth(AUTH_VIEW, AUTH_LIST_ALL, $userdata, $forum_data);
//
// Start output of page
//
define('SHOW_ONLINE', true);
$page_title = $lang['Index'];
include($phpbb_root_path . 'includes/page_header.'.$phpEx);
$template->set_filenames(array(
'body' => 'kirche_body.tpl')
);
$template->assign_vars(array(
'CASH' => $cash)
);
$user_id = $userdata['user_id'];
///
/// Anweisung zum Auslesen von der Datenbank
///
$sql = "SELECT user_posts, user_cash, user_gold, user_holz, user_stein, user_metall, user_church
FROM " . USERS_TABLE . "
WHERE user_id = $user_id";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Die Daten konnten nicht ausgelesen werden', '', __LINE__, __FILE__, $sql);
}
$row = $db->sql_fetchrow($result);
///
/// Anweisung zum Updaten der Datenbank
///
if( isset($HTTP_POST_VARS['church']) )
{
$sql = "UPDATE " . USERS_TABLE . "
SET user_posts = user_posts + 4,
user_cash = user_cash - 500,
user_gold = user_gold - 0,
user_holz = user_holz - 300,
user_stein = user_stein - 500,
user_metall = user_metall - 0,
user_church = user_church + 1
WHERE user_id = $user_id";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Deine Arbeiter können nicht so schnell arbeiten!', '', __LINE__, __FILE__, $sql);
}
$row = $db->sql_fetchrow($result);
}
//
// Generate the page
//
$template->pparse('body');
include($phpbb_root_path . 'includes/page_tail.'.$phpEx);
?>
Aber es wird dennoch nichts ausgelesen / angezeigt auf der .tpl-Seite ... ich bin ratlos.
Verfasst: 28.05.2006 17:16
von Patrik
Das Script ist richtig. Aber was sollte den ausgegeben werden, außer der CASH Variable, die im Script angegeben ist. Aber ich versteh nicht woher die Variable $cash kommt. Udn zum Ausgeben soltlest du auch in der .tpl Datei die Variable {CASH} schreiben.