Einige Fragen zu SQL-Anweisungen ...

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.
YoOoOoOo
Mitglied
Beiträge: 71
Registriert: 01.05.2006 16:34
Wohnort: YoOoOoOoOo
Kontaktdaten:

Einige Fragen zu SQL-Anweisungen ...

Beitrag 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...
Zuletzt geändert von YoOoOoOo am 28.05.2006 16:00, insgesamt 1-mal geändert.
Benutzeravatar
derd
Mitglied
Beiträge: 1176
Registriert: 19.04.2004 19:30
Wohnort: Aue
Kontaktdaten:

Beitrag 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
YoOoOoOo
Mitglied
Beiträge: 71
Registriert: 01.05.2006 16:34
Wohnort: YoOoOoOoOo
Kontaktdaten:

Beitrag 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>
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag 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
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
YoOoOoOo
Mitglied
Beiträge: 71
Registriert: 01.05.2006 16:34
Wohnort: YoOoOoOoOo
Kontaktdaten:

Beitrag von YoOoOoOo »

Ja das scheint das Problem zu sein - nur wie muss die Variable $user_id definiert werden?

Hoffende Grüsse!
Patrik
Mitglied
Beiträge: 208
Registriert: 23.04.2005 13:30
Wohnort: Hallein

Beitrag von Patrik »

Stelle folgendes an den Anfang des Scipts und nicht an das Ende.

Code: Alles auswählen

$user_id = $userdata['user_id'];
Die 3 größten Feinde eines Programmierers: Sonnenlicht, Frischluft und das unerträgliche Gebrüll der Vögel...
Jede Beseitigung eines Programmfehlers ruft Zwei neue hervor.
YoOoOoOo
Mitglied
Beiträge: 71
Registriert: 01.05.2006 16:34
Wohnort: YoOoOoOoOo
Kontaktdaten:

Beitrag von YoOoOoOo »

So, nun ist zwar die Fehlermeldung verschwunden aber ausgelesen wird dennoch nichts :roll:

Slytherin
Patrik
Mitglied
Beiträge: 208
Registriert: 23.04.2005 13:30
Wohnort: Hallein

Beitrag 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
//
Die 3 größten Feinde eines Programmierers: Sonnenlicht, Frischluft und das unerträgliche Gebrüll der Vögel...
Jede Beseitigung eines Programmfehlers ruft Zwei neue hervor.
YoOoOoOo
Mitglied
Beiträge: 71
Registriert: 01.05.2006 16:34
Wohnort: YoOoOoOoOo
Kontaktdaten:

Beitrag 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.
Patrik
Mitglied
Beiträge: 208
Registriert: 23.04.2005 13:30
Wohnort: Hallein

Beitrag 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.
Die 3 größten Feinde eines Programmierers: Sonnenlicht, Frischluft und das unerträgliche Gebrüll der Vögel...
Jede Beseitigung eines Programmfehlers ruft Zwei neue hervor.
Antworten

Zurück zu „Coding & Technik“