| (Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI... |
Diskussion: [php 4] Nochmal von neu parsen. im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige Abend, Skripter. Ich habe ein kleines Problem mit den serverseitigen Header-Umleitungen. Meine Skripte haben ein bisschen zu viel davon. ...
![]() |
| | #1 (permalink) |
| Registriert seit: 08.12.06 ![]() Likes: 0 | Anzeige Abend, Skripter. Ich habe ein kleines Problem mit den serverseitigen Header-Umleitungen. Meine Skripte haben ein bisschen zu viel davon. Ich bräuchte eine Funktion oder Methode, das Skript wieder vom Anfang parsen zu lassen. Wie zum Beispiel hier im Beispiel bsp.php PHP-Code: um das Skript nochmal erneut parsen zu lassen. Dabei ruft der Browser das Skript unter den neuen Einstellungen noch einmal auf. Ich will aber, dass das Skript nach der neuen Einstellung noch einmal vom Anfang parst. Statt header()+exit() eine php-Funktion vom Anfang parsen. Wenn möglich ohne Sprungmarken, vorallem da ich nur php 4 zu meinem Host habe. Bitte gebt mir nicht einen Tipp wie den hier PHP-Code: eigentliches Skript, ich brauche echt was zum nochmal von neu parsen. Wäre super, wenn jemand schnell was parat hätte. mfg - jesus |
| | |
| | #2 (permalink) |
| Member of Honour ![]() | wie wäre es mir einem While-Konstrukt á la: while($datei == '') so könntest du etwas ausführen, solange eben nichts in $datei steht... |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) | |
| Themenstarter Registriert seit: 08.12.06 ![]() Likes: 0 | Zitat:
| |
| | |
| | #4 (permalink) |
| Registriert seit: 20.11.05 ![]() Likes: 0 | Und wenn du die Datei einfach nocheinmal mit Include() einbindest? Musst aufpassen das es zu keiner Endlosschleife kommt, allerdings hätte es wohl den selben effekt wie der Location Header, nur eben Serverseitig. Edit: Auf dein Beispiel übertragen: PHP-Code: Edit2: Hier ist jedoch, meiner meinung nach, ein Die() hinter dem Include() recht hilfreich um Ungewolltest doppelt parsen zu verhindern. |
| | |
| | #5 (permalink) |
| Registriert seit: 09.01.07 ![]() Likes: 0 | Die Variable $_SERVER['PHP_SELF'] enthält den aktuellen Dateinamen relativ zum Wurzelverzeichnis. Du könntest also mittels echo $_SERVER['PHP_SELF']; die aktuelle Seite neu ausgeben lassen. Vielleicht hilft dir das weiter. Aber u.U. musst du dann deinen restlichen Code anpassen. |
| | |
| | #6 (permalink) |
| Member of Honour ![]() Registriert seit: 02.10.01 ![]() Likes: 0 | Darf ich fragen, warum du das überhaupt neu parsen möchtest? Du schreibst, du hast in deinen Skripten zu viele header-umleitungen. Vlt. sind die aber gar nicht notwendig, wenn man die ganze Struktur nochmal überdenkt. ?( |
| | |
| | #7 (permalink) |
| Themenstarter Registriert seit: 08.12.06 ![]() Likes: 0 | OK LEUTE IHR WOLLT JA DAS EINGENTLICHE SKRIPT SEHEN! Ein "Das ist jur ein schlechtes Beispiel und ich brauche wirklich was zum von neu parsen" hilft ned weiter... index.php Code: include ('../connect.inc');
include ('../ident_session.inc');
include ('../../libs/get_level.lib');
include ('../../libs/statcalc.lib');
include ('../../libs/entlaut.lib');
// Womit will ein non-member schon gegen ein wildes Pokemon kämpfen?
if ($loged != 'member')
{
include ('na_NotLogedIn.brc');
exit ();
}
// Man darf nicht in einem Trainerkampf sein.
$res = mysql_query("SELECT otid FROM user_trainerkaempfe WHERE otid=".$ser['user_id'].";");
if (mysql_num_rows($res) != 0)
{
include ('na_Trainerkampf.brc');
exit ();
}
// Man darf nicht am Tauschen sein.
$res = mysql_query("SELECT otid FROM user_livetausch WHERE otid=".$ser['user_id'].";");
if (mysql_num_rows($res) != 0)
{
include ('na_Tausch.brc');
exit ();
}
// Kampf erstellen, wenn keiner beim Skriptaufruf läuft.
$res = mysql_query("SELECT * FROM user_wildkaempfe WHERE otid=".$ser['user_id'].";");
if (mysql_num_rows($res) != 1)
{
include ('index_start.inc');
}
else
{
// Daten und Modifikationen vom Kampf auspacken.
$battle = mysql_fetch_assoc($res);
// Ist der eperhalt nicht 0, soll LevelUp erstmal durchlaufen werden, bis man dieses Skript mit 0 durchläuft!
if ($battle['self_eperhalt'] != 0)
{
include ('index_LevelUp.brc');
}
else
{
// ...
$goto = isset($_GET['show'])?$_GET['show']:'battle';
switch ($goto)
{
case 'pokemon': include ('../team.inc'); break; // Stattdessen in die Teampokemon-Auswahl gehen.
case 'item': include ('choose_item.inc'); break; // Stattdessen in die Item-Auswahl gehen.
default: include ('index_Kampf.brc'); break;
}
}
} Code: // Erstes nicht-kampfunfähige Pokemon im Team als eingesetzt speichern.
$firstfreeslot = 0;
for ($p = 1; $p <= 6; $p++)
{
$res = mysql_query("SELECT COUNT(*) As Funde FROM user_pokemon_team WHERE sw_ukp!=0 AND slot='".$p."' AND otid='".$ser['user_id']."';");
if (mysql_result($res, 0) == 1) {$firstfreeslot = $p; break;}
}
// Kein nicht-kampfunfähiges Pokemon im Team gefunden, wenn $firstfreeslot immernoch 0.
if ($firstfreeslot == 0)
{
// Alles abbrechen und zurück zur Welt
header ('Location: ../rechts.php?sid='.$sid);
exit ();
}
// Existiert kein pkfield nach Parameter 'field' keine Auftauchmöglichkeiten oder sind leer,
// wird $maybes unten Leerarray sein und man kommt eh nicht weiter.
$res = mysql_query("SELECT bbcode FROM welt_maps WHERE maptitle='".$ser['welt_map']."';");
preg_match ('#<pkfield "'.$_GET['field'].'" "(.*)" ".*">(.*)</pkfield>#Usi', mysql_result($res, 0), $pkfield);
$theme = $pkfield[1];
$pokes = $pkfield[2];
// Ist Parameter $angel mitgegeben, geht's nur weiter, wenn man das jeweilige Basis-Item besitzt.
if (isset($angel))
{
$res = mysql_query("SELECT bezeichnung FROM User_Items WHERE bezeichnung='".$angel."' AND otid='".$ser['user_id']."';");
if (mysql_num_rows($res) == 0)
{
header ('Location: ../rechts.php?sid='.$sid);
exit ();
}
}
// Auftauchmöglichkeiten des pkfields auspacken.
// Ist $angel gesetzt, nur die maybes der jeweiligen Angel aus dem pkfield nehmen.
preg_match_all ('#<"(.*)" "(.*)" ([\d]{1,5}) ([\d]{1,5})'.(isset($angel)?' "'.$angel.'"':'').'>#i', $pokes, $maybes, PREG_SET_ORDER);
if (count($maybes) == 0)
{
// 0 Auftauch-Möglichkeiten. Skript abbrechen und zurück zur Welt.
header ('Location: ../rechts.php?sid='.$sid);
exit ();
}
// Generiert nun das aufzutauchende PkMn mit seinen Zuffals-EP.
shuffle ($maybes);
$gpkmn_artname = $maybes[0][2];
$gpkmn_ep = mt_rand((int)$maybes[0][3], (int)$maybes[0][4]);
// Hier wird per Zufall das Wesen des wilden PkMn generiert!
$zufall = array('Ernst', 'Forsch', 'Frech', 'Hart', 'Hastig', 'Hitzig', 'Kauzig', 'Kühn', 'Lasch', 'Locker', 'Mäßig', 'Mild', 'Mutig', 'Naiv', 'Pfiffig', 'Robust', 'Ruhig', 'Sacht', 'Sanft', 'Scheu', 'Solo', 'Still', 'Zaghaft', 'Zart');
shuffle ($zufall);
$gpkmn_wesen = $zufall[0];
// Wird es ein Shiny?
if (mt_rand(1, 8000) == 1)
{
$gpkmn_shiny = 'shiny';
}
else
{
$gpkmn_shiny = 'normal';
}
// constante Global-Daten des auftauchenden Poke auspacken für Generierungen unten.
$res = mysql_query("SELECT ability1, ability2, ep_klasse, stat_mkp FROM const_pokemon WHERE nameD='".$gpkmn_artname."';");
if (mysql_num_rows($res) != 1)
{
// Das wilde Pokemon existiert nicht in der Datenbank!
header ('Location: ../rechts.php?sid='.$sid);
exit ();
}
$const = mysql_fetch_assoc($res);
// Level des wilden Pokemon berechnen.
$gpkmn_epkalk = get_level($gpkmn_artname, $gpkmn_ep);
// Fweiser des wilden PkMn generieren.
if ($const['ability2'] == '')
{
$gpkmn_fweiser = 1;
}
else
{
$gpkmn_fweiser = ($const['ability1'] == '')?1:mt_rand(1, 2);
}
// Geschlecht des wilden PkMn generieren.
$gpkmn_geschlecht = 0;
if ($const['gsverteilung'] == -1)
{
$gpkmn_geschlecht = 0;
}
else
{
if (mt_rand(1, 100) <= $const['gsverteilung'])
{
$gpkmn_geschlecht = 1;
}
else
{
$gpkmn_geschlecht = 2;
}
}
// dv des mkp-werts schon hier generieren, mkp berechnen!
$gpkmn_dv_mkp = mt_rand(0, 31);
$gpkmn_mkp = 10 + $const['stat_mkp'] * $gpkmn_epkalk['level'];
$gpkmn_mkp += $gpkmn_dv_mkp / 100 * $gpkmn_epkalk['level'];
$gpkmn_mkp = floor($gpkmn_mkp);
// Wildpokemon-Zeile erstellen!
mysql_query ("INSERT INTO user_wildkaempfe (
otid, theme, self_pkset, phase,
wild_artname, wild_shiny, wild_geschlecht, wild_fweiser, wild_tragitem, wild_ep, wild_happiness, wild_woher, wild_wesen,
wild_sw_ukp, wild_dv_mkp, wild_dv_atk, wild_dv_def, wild_dv_spa, wild_dv_spv, wild_dv_mov
) VALUES (
'".$ser['user_id']."', '".$theme."', ".$firstfreeslot.", 'standby',
'".$gpkmn_artname."', '".$gpkmn_shiny."', ".$gpkmn_geschlecht.", ".$gpkmn_fweiser.", '', ".$gpkmn_ep.", 70, '".$gpkmn_woher."', '".$gpkmn_wesen."',
".$gpkmn_mkp.", ".$gpkmn_dv_mkp.", ".mt_rand(1, 31).", ".mt_rand(1, 31).", ".mt_rand(1, 31).", ".mt_rand(1, 31).", ".mt_rand(1, 31)."
);") or die ('Konnte kein wildes Pokemon generieren...');
// Dem wilden Pokemon Attacken "beibringen"
include ('index_start_setMoves.inc');
// Kampfstart-Benachrichtigung chatten.
if (isset($angel))
{
$text = '<span class="text_datum">['.date('h:i').']</span> <b>~</b> '.$ser['username'].' wirft die '.$angel.' aus -> Ein wildes '.$gpkmn_artname.'!<br>';
}
else
{
$text = '<span class="text_datum">['.date('h:i').']</span> <b>~</b> '.$ser['username'].' -> Ein wildes '.$gpkmn_artname.'!<br>';
}
mysql_query ("INSERT INTO ychat_newlines (time, map, text) VALUES (".date('U').", '".$ser['welt_map']."', '".$text."');");
// index.php nun erneut aufrufen.
// Die in index_start.inc erzeugten Einstellungen parsen index.php diesmal mit index_Kampf.brc
header ('Location: index.php?sid='.$sid); Code: $titel = 'Standby!';
$bericht = '';
// Feldveränderungen anzeigen und runterzählen bzw. wegen Nachlass einternen.
if ($battle['field_status'] == 'Hagelsturm')
{
if (--$battle['field_count'] == 0)
{
$battle['field_status'] = '';
sendq ("user_wildkaempfe SET field_status='' WHERE otid=".$ser['user_id'].";");
$bericht = 'Der Hagelsturm<br>lässt nach!';
}
else
{
$bericht = 'Ein Hagelsturm tobt!';
}
sendq ("user_wildkaempfe SET field_count=".$battle['field_count']." WHERE otid=".$ser['user_id'].";");
}
elseif ($battle['field_status'] == 'Sandsturm')
{
if (--$battle['field_count'] == 0)
{
$battle['field_status'] = '';
sendq ("user_wildkaempfe SET field_status='' WHERE otid=".$ser['user_id'].";");
$bericht = 'Der Sandsturm<br>lässt nach!';
}
else
{
$bericht = 'Ein Sandsturm tobt!';
}
sendq ("user_wildkaempfe SET field_count=".$battle['field_count']." WHERE otid=".$ser['user_id'].";");
}
elseif ($battle['field_status'] == 'Greissendes Licht')
{
if (--$battle['field_count'] == 0)
{
$battle['field_status'] = '';
sendq ("user_wildkaempfe SET field_status='' WHERE otid=".$ser['user_id'].";");
$bericht = 'Das Sonnenlicht<br>lässt nach!';
}
else
{
$bericht = 'Greissendes Licht!';
}
sendq ("user_wildkaempfe SET field_count=".$battle['field_count']." WHERE otid=".$ser['user_id'].";");
}
elseif ($battle['field_status'] == 'Platzregen')
{
if (--$battle['field_count'] == 0)
{
$battle['field_status'] = '';
sendq ("user_wildkaempfe SET field_status='' WHERE otid=".$ser['user_id'].";");
$bericht = 'Der Regen<br>lässt nach!';
}
else
{
$bericht = 'Ein Platzregen!';
}
sendq ("user_wildkaempfe SET field_count=".$battle['field_count']." WHERE otid=".$ser['user_id'].";");
}
// Schilder anzeigen und runterzählen bzw. wegen Nachlass einternen.
if ($battle['self_lichtschild'] != 0)
{
if (--$battle['self_lichschild'] == 0)
{
$bericht .= '<p>'.$epkmn_spitzname.'s Lichtschild<br>lässt nach!';
}
sendq ("user_wildkaempfe SET self_dr_lichtschild=".$battle['self_lichtschild']." WHERE otid=".$ser['user_id'].";");
}
if ($battle['self_reflektor'] != 0)
{
if (--$battle['self_reflektor'] == 0)
{
$bericht .= '<p>'.$epkmn_spitzname.'s Reflektor<br>lässt nach!';
sendq ("user_wildkaempfe SET self_dr_reflektor=".$battle['self_reflektor']." WHERE otid=".$ser['user_id'].";");
}
}
if ($battle['self_bodyguard'] != 0)
{
if (--$battle['self_bodyguard'] == 0)
{
$bericht .= '<p>'.$epkmn_spitzname.'s Bodyguard<br>lässt nach!';
}
sendq ("user_wildkaempfe SET self_dr_bodyguard='".$battle['self_bodyguard']."' WHERE otid='".$ser['user_id']."';");
}
if ($battle['wild_dr_lichtschild'] != 0)
{
if (--$battle['wild_dr_lichschild'] == 0)
{
$bericht .= '<p>'.$battle['wild_artname'].'s Lichtschild<br>lässt nach!';
}
sendq ("user_wildkaempfe SET dr_bodyguard=".$battle['wild_dr_lichtschild']." WHERE otid=".$ser['user_id'].";");
}
if ($battle['wild_dr_reflektor'] != 0)
{
if (--$battle['wild_dr_reflektor'] == 0)
{
$bericht .= '<p>'.$battle['wild_name'].'s Reflektor<br>lässt nach!</p>';
}
sendq ("user_wildkaempfe SET self_dr_bodyguard=".$battle['wild_dr_reflektor']." WHERE otid=".$ser['user_id'].";");
}
if ($battle['wild_dr_bodyguard'] != 0)
{
if (--$battle['wild_dr_bodyguard'] == 0)
{
$bericht .= '<p>'.$battle['wild_artname'].'s Bodyguard<br>lässt nach!</p>';
}
sendq ("user_wildkaempfe SET dr_bodyguard=".$battle['wild_dr_bodyguard']." WHERE otid=".$ser['user_id'].";");
}
// Befehle und Actfolge der vorigen Runde zurücksetzen.
sendq ("user_wildkaempfe SET phase='befehl', self_turn=0, self_cmd1='', self_cmd2='', self_cmd3='', self_cmd4='' WHERE otid=".$ser['user_id'].";");
// Wenn's nix zu berichten gibt kein Seitenaufbau, direkt Seitenaufruf mit nächster Phase...
if ($bericht == '')
{
header ('Location: index.php?sid='.$sid);
exit ();
} |
| | |
| | #8 (permalink) |
| Registriert seit: 20.11.05 ![]() Likes: 0 | Und wo ist jetzt das Problem? Speichere die Variablen die du beim wiederaufrufen haben willst in einem Extra Array. Bei jedem Start überprüfst du jetzt ob die Variablen die Per "GET" kommen auch schon in diesem Array vorhanden sind. Um sicher zu gehen das Funktionen nicht 2 mal Definiert werden reicht eine Einfache IF Anweisung aus: PHP-Code: Dann einfach nochmal z.b. Deine Index datei neu einbinden, bzw die datei auf die der Aufruf eigentlich ziehlte und hinter dem Include ein Exit(). Das ganze in eine einigermaßen schöne Funktion und schon hast du dein Sktipt-Neu-Parsen Methode. |
| | |
| | #9 (permalink) |
| Moderator ![]() | Wuaa, das wird ja immer dreckiger... Wie Indi schon etwas durch die Blume sagte: wenn ein Skript davon abhängt, dass es mehrfach durchläuft, dann ist es einfach schlecht programmiert. Wenn Code mehrfach ausgeführt werden soll, dann gehört der in eine Schleife, und zwar ohne includes auf die gleiche Datei oder einen Redirect auf sich selbst. Ich hab keine Lust, mich da durch die 3 geposteten Skripte zu wühlen, dem Anschein nach handelt es sich aber um ein Onlinespiel. Falls es darum geht, dass eigene Aktionen davon abhängen, was andere gemacht haben, und dass hier ein regelmäßiger Check auf neue Aktionen von anderen erfolgen sollte, dann gehört das aber auf die Clientseite. Alle x Sekunden den Browser eine Seite neu laden lassen ist da definitiv eher geeignet als Endlosschleifen zu programmieren oder eine Rekursion ohne Wiederkehr. Das bringt nämlich selbst den stärksten Server schnell in die Knie. |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| std::string parsen -> wie? | bad_alloc | Code Kitchen | 5 | 27.03.08 21:39 |
| template parsen - | Friedrich | Code Kitchen | 8 | 06.12.07 23:23 |
| mp3 "parsen" | Friedrich | Code Kitchen | 5 | 06.12.07 16:22 |
| website parsen c++ | gelöscht | Code Kitchen | 3 | 05.01.06 18:21 |