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 :P

Bye derd

Verfasst: 28.05.2006 16:41
von YoOoOoOo
Noch einmal buildings.php

Code: 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.

Code: Alles auswählen

$user_id = $userdata['user_id'];

Verfasst: 28.05.2006 17:04
von YoOoOoOo
So, nun ist zwar die Fehlermeldung verschwunden aber ausgelesen wird dennoch nichts :roll:

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.