Seite 1 von 1

Eigene Seite - Datenbankabfrage ins Template

Verfasst: 11.03.2011 10:03
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

Re: Eigene Seite - Datenbankabfrage ins Template

Verfasst: 11.03.2011 17:00
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.

Re: Eigene Seite - Datenbankabfrage ins Template

Verfasst: 11.03.2011 19:37
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 =)

Re: Eigene Seite - Datenbankabfrage ins Template

Verfasst: 11.03.2011 20:37
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.

Re: Eigene Seite - Datenbankabfrage ins Template

Verfasst: 11.03.2011 21:09
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

Re: Eigene Seite - Datenbankabfrage ins Template

Verfasst: 12.03.2011 02:25
von TW1920
habe den fehler gefunden. da ist einiges nicht ganz richtg. werde dir eine lösung mal erstellen.

Re: Eigene Seite - Datenbankabfrage ins Template

Verfasst: 12.03.2011 16:56
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

Re: Eigene Seite - Datenbankabfrage ins Template

Verfasst: 12.03.2011 23:11
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

Re: Eigene Seite - Datenbankabfrage ins Template

Verfasst: 13.03.2011 00:35
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