Boardunity & Video Forum

Boardunity & Video Forum (https://boardunity.de/)
-   Web Design und Grafik (https://boardunity.de/web-design-grafik-f29.html)
-   -   Parameter aus Adr.-Leiste auslesen? YaBB SE 1.5.4 (Recent.php YaBB SE 1.5.1) (https://boardunity.de/parameter-adr-leiste-auslesen-yabb-se-1-5-4-recent-php-yabb-se-1-5-1-a-t1163.html)

netzopfer 07.01.2004 14:45

Parameter aus Adr.-Leiste auslesen? YaBB SE 1.5.4 (Recent.php YaBB SE 1.5.1)
 
Hi,

mein Anliegen sollte an sich ganz einfach sein:

Hab die Code Passage:
Code:

<?php

...

function RecentPosts()
{
        global $bla, $bla, $bla
        $display = 30;

...
}

...

?>

Der Wert 30 soll gegen das auslesen von:
--
?action=recent;display=30
--
aus der URL Adressleiste ersetzt werden. Dabei soll 20 als Standardwert genommen werden falls kein Parameter ausgelesen werden konnte.
Damit wird die Anzahl der anzuzeigenden Threads beeinflusst wird und es zur Zeit statisch ist wenn ich es aufrufe :(

Falls es wirklich nicht zu kompliziert ist, würde ich mich über Hilfe freuen, da nur PHP Basiskenntnisse.

netzopfer 07.01.2004 15:34

Hui....
 
hui..., dann sind es wohl doch eher niedere Basiskenntnisse :(
Ich lerne aber schnell, sehe ich diese Funktion irgendwo anders komm ich in der Regel immer schnell rein :), doch der Anstoss fehlt mir in diesem Fall noch.


Ps: Code bis zur Ausgabe von HTML in der Funktion, evt. hilft es dir bzw. mir?
Code:

function RecentPosts()
{
        global $settings, $txt, $yytitle, $censored, $scripturl, $enable_ubbc, $enable_notification, $menusep, $db_prefix;
        global $cgi, $img, $color, $imagesdir, $realNames, $sc;
        $display = 30;

        // in order to optimize speed, this query gets the ($display * 4)
        // latest messageID's. guessing that that will be enough to cover
        // ($display) topics a user is allowed to see.
        $request = mysql_query("
                SELECT ID_MSG
                FROM {$db_prefix}messages AS m
                WHERE 1
                ORDER BY posterTime DESC
                LIMIT 0, " . ($display * 4)) or database_error(__FILE__, __LINE__);
        $messages = array();
        while ($row = mysql_fetch_array($request))
                $messages[] = $row['ID_MSG'];

        $yytitle = $txt[214];
        template_header();

        if (count($messages))
        {
                $request = mysql_query("
                        SELECT m.smiliesEnabled, m.posterTime, m.ID_MSG, m.subject, m.body, m.ID_TOPIC, t.ID_BOARD, b.name AS bname, c.name AS cname, t.numReplies, m.ID_MEMBER, m2.ID_MEMBER AS ID_FIRST_MEMBER, m.posterName, m2.posterName AS firstPosterName, IFNULL(mem.realName, m.posterName) AS posterDisplayName, IFNULL(mem2.realName, m2.posterName) AS firstPosterDisplayName, b.name AS bName
                        FROM {$db_prefix}messages AS m, {$db_prefix}messages AS m2, {$db_prefix}topics AS t, {$db_prefix}boards AS b, {$db_prefix}categories AS c
                                LEFT JOIN {$db_prefix}members AS mem ON (mem.ID_MEMBER=m.ID_MEMBER)
                                LEFT JOIN {$db_prefix}members AS mem2 ON (mem2.ID_MEMBER=m2.ID_MEMBER)
                        WHERE m.ID_MSG IN (" . implode(',', $messages) . ")
                                AND m2.ID_MSG=t.ID_FIRST_MSG
                                AND t.ID_TOPIC=m.ID_TOPIC
                                AND b.ID_BOARD=t.ID_BOARD
                                AND c.ID_CAT=b.ID_CAT
                        AND (FIND_IN_SET('$settings[7]', c.memberGroups) != 0 OR c.memberGroups='' OR '$settings[7]'='Administrator' OR '$settings[7]'='Global Moderator')
                        ORDER BY m.posterTime DESC
                        LIMIT 0, $display") or database_error(__FILE__, __LINE__);

echo '...

...


Patrick Gotthardt 07.01.2004 15:43

$display = 30;

Wird zu:
$display = (isset($_REQUEST['display'])) ? (int)$_REQUEST['display'] : 30;
if($display <= 0) $display = 30;

Das sollte in etwa das bringen, was du willst... dadurch, dass der Input als Integer gecastet wird sollte es auch nicht allzu schlimm sein, wenn irgendein Heini meint ?display=string eingeben zu müssen. ;)

martin 07.01.2004 15:46

du kannst auf den wert einfach mit $_GET['display'] zugreifen.
das wird aber nur funktionieren, wenn in der php konfiguration (php.ini) das semikolon als trennzeichen eingetragen ist. (arg_seperator oder so ähnlich heisst das da.)
zumindest wenn du das als modifikation veröffentlichen willst, solltest du dich darauf nicht verlassen. wenns nur für dich sein soll - kein problem.

netzopfer 07.01.2004 16:15

Zitat:

Zitat von TheDragonMaster
$display = 30;

Wird zu:
$display = (isset($_REQUEST['display'])) ? (int)$_REQUEST['display'] : 30;
if($display <= 0) $display = 30;

Das sollte in etwa das bringen, was du willst... dadurch, dass der Input als Integer gecastet wird sollte es auch nicht allzu schlimm sein, wenn irgendein Heini meint ?display=string eingeben zu müssen. ;)


Hallo danke erstmal für deine/eure Hilfe:

hab das mal jetzt so:
--
// $display = 30;
$display = (isset($_REQUEST['display'])) ? (int)$_REQUEST['display'] : 20;
if($display <= 0) $display = 20;

eingefügt, kommt aber leider nicht zum gewünschten Ergebniss :(


Überzeugen bitte hier:
--
http://
--

martin 07.01.2004 16:26

lies meinen letzten beitrag. du kannst ds semikolon nicht verwenden.

aber -> http://www.netzopfer.de/index.php?ac...cent&display=5 funktioniert natürlich.

martin 07.01.2004 16:30

aber es funktioniert doch!?!

netzopfer 07.01.2004 16:41

Zitat:

Zitat von martin
aber es funktioniert doch!?!

An sich O.K. wollte die Funktion nur dafür nutzten, ist es so schwer das er das ; nutzen kann?

Philipp Gérard 07.01.2004 17:08

$_SERVER['QUERY_STRING'] exploden, displaywert rausfischen... einfach?

PHP-Code:

$array explode(";",$_SERVER['QUERY_STRING']); 


Patrick Gotthardt 07.01.2004 17:17

@Phillip: Generell schon... nur wie willst du rausfinden, an welcher Stelle das liegt?

@ciruZ: Sorry, das hatte ich übersehen... sowas "dummes" hab ich aber auch noch nie gesehen...

In diesem Fall bräuchte man dann tatsächlich den entsprechenden Abschnitt aus der globalen Datei...

Philipp Gérard 07.01.2004 17:43

regxps?

Patrick Gotthardt 07.01.2004 18:06

Viel zu langsam für sowas.... wir bräuchten nur den entsprechenden Codeabschnitt und dann könnte man auf sowas verzichten.

Philipp Gérard 07.01.2004 18:12

Klar gehts leichter mit dem Originalcode - aber wenn er ihn nunmal nicht findet?

*kopfschüttel*

netzopfer 07.01.2004 18:56

Danke....
 
He Jungs & Mädels,

ich bedank mich für euren Einsatz an der Unterstützung eines PHP-Dummies. Ich bin voll und ganz zufrieden und werde die Funktion auch mit dem & druchsetzen.

Danke...

netzopfer 08.01.2004 06:12

Nein :(


Ach ich weiss ja auch nicht :confused:

Creator 13.01.2004 16:34

Hier der Code abschnitt ausm YaBB SE 1.4 (glaub das war die version).

Hatte diese version noch irgend wo auf der platte und hab schnell nachgeschaut:
PHP-Code:

if(strlen($QUERY_STRING)>0)
{
    
$str = (substr($QUERY_STRING,0,5)=="url=/")?$HTTP_SERVER_VARS["REDIRECT_QUERY_STRING"]:$QUERY_STRING;
    
$query_strings split("[;&]",URLdecode($str));
    foreach (
$query_strings as $tmp)
    {
        if(
preg_match("/^([^=]+)[=](.*)/"$tmp$parts)) {
            
$GLOBALS[$parts[1]] = $parts[2];
        }
    }


Dem code nach zu urteilen wäre die variable die du suchst in: $GLOBALS['display'] zu finden.

Außerdem siehts aus als könnte man beides ; und & verwenden

Creator 13.01.2004 16:45

Zitat:

Zitat von ciruZ
Das $GLOBALS brauchst du nur innerhalb einer Funktion.
echo $GLOBALS['bla'] entspricht ca:
global $bla;
echo $bla;

Das er das so macht nenne ich fatal, da kann man auch gleich register_globals = On machen.

in den neueren versionen ist das sicherlich anders geregelt. hab aber wenig mit dem yabbse am Hut. Gibts ne neuere Version?! egal, aber da is das bestimmt alà $query_string_vars['display'] ?



P.S.:
Die datei hieß querystring.php


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:15 Uhr.

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