MoG
Administrator
      

Dabei seit: 06.10.2005
Beiträge: 425
Herkunft: Fischbach (Kr. Kaiserslautern)
 |
|
Hiho, dieser Thread is ne kleine Hilfe für Ark ^^
Es geht darum, eine PHP-Datei aufzurufen und mittels mitgelieferter Variablen, also action-anweisungen, verschiedene Aktionen durchzuführen. So kann man einer PHP-Datei mehrere Aufgaben zuteilen und spart Platz auf dem Server
Wie das Ganze dann im phpBB aussieht kann ich dir leider nicht sagen, da wirst du wohl oder übel ein wenig experimentieren müssen.
Zu Beginn jeder php sollte
 |
Quellcode |
1:
|
<?
|
stehen, darunter dürften im phpBB Verbindungen zu anderen Dateien und der Aufruf von Variablen folgen. Füge nun, nachdem dieser "Kopf" zu Ende ist, folgendes ein:
| php: |
1:
2:
|
if (isset($_REQUEST['action'])) $action = $_REQUEST['action'];
else $action = ''; |
|
Mit diesem Teil erklärst du deiner PHP, was sie machen soll, wenn an den Dateinamen noch eine Variable 'action' kommt. Was sie nun bei den verschiedenen Befehlen umsetzt, kannst du ihr so sagen:
| php: |
1:
2:
3:
4:
5:
6:
7:
8:
|
if($action=="popup") {
//Hier kämen deine Funktionen rein
//Falls es in phpBB eine Template-Ausgabe gibt, muss die auch hier rein!!!
//Bei wbb sieht das z.B. so aus:
//eval("\$tpl->output(\"".$tpl->get("cg_form")."\");");
} |
|
Diesen oberen Code kannst du mehrmals innerhalb deiner php verwenden, die action-Befehle sollten natürlich jedesmal einen anderen Namen haben.
Wie spricht man diese action nun an? Ganz einfach über die Adresszeile. Sagen wir, deine PHP-Datei heißt music.php In ihr befindet sich ein Code, der z.B. dein Popup mit Inhalt füllt (!!Folgendes ist kein Code zum Erzeugen von Popups, sondern nur ein Code zur Seitenausgabe. Popup kommt später);
 |
Quellcode |
1:
|
<a href="music.php?action=popup">Musikbox-Popup</a>
|
Mit diesem Link wird die music.php aufgerufen. Die Datei wird nach action=popup untersucht, der darin stehende Code wird ausgeführt und ausgegeben.
Innerhalb des phpBB gibt es, soweit ich weiß, eine Funktion zum Erstellen von Popups, egal wie, du musst es mit einem Inhalt füllen, evtl über den src-tag. Füge einfach "music.php?action=popup" ein, du verstehst hoffentlich, was ich meine ^^°
#################################
Als Beispiel haste hier mal eine geraffte PHP-Fassung:
| php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
|
<?php
$filename = 'cg_bank.php'; //WBB
require "global.php"; //WBB
require "cg_header.php"; //WBB
if (isset($_REQUEST['action'])) $action = $_REQUEST['action'];
else $action = '';
// Gast
if($wbbuserdata[userid] == "") {
header("Location: cg_start.php");
exit();
}
//#### Bank Index #### <--- Dieser Teil wird ausgeführt, wenn keine action angegeben wird
if($action=="") {
$cg_bereich = 'Bankhalle';
eval("\$cg_content = \"".$tpl->get("cg_bank")."\";");
eval("\$tpl->output(\"".$tpl->get("cg_form")."\");");
}
//#### Ausleihen #### <----- <a href="cg_bank.php?action=ausleihen"> So siehts aus
if($action=="ausleihen") {
$cg_bereich = 'Bank | Gold ausleihen';
//db-update
if (isset($_POST['send'])) {
$db->query("INSERT INTO cg_bank (charname,auftrag,gold_ausgeliehen,gold_schulden,leihzinssatz) VALUES
('$cguserdata[charname]','".addslashes($_POST['$auftrag'])."','".addslashes($_POST['gold_ausgeliehen'])."','".$schulden."','".addslashes($_POST['leihzinssatz'])."')");
header("Location: cg_bank.php?action=fertig");
exit();
}
eval("\$cg_aktion = \"".$tpl->get("cg_bank_ausleihen")."\";");
eval("\$cg_content = \"".$tpl->get("cg_bank")."\";");
eval("\$tpl->output(\"".$tpl->get("cg_form")."\");");
}
//##### Fertig ####
if($action=="fertig") {
$cg_bereich = 'Bank | Auftrag ausgeführt';
//db-update
$db->query("INSERT INTO cg_ablage (charname,gebäude,datum,text) VALUES
('$cguserdata[charname]','".addslashes($_POST['$gebaeude'])."','".$datum."','".addslashes($_POST['text'])."')");
header("Location: cg_bank.php");
exit();
}
eval("\$cg_aktion = \"".$tpl->get("cg_bank_fertig")."\";");
eval("\$cg_content = \"".$tpl->get("cg_bank")."\";");
eval("\$tpl->output(\"".$tpl->get("cg_form")."\");");
}
//#######
?>
|
|
Anweisungen, die vor action=="" kommen, sind für alle action-Teile verfügbar, alle Anweisungen die innerhalb eines action-Teils stehen, sind nur für diese action verfügbar
Ich hoffe, es hat ein wenig geholfen, hab nebenher telefoniert ^^°
Achja: du musst das alles nicht "action" nennen, jeder andere begriff geht auch, action ist nur leichter nachvollziehbar
MfG MoG
__________________

|
|
Donnerstag, 14.September 2006 16:26 |
|
|
 |
Ark
Überlebender des Updates
 

Dabei seit: 02.12.2005
Beiträge: 69
Herkunft: yami
 |
|
hallo mog
erstmal ein kleiner bug, den ich gefunden hab:
in dem lila style zeigt es nur 2 smilies in der smilie_box an. der rest der table_cells sind leer
nun zum code:
bei phpbb sieht eine befehlabfrage ein bissel anders aus. da läßt man das "action" nämlich weg, aber das wird dir sicher bekannt sein [nur der vollständigkeitshalber - falls jemand mitliest]
mal ein beispiel mit einer spring=quelle
| php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
|
$shrine = ( isset ($_GET['shrine']) ? $_GET['shrine'] : "" );
if ( $shrine != "" )
{
// Shrine found
switch ( $shrine )
{
case "warrior":
$sql_query = "SET character_hp = character_hp + " . ( 1 + $chara_data['character_hp_max'] - $chara_data['character_hp'] ) . ", character_hp_max = character_hp_max + 1, character_might = character_might + 1 " ;
$shrine_text = sprintf($lang['shrine_text_warrior'], $chara_data['character_hp_max'] + 1, $chara_data['character_might'] + 1 );
break;
case "magic":
$sql_query = "SET character_mp = character_mp + " . ( 1 + $chara_data['character_mp_max'] - $chara_data['character_mp'] ) . ", character_mp_max = character_mp_max + 1, character_intelligence = character_intelligence + 1 " ;
$shrine_text = sprintf($lang['shrine_text_magic'], $chara_data['character_mp_max'] + 1, $chara_data['character_intelligence'] + 1 );
break;
case "skills":
$skill_rand = array ( 'character_skill_mining', ' character_skill_stone', 'character_skill_forge', ' character_skill_enchantment', ' character_skill_trading', 'character_skill_thief' );
shuffle($skill_rand);
$sql_query = "SET " . $skill_rand[0] . " = " . $skill_rand[0] . " + 2 ";
$shrine_text = sprintf($lang['shrine_text_skills'], $skill_rand[0], $chara_data[$skill_rand[0]] + 2 );
break;
default:
$sql_query = "";
break;
}
if ( $sql_query != "" )
{
$sql = " UPDATE " . ADR_CHARACTERS_TABLE . " " . $sql_query . " WHERE character_id = " . $chara_data['character_id'];
$result = $db->sql_query($sql);
if(!$result)
{
message_die(GENERAL_ERROR, 'Could not update shrine data ', "", __LINE__, __FILE__, $sql);
}
}
$template->assign_block_vars('shrine_exists', array(
'L_SHRINE_FOUND' => $lang['shrine_found'],
'L_SHRINE_TEXT' => $shrine_text,
'SHRINE_TYPE' => $shrine
));
} |
|
kannst du mir den if_befehl für eine musicbox mal erklären, wo die box keine extra php benötigt, sondern in der "haupt_php" eingebettet ist?
achja - was bedeutet der eval ausdruck? hab ich noch nie gehört.
__________________

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Ark: 16.09.2006 16:01.
|
|
Freitag, 15.September 2006 18:14 |
|
|
MoG
Administrator
      

Dabei seit: 06.10.2005
Beiträge: 425
Herkunft: Fischbach (Kr. Kaiserslautern)
Themenstarter
 |
|
Danke, das Smilie-Problem sollte nun behoben sein ^^
eval ist eine Funktion aus php, mit der du du einen string so behandelst, als wäre es eine Zeichenkette, Beispiel:
| php: |
1:
2:
3:
4:
5:
6:
7:
|
<?php
$string = 'RPG';
$name = 'Board';
$str = 'Das ist mein $string, auf dem das $name läuft.';
eval ("\$str = \"$str\";");
echo $str;
?> |
|
Die Ausgabe wäre:
 |
Quellcode |
1:
2:
|
Das ist mein $string, auf dem das $name läuft.
Das ist mein Board, auf dem das RPG läuft.
|
Mit eval werden z.B. Variablen nicht ersetzt, sondern die Zeichenkette wird wie in php ausgegeben ^^ Vorteilhaft beim wbb, da datenbankabfragen der templates so einfacher funktionieren
@Problem:
Ich habe es oben eigentlich ausführlich erklärt, du hast es scheinbar nicht genau gelesen... wie dem auch sei, ich verstehe das template-system vom phpbb nicht, hab da bisher noch nie reingeschaut...
Zudem hast du mir einen seltsamen code-schnipsel geschickt, der bringt wenig ^^
ok, spring nimmt hier die stelle von action ein, allerdings interessiert dass die von dir gequotete date überhaupt nicht, sie bekommt nämlich eine weitere variable shrine
__________________

|
|
Freitag, 15.September 2006 19:11 |
|
|
 |
Ark
Überlebender des Updates
 

Dabei seit: 02.12.2005
Beiträge: 69
Herkunft: yami
 |
|
stimmt shrine und spring sind hier durcheinander - naja habs editiert und wollt damit nur zeigen, wie eine variabel_abfrage in phpBB2 aussieh
auf dem prinzip schrein und quelle [shrine-spring], also mit dem switch und case basieren ne menge andere elemente meines spiels -> pilze, hieroglyphen und bald auch beerensträucher^^
nochmal zur musicbox zurück. kannst du mir den code irgendwie zukommen lassen. kannst mir auch ne mail reiben, wenn du den code hier lieber nich reinstellen willst.
__________________

|
|
Samstag, 16.September 2006 16:00 |
|
|
|
|
 |
|