Eigene Seite - Datenbankabfrage ins Template

In diesem Forum kann man Fragen zur Programmierung stellen, die bei der Entwicklung von Mods für phpBB 3.0.x oder dem Modifizieren des eigenen Forums auftauchen.
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Antworten
Benutzeravatar
kacksack
Mitglied
Beiträge: 71
Registriert: 06.08.2008 02:00

Eigene Seite - Datenbankabfrage ins Template

Beitrag von kacksack »

Servus
versuche mich schon ein paar Tage daran, eine Datenbankabfrage meiner eigenen Unterseite bzw die Werte daraus ans Template zu übergehen.
Ich habe die drei benötigten Dateien angelegt und die Datenbankabfrage hinzugefügt.
Leider bkomme ich es nicht gebacken, das (wie auch immer) ans Template zu übergeben.
Mit einem echo bekomme ich die werte angezeigt, mir fehlt also die Template-Übergabe.

Code aus der php-Datei

Code: Alles auswählen

<?php

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

$user->session_begin();
$auth->acl($user->data);
$user->setup('intern');

// abrage start
$ergebnis = mysql_query("SELECT username, user_id FROM phpbb_users");	
  while($row = mysql_fetch_object($ergebnis))
  {	
		// echo $row->username,$row->user_id,"<br />";

 $i++;
}  
// abrage ende

page_header($user->lang['TITEL']);

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

page_footer();

?>
Da ich mich nur wenig mit php beschäftige, freue mich über ein wenig Hilfe :p
Benutzeravatar
TW1920
Mitglied
Beiträge: 746
Registriert: 02.06.2007 16:31
Wohnort: Ismaning
Kontaktdaten:

Re: Eigene Seite - Datenbankabfrage ins Template

Beitrag von TW1920 »

also, wenn das template geladen wird, ist schon mal alles gut. du must nur noch die templaevariablen definieren.

das machst du besten so:

Code: Alles auswählen

	$template->assign_vars(array(
		'VARIABLE1' 		=> $row->username,
		'VARIABLE2' 		=> $row->user_id
	));
Die Variablen kannst du ach umbenennen, aber sie sollten großbuchstaben sein.

Im Temlate kannst du diese werte dann mit dem code abrufen:

Code: Alles auswählen

Hallo, dein Name ist {VARIABLE1}und du hast die NutzerID {VARIABLE2}
Ich hoffe ich konnte dir helfen.
Mfg T. Wolf
-Mods gesucht? Ne weitere Community gesucht?
-Mods gesucht? Mod-Übersetzungen gesucht?:->hier klicken
Benutzeravatar
kacksack
Mitglied
Beiträge: 71
Registriert: 06.08.2008 02:00

Re: Eigene Seite - Datenbankabfrage ins Template

Beitrag von kacksack »

hat leider nicht funktioniert.
habe es nun anders lösen können.
php-Datei (Auszug):

Code: Alles auswählen

$result = mysql_query("SELECT * FROM phpbb_users INNER JOIN phpbb_user_group WHERE phpbb_user_group.user_id = phpbb_users.user_id AND phpbb_user_group.group_id = 24 ORDER BY user_sg1 DESC");

while ($row = $db->sql_fetchrow($result))
{
    $template->assign_block_vars('block_name', array(
        'USERNAME' => $row['username'],
        'USER_SG1' => $row['user_sg1'],
));
Template-Datei (Auszug):

Code: Alles auswählen

{block_name.USERNAME} {block_name.USER_SG1}
Ich danke trotzdem brav für Deine Hilfe =)
Benutzeravatar
TW1920
Mitglied
Beiträge: 746
Registriert: 02.06.2007 16:31
Wohnort: Ismaning
Kontaktdaten:

Re: Eigene Seite - Datenbankabfrage ins Template

Beitrag von TW1920 »

ah, ich habe den fehler gefunden:

die aushabe der sqlwerte war falsch. :oops:

den wert block_name muss man nicht zwingend nehmen, ist aber von vorteil, vrallem wenn man viele variablen hat.
Mfg T. Wolf
-Mods gesucht? Ne weitere Community gesucht?
-Mods gesucht? Mod-Übersetzungen gesucht?:->hier klicken
Benutzeravatar
kacksack
Mitglied
Beiträge: 71
Registriert: 06.08.2008 02:00

Re: Eigene Seite - Datenbankabfrage ins Template

Beitrag von kacksack »

Okay, soweit sogut.
Meine Seite funktioniert, aber :D
Ich habe noch ein Eingabefeld eingefügt, indem ich den aktuellen Wert ändern möchte.
Die geänderten Werte sollen über die Datei "eintragen.php" direkt in die DB geschrieben werden.
Wenn ich das nun ausführen lasse, bekomme ich nur eine weiße Seite zu sehen -.-

php-Datei (intern.php)

Code: Alles auswählen

<?php

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

$user->session_begin();
$auth->acl($user->data);
$user->setup('intern');

$result = mysql_query("SELECT * FROM phpbb_users INNER JOIN phpbb_user_group WHERE phpbb_user_group.user_id = phpbb_users.user_id AND phpbb_user_group.group_id = 24 ORDER BY user_sg1 DESC");

while ($row = $db->sql_fetchrow($result))
{
    $template->assign_block_vars('block_name', array(
        'USERNAME' => $row['username'],
        'USER_SG1' => $row['user_sg1'],
));

}
page_header($user->lang['MEIN_TITEL']);

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

page_footer();

?>
Template-Datei (intern.html)

Code: Alles auswählen

<!-- INCLUDE overall_header.html -->

<form action="eintragen.php" method="post">

<table class="table1" cellspacing="1">
    <!-- BEGIN block_name -->
    <tr>
        <td>{block_name.USERNAME}</td>
		<td>{block_name.USER_SG1}</td>
		<td><input type="text" name="sg1_$row->username" size="2" title="{block_name.USERNAME} Wert"></td>
    </tr>
    <!-- END block_name -->
</table>

{USERNAME}<br>
{USER_SG1}

<input type="submit" id="eintragen" name="eintragen" value="speichern">
<!-- INCLUDE overall_footer.html -->
Eintrag-Datei (eintragen.php)

Code: Alles auswählen

<meta http-equiv="refresh" content="2; URL=intern.php" http-equiv="Content-Type" content="text/html; charset=iso-8859-1" / >
<?php
include ("config.php");

 mysql_connect($dbhost,$dbuser,$dbpasswd) or die
 ("Keine Verbindung moeglich");
 mysql_select_db($dbname) or die
 ("Die Datenbank existiert nicht.");

if (isset( $_POST['eintragen'] ))
{
    $_POST = get_magic_quotes_gpc() ? array_map( 'stripslashes', $_POST ) : $_POST;

    $conID = mysql_connect($dbhost,$dbuser,$dbpasswd) or die( "Die Datenbank konnte nicht erreicht werden!" );
    if ($conID)
    {
        mysql_select_db($dbname);
    }
 
	$sql = "SELECT * FROM phpbb_users";
    
    $result = mysql_query($sql);
	while($row = mysql_fetch_object($result))
	{	
		echo "test";
		if(isset($_POST["sg1_$row->username"]) && $_POST["sg1_$row->username"] != "")
		{
			$sql_update = "UPDATE phpbb_users SET user_sg1=user_sg1+" . $_POST["sg1_$row->username"] . " WHERE username=\"" . $row->username . "\"";
			mysql_query($sql_update);
		}
	}
}

?>
Wenn nochmal jemand helfen mag :D
Benutzeravatar
TW1920
Mitglied
Beiträge: 746
Registriert: 02.06.2007 16:31
Wohnort: Ismaning
Kontaktdaten:

Re: Eigene Seite - Datenbankabfrage ins Template

Beitrag von TW1920 »

habe den fehler gefunden. da ist einiges nicht ganz richtg. werde dir eine lösung mal erstellen.
Mfg T. Wolf
-Mods gesucht? Ne weitere Community gesucht?
-Mods gesucht? Mod-Übersetzungen gesucht?:->hier klicken
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17401
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Re: Eigene Seite - Datenbankabfrage ins Template

Beitrag von Dr.Death »

Hallo,

kleiner Hinweis: Nutzt keine Datenbank bezogenen SQL Statements, sondert nutzt den in phpBB integrierten Database Layer.

Beispiele hierzu findet ihr in den Coding Guidelines: http://area51.phpbb.com/docs/coding-guidelines.html#sql
Benutzeravatar
TW1920
Mitglied
Beiträge: 746
Registriert: 02.06.2007 16:31
Wohnort: Ismaning
Kontaktdaten:

Re: Eigene Seite - Datenbankabfrage ins Template

Beitrag von TW1920 »

Code: Alles auswählen

<meta http-equiv="refresh" content="2; URL=intern.php" http-equiv="Content-Type" content="text/html; charset=iso-8859-1" / >
<?php

//stellt sicher, dass das script für das forum gedacht ist
define('IN_PHPBB', true);
$phpbb_root_path = './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);

//lädt alle phpbb funktionen
include($phpbb_root_path . 'common.' . $phpEx);

//überprüfen, ob die daten übergeben worden sind
if (isset( $_POST['eintragen'] ))

{

//sicherstellen, dass keine sql-injektion vorgenommen wird wobei 0 sicherstellt dass es eine zahl ist. man kann auch andere zeichen erlauben
    $eintragen = request_var('eintragen', 0 );
    $username = request_var('username', 0 );

   $sql = "SELECT * 
        FROM ' . USERS_TABLE . ' ";
    
    $result = mysql_query($sql);
   while($row = mysql_fetch_object($result))
   {   
      echo "test";
      if(isset($_POST["sg1_$row->username"]) && $_POST["sg1_$row->username"] != "")
      {

//was willst du hier machen
         $sql = "UPDATE ' . USERS_TABLE . '
            SET user_sg1= user_sg1+ " . $username . " 
            WHERE username= "  . $username .  "";

$db->sql_query($sql);
$db->sql_transaction('commit');      }
   }
}

else {

echo "Keine Daten übergeen";
}

?>
Ich habe dir mal im groben so einiges berichtigt. wenn du mehr hilfe brauchst, musst du sagen, was du genau bezwecken willst. Damt meine ich, dass du vieleicht schreiben könntest, welches shema du abarbeiten möchtest.

Als tipp gebe ich dir dass du requestvar benutzt. desweiteren verstehe ich nicht, warum du backslashes in der sql-anweisung verwendet hast :-?
Auch solltest du die template-funktion nutzen.

auch ist das html formular nicht wirklich richtig.


solltest du bei gewissen punkten fragen haben, stehen wir jederzeit zur verfügung.

Hilfreiche Themen:
HTML bei selfhtml.org
Zum Them requestvar
Weiteres und gut erklärtes request var-Tutorial
PHP-Tutorial
Mfg T. Wolf
-Mods gesucht? Ne weitere Community gesucht?
-Mods gesucht? Mod-Übersetzungen gesucht?:->hier klicken
Benutzeravatar
kacksack
Mitglied
Beiträge: 71
Registriert: 06.08.2008 02:00

Re: Eigene Seite - Datenbankabfrage ins Template

Beitrag von kacksack »

Eiegntlich möchte ich nur für bestimmte Benutzer, bzw eine bestimmte Benutzergruppe, einen Wert in die Datenbank eintragen und aktualisieren können.
Deshalb habe ich in "phpbb_users" das feld "user_sg1" hinzugefügt, in dem ich Werte speichern möchte (1-9).

Benutzer A und Benutzer B sind in der Benutzergruppe 1
Nun möchte ich mir ausgeben lassen, welche Benutzer in der Gruppe 1 sind - also Benutzer A und B (das hab ich ja schon hinbekommen).
Weiter möchte ich ausgeben lassen, welchen Wert diese Benutzer in "user_sg1" gespeichert haben (auch das funktioniert ja).
Dazu fehlt dann noch ein Eingabefeld, in dem ich den aktuellen user_sg1-Wert des Benutzers editieren kann (zumindest das Feld hab ich).
Der neue Wert soll dann in der DB unter user_sg1 gespeichert werden (das klappt irgendwie noch nicht).

Beispiel:
Benutzer A - Wert 4 - Feld für neuen Wert
Benutzer B - Wert 7 - Feld für neuen Wert

Ich bräuchte das nur für eine Nebensächlichkeit.
Da ich nur Hobbytechnisch ein bisschen mit php und mysql pfusche, möchte ich für diese simple Liste nicht groß anfangen, php und mysql ernsthaft programmieren zu lernen (das mal zu meinem Motiv und meiner stümperhaften Arbeit :p)

Wieder danke ich brav für die Unterstützung :D
Antworten

Zurück zu „[3.0.x] Mod Bastelstube“