ThWboard Support-Forum (Archiv)

Ort: / Boardübersicht / XPortal Diskussion / Neues Variablensystem


Seite 1 von 1

Apfelkorn schrieb am 14.09.2002 um 15:11 Uhr

Nunja, da ich euch nicht langweilen möchte poste ich hier einfach mal den Quellcode des neuen Variablensystems, das vollkommene Kompatibilität mit dem neuen "register-globals"-standard konform ist und gleichermassen mit älteren php-standard-installationen.
Ausserdem gibt es den Parameter $location, in dem man wie in der php.ini die Parse-Reihenfolge bestimmen kann, aber schaut selbst:

function getVar($sVarName, $location)
{
   global $aDB, $oDB;

   $bFound = NULL;
   $sValue = NULL;

   for( $loop = 0 ; $loop < strlen($location) ; $loop++ )
   {
      if( $location[$loop] == 'G' ) // GET
      {
         if( isset( $_GET[$sVarName] ) )
         {
            $bFound = true;
            $sValue = $_GET[$sVarName];
         }
      }
      else if( $location[$loop] == 'P' ) // POST
      {
         if( isset( $_POST[$sVarName] ) )
         {
            $bFound = true;
            $sValue = $_POST[$sVarName];
         }
      }
      else if( $location[$loop] == 'C' ) // COOKIE
      {
         if( isset( $_COOKIE[$sVarName] ) )
         {
            $bFound = true;
            $sValue = $_COOKIE[$sVarName];
         }
      }
      else if( $location[$loop] == 'F' ) // FILES
      {
         if( isset( $_FILES[$sVarName] ) )
         {
            $bFound = true;
            $sValue = $_FILES[$sVarName];
         }
      }
      else if( $location[$loop] == 'S' ) // SERVER
      {
         if( isset( $_SERVER[$sVarName] ) )
         {
            $bFound = true;
            $sValue = $_SERVER[$sVarName];
         }
      }
      else if( $location[$loop] == 'E' ) // ENV
      {
         if( isset( $_ENV[$sVarName] ) )
         {
            $bFound = true;
            $sValue = $_ENV[$sVarName];
         }
         else if ( getenv($sVarName) ) // Some servers probably have ENV-Parsing deactivated...
         {
            $bFound = true;
            $sValue = getenv($sVarName);
         }
      }
      else if( $location[$loop] == 'D' ) // DATABASE
      {
         list( $sRegister, $sVar ) = explode( "/", $sVarName );
         $rValue = $oDB->Query( 'SELECT Value
                                 FROM   pxp_' . $aDB['key'] . '_config
                                 WHERE  register=\'' . $sRegister . '\' && name=\'' . $sVar . '\'' );

         if( $oDB->NumRows( $rValue ) )
         {
            $bFound = true;
            $sValue = $oDB->Result( $rValue, 0, 0 );
         }
      }
   }

   if(!$bFound)
   {
      script_error('Warning: Variable "' . $sVarName . '" not found in ' . $location . '.', ERR_WARNING);
      return NULL;
   }

   return $sValue;
}



EDIT: Fehler in der Implementierung: in_array ist case-sensitive, und daher nicht einzusetzen. Code geändert in isset().

dp schrieb am 30.10.2002 um 19:29 Uhr

hier könnte man übrigens sinnvollerweise gleich noch die slashes strippen (je nach magic_quotes einstellung).

Apfelkorn schrieb am 31.10.2002 um 19:56 Uhr

genauer?

Adrian schrieb am 31.10.2002 um 20:11 Uhr

Warum nicht direkt die $_* verwenden?

Oder für jede Variable im Script das hier schreiben:

if(isset($_POST['variable'])) $variable=$_POST['variable']; else $variable=false;

dp schrieb am 31.10.2002 um 23:33 Uhr

Apfelkorn postete
genauer?


je nach get_magic_quotes_gpc() sind get/put/cookie daten espaced. also \" statt ", das ist aber konfigurationsabhängig, deswegen sollte man sicherstellen, dass unabhängig von der konfiguration die daten im gleichen format vorliegen. also entweder espaced oder nicht.

http://www.php.net/manual/en/function.get-magic-quotes-gpc.php

Apfelkorn schrieb am 01.11.2002 um 18:46 Uhr

@Adrian: Weil du hier eine Parse-Reihenfolge hast, d.h., wenn er die Variable weder in Post noch in Get findet, wird sie aus den Cookies ausgelesen.

@Paul: Ahhh, ja, kann man machen. Was ist "richtiger"? Mit Slashes oder ohne?

dp schrieb am 02.11.2002 um 18:17 Uhr

ist egal, nur musst du dich entscheiden. ich bevorzuge die daten innerhalb des scripts korrekt vorliegen zu haben d.h. nicht escaped. aber nicht vergessen, dass man dann beim inserten in die db escapen muss.

Adrian schrieb am 02.11.2002 um 18:19 Uhr

Darth Paul postete
ist egal, nur musst du dich entscheiden. ich bevorzuge die daten innerhalb des scripts korrekt vorliegen zu haben d.h. nicht escaped. aber nicht vergessen, dass man dann beim inserten in die db escapen muss.


ist auch sinnvoller

Seite 1 von 1