Splinter
Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Splinter » Laberecke » Technik » PHP: action-Anweisung » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen PHP: action-Anweisung
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
MoG MoG ist männlich
Administrator


images/avatars/avatar-62.gif

Dabei seit: 06.10.2005
Beiträge: 425
Herkunft: Fischbach (Kr. Kaiserslautern)

PHP: action-Anweisung Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 großes Grinsen

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 MoG ist offline E-Mail an MoG senden Homepage von MoG Beiträge suchen auf Freundesliste Fügen Sie MoG in Ihre Kontaktliste ein MSN Passport-Profil von MoG anzeigen
Ark Ark ist männlich
Überlebender des Updates


images/avatars/avatar-18.jpg

Dabei seit: 02.12.2005
Beiträge: 69
Herkunft: yami

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 + " . ( $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 + " . ( $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]] + );
  
              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 Ark ist offline E-Mail an Ark senden Beiträge suchen auf Freundesliste
MoG MoG ist männlich
Administrator


images/avatars/avatar-62.gif

Dabei seit: 06.10.2005
Beiträge: 425
Herkunft: Fischbach (Kr. Kaiserslautern)

Themenstarter Thema begonnen von MoG
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 MoG ist offline E-Mail an MoG senden Homepage von MoG Beiträge suchen auf Freundesliste Fügen Sie MoG in Ihre Kontaktliste ein MSN Passport-Profil von MoG anzeigen
Ark Ark ist männlich
Überlebender des Updates


images/avatars/avatar-18.jpg

Dabei seit: 02.12.2005
Beiträge: 69
Herkunft: yami

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 Ark ist offline E-Mail an Ark senden Beiträge suchen auf Freundesliste
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Splinter » Laberecke » Technik » PHP: action-Anweisung

Ähnliche Themen
Thread Forum Gestartet Letzte Antwort
PHP: keyinput für switchfunktion Technik   06.04.2007 10:57 von Ark     06.04.2007 20:20 von Ark  
PHP: mehrfache action-Anweisung über switch and case Technik   26.03.2007 21:42 von Ark     26.03.2007 22:06 von Ark  
2. Testboard auf phpBB-Ebene Ankündigungen   08.09.2006 21:19 von MoG     09.09.2006 15:27 von MoG  
PC GuildWars: Factions - kostenloser Beta-Test Spiele   15.01.2006 16:20 von Mac     17.01.2006 14:53 von Winyett Grayanus  


Forensoftware: Burning Board 2, entwickelt von WoltLab GmbH