Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit globalen Variablen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem mit globalen Variablen

    Hallo,

    ich habe folgendes Script, dass die Forumkonfigurationen aus der DB zieht:

    PHP-Code:
    <?php
    error_reporting
    (E_ALL);

    $b_c "SELECT board_name, board_description, max_registration FROM board_config";
    $board_config = new mysql($b_c);

    $result_config $board_config -> select($b_c);
    while(
    $b_config mysql_fetch_assoc($result_config))
    {
    $board_name $b_config['board_name'];
    $board_desc $b_config['board_description'];
    $max_registration $b_config['max_registration'];
    }
    ?>
    Diese binde in ganz am Anfang der Seite ein:

    PHP-Code:
    <?php
    error_reporting
    (E_ALL);
    session_start();

    include(
    'config.inc.php');
    include(
    'includes/class.mysql.php');
    include(
    'includes/function.php');
    include(
    'includes/board_config.php');
    ?>
    Wenn ich sie jedoch hier benutzen will:

    PHP-Code:
    <?php
    if(isset($_POST['save_new_user']))
    {
    //hier steht normaler weise mehr drinne
    if ($max_registration != '0' AND $max_registration >= mysql_num_rows ($result_1)) $error "Die maximale 

    Benutzeranzahl ist erreicht! Zur Zeit sind keine weiteren Anmeldungen m&ouml;glich!"
    ;
    ?>
    Bekomme ich folgende Meldung:

    Code:
    Notice: Undefined variable: max_registration in /home/webpages/lima-city/newwarrior/html/juca/register.php on line 25
    
    Notice: Undefined variable: max_registration in /home/webpages/lima-city/newwarrior/html/juca/register.php on line 25
    Was muss ich jetzt machen, damit ich sie selbst in solchen Sachen benutzten kann und auch in Funktionen ohne sie zu jedesmal mit zu übergeben zu müssen?

    Danke

  • #2
    on line 25
    Das sind ja nicht soo viele Zeilen, poste also bitte mal Zeilen 1 bis ~30 des Skripts.

    Kommentar


    • #3
      PHP-Code:
      <?php
      error_reporting
      (E_ALL);

      if(isset(
      $_POST['save_new_user']))
      {
          
      $error = array();
          
      $sql_1="SELECT username FROM board_user";
          
      $result_1 mysql_query ($sql_1);
          
      $sql="SELECT username FROM board_user WHERE username = '".$_POST['username']."'";
          
      $result mysql_query ($sql);
          if (
      mysql_num_rows ($result) == 1$error[] = "Der Benutzername ist bereits vergeben!";
          if(isset(
      $_POST['avatar']))
          {
              
      $image htmlentities($_POST['avatar']);
              
      $image image$image );
              if(
      $image == 'error')
              {
                  
      $error[] = "Das Avatar darf nicht gr&ouml;&szlig;er als 100px * 100px sein!";
              }
          }
          if (
      $_POST['username'] == ''$error[] = "Bitte geben Sie einen Benutzernamen an!";
          if (
      $_POST['password'] == ''$error[] = "Bitte geben Sie ein Passwort an!";
          if (
      $_POST['passwordw']== ''$error[] = "Bitte geben Sie eine Passwort Wdh. an!";
          if (
      $_POST['email']== ''$error[] = "Bitte geben Sie eine E-Mailadresse an!";
          if (
      $max_registration != '0' AND $max_registration >= mysql_num_rows ($result_1)) $error "Die maximale 

      Benutzeranzahl ist erreicht! Zur Zeit sind keine weiteren Anmeldungen m&ouml;glich!"
      ;
          if (!
      preg_match('/^[a-zA-Z0-9]+$/',$_POST['username'])) $error[] = "Der Benutzername darf keine Sonderzeichen 

      enthalten!"
      ;
          if (
      $_POST['passwordw']!=$_POST['password']) $error[] = "Die Passwort Wdh. muss mit dem Passwort übereinstimmen!";
      Ich weiß^^
      Teil des Codes ist grauenhaft, bin auch dabei die Sachen zu überarbeiten :wink:

      Kommentar


      • #4
        Nanu? Da vermisse ich jetzt aber das include

        Kommentar


        • #5
          Ups, das ist in der Index, wo alle anderen Datein, jede nach Aufruf includet werden mom:

          PHP-Code:
          <?php
          error_reporting
          (E_ALL);
          session_start();

          include(
          'config.inc.php');
          include(
          'includes/class.mysql.php');
          include(
          'includes/function.php');
          include(
          'includes/board_config.php');
          ?>
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
                 "http://www.w3.org/TR/html4/loose.dtd">
          <html>
          <head>
          <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" >
          <meta http-equiv="Content-Language" content="de" >
          <meta name="author" content="Malte Kiefer">
          <meta name="publisher" content="Malte Kiefer" >
          <meta name="copyright" content="Malte Kiefer" >
          <title><?php echo $board_name.' » '.$board_desc;?></title>
          <link rel="stylesheet" type="text/css" href="style/clear_silver.css">
          <script type="text/javascript" language="javascript" src="includes/j.js"></script>
          </head>
          <body>
          <?php
          if(isset($_GET['board']))
          {
              switch(
          $_GET['board'])
              {
                  case 
          'register';
                      include(
          'menu.php');
                      include(
          'register.php');
                      include(
          'footer.php');
                  break;
          In der board_config.php stehen die Config drinne.

          Kommentar


          • #6
            Ah so. Na das ist ja auch gut so, ich wollt nur nochmal nachfragen

            edit: 12:01 noch was geändert + Fehlerkorrektur, sorry.
            Änder board_config.php bitte mal so ab:
            PHP-Code:
            <?php
            error_reporting
            (E_ALL);
            ini_set('display_errors'true);

            $b_c "SELECT board_name, board_description, max_registration FROM board_config";
            $board_config = new mysql($b_c);

            $result_config $board_config -> select($b_c);
            $b_config mysql_fetch_assoc($result_config)

            if (!
            $b_config || !isset($b_config['board_name'],$b_config['board_description'],$b_config['max_registration'])) {
              echo 
            'Fehler beim Auslesen der Konfiguration';
              
            var_dump($b_config);
              die();
            }

            $board_name $b_config['board_name'];
            $board_desc $b_config['board_description'];
            $max_registration $b_config['max_registration'];
            ?>

            Wenn das nichts gebracht hat, dann bitte in der index.php noch etwas einfügen
            PHP-Code:
            <?php
            error_reporting
            (E_ALL);
            session_start();

            include(
            'config.inc.php');
            include(
            'includes/class.mysql.php');
            include(
            'includes/function.php');
            include(
            'includes/board_config.php');
            if ( !isset(
            $board_name,$board_desc,$max_registration)) {
              die(
            'Sehr seltsam');
            }
            ?>
            und wenn dabei immer noch nichts rauskommt, in register.php am Anfang noch
            PHP-Code:
            <?php
            echo "<pre>included files: ";
            print_r(get_included_files());
            echo 
            "</pre>";
            ?>
            einfügen und prüfen, ob da irgendwo board_config.php ausgegeben wird.

            Zitat von noBody
            case 'register';
            Wieder etwas gelernt, man kann auch ein ; nach der case Anweisung schreiben.

            Kommentar


            • #7
              Habe meinen Fehler gefunden.
              Zwei [] vergessen

              Kommentar


              • #8
                Ah, hat also das ini_set('display_errors', true); noch gefehlt, um die Meldungen wirklich anzuzeigen?

                Kommentar


                • #9
                  ja irgendwie ja.
                  Noch ne Frage, muss ich die Sachen jetzt auch wieder mit schicken wennich ne Funktion aufrufe oder sind sie jetzt wirklich Global, dass ich sie auch ohne zusätzliche übergabe mit arbeiten kann?

                  Kommentar


                  • #10
                    Wenn man in Funktionen auf Variablen aus dem globalen Sichtbarkeitsbereich zugreifen will, muss man sie entweder per global "importieren" oder über $GLOBALS darauf zugreifen.

                    PHP-Code:
                    <?php
                    $x 
                    'hallo';
                    function 
                    irgendwas() {
                      echo 
                    $GLOBALS['x'];
                    }
                    ?>
                    mehr dazu unter http://www.php.net/manual/de/languag...bles.scope.php

                    Kommentar

                    Lädt...
                    X