Variable vergisst Inhalt

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

  • Variable vergisst Inhalt

    Hallo

    Zur Zeit arbeite ich an einem PHP-Script für eine Bildergalerie. Das Script steht unten. Das Script ist leider etwas lang, aber nur so kann ich mein Problem erklären.

    Zuerst wird der Titel ausgeben also z. Bsp.: Fotogalerie von Max Mustermann. Das wird aus einer txt-Datei ausgelesen.
    Dann erfolgt die Bildausgabe, also beim Öffnen der Galerie, wird Bild 01.jpg angezeigt.
    Innerhalb dieser Bildausgabe habe ich die Abfrageroutinen für die Buttons eingebaut in diesem Fall erstmal nur für den Button "Erstes". Durch dessen Anklicken wird das erste Bild angezeigt, also ebenfalls 01.jpg. Das Problem ist, dass in dieser If-Abfrage die Variable $path ihren Inhalt verliert. Ich habe versucht, dies mit einer Session-Variable zu beheben, aber es funktioniert nicht. In $path steckt der Nachname des Galeriemitgliedes in diesem Beispiel "mustermann", welcher der Name des Ordners ist, in dem die Bilder liegen.
    Alles andere funktioniert so wie es soll.

    Hat jemand hier eine Idee, wie es zu diesem Problem kommt und wie man es lösen könnte? Das wäre mir sehr wichtig.

    Mit freundlichen Grüßen

    david2



    PHP-Code:
    <?

    global $cfile;
    //$file=$_SESSION['xfile'];
    //$path=$_SESSION['xpath'];
    $xstart=$_SESSION['xxstart'];
     
    //-----------------------------------------------------------------------
    //-------- Anzeige von 01.jpg beim Oeffnen der Galerie -----
    //-----------------------------------------------------------------------
         
         //$path=$pfad;

    if (($xstart<>1)||($file==""))   
    {    
         $file="01.jpg";
         echo"FFFile=$file";
         $text=$path."/titel.txt";
         
         $beschr=$path."/01.txt";
         
         $xstart=1;  
    }    
         
         
       // $_SESSION['xpath'] = $path; 
       //echo"123ABC=$pfad;;;$path";

    //---------------------------------------------------------------------------------------//
    //-------------Anzeige des Titels der Fotogalerie --- BEIDE Routinen ------//
    //---------------------------------------------------------------------------------------//

         //if ($anzeige != "")
         // {
           $fp =fopen($path."/titel.txt","r");
           
              if ($fp)
              {
                while (!feof($fp))
                 {
                  $zeile=fgets($fp,100);
                  echo"<font size=\"4\" color=\"#cc3300\"><p><b><u>$zeile</u></b><p>";
                   
                 }
               fclose ($fp); 
              }
          //}
       
    //---------------------------------------------------------//
    //------ Die Bildausgabe für BEIDE Routinen -----//
    //---------------------------------------------------------//

    if ($xstart==1)
    {
     $cut= strtok($file,".");  //string dateiendung von der jpg-Datei (Bild-Datei) abschneiden ab punkt 
     echo "2Path=$path";
     $anzeige=$cut;
     
     
           if ($submit=="Erstes")
               {
                $file="01";
                echo "4Path=$path";    
               }
     
     
     echo "<table align=\"center\">";                                           
     echo "<tr><td  align=\"center\"><img src=$path/$file></td></tr>";     
     echo "</table>";
     
     }
     
     //------------------------------------------------------//
     //-------- Anziege der Bildunterschrift ----------//
     //------------------------------------------------------//
     
     if ($anzeige != "")
          {
           $fp =fopen("$path/$anzeige.txt","r");
             
              if ($fp)
               {
                 while (!feof($fp))
                  {
                   $zeile=fgets($fp,100);
                   echo"<font size=\"3\" color=\"#000000\"><p>$zeile<p>";
                   
                  }
                fclose ($fp); 
               }
               else
                { 
                 echo"<font size=\"3\" color=\"#000000\"><p>$zeile<br>";
                 echo"<font size=\"3\" color=\"#000000\">Keine Angaben oder kein Bild vorhanden.";     
                }  
          } 

    $_SESSION['xxstart']=$xstart;

    //---------------------------------------------------------//
    //------------ HTML-Formular für die Buttons -----//
    //---------------------------------------------------------//

    echo" 

    <form action='$PHP_SELF' method='_self'>

    <Table><tr>
      <td align='right' width='50'><input type='submit' name='submit' value='Erstes'></td>
      <!--<td align='center' width='55'><input type='submit' name='submit' value='Zurueck'></td> -->
      <td width='600'></td>
      <!--<td align='center' width='55'><input type='submit' name='submit' value='Weiter'></td>-->
      <!--<td align='left' width='50'><input type='submit' name='submit' value='Letztes'></td> -->
    </tr></Table>
    </form>
    ";
    ?>
    Zuletzt geändert von Kropff; 10.04.2008, 08:51.

  • #2
    bitte gescheite code tags!! (dann liest das vielleicht einer wirklich)
    dann register_globals auf off! ( ist nicht umsonst empfohlen)

    und in welchem if-block geht $path verloren??
    Zuletzt geändert von frodenius; 10.04.2008, 08:40.
    blllubb

    Kommentar


    • #3
      Ich habe versucht, dies mit einer Session-Variable zu beheben, aber es funktioniert nicht
      Wenn du nicht in der php.ini session_autostart() auf ON hat, wird die Sache mit den Sessions ohne explizites session_start() wohl nix werden
      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

      Kommentar


      • #4
        Hallo

        Danke für die Antworten. Den session() - Befehl habe ich ganz oben, noch vor dem ersten HTML-Tag gesetzt.

        <?
        session();
        ?>
        <HTML>
        ...

        Und zu der zweiten Frage in folgender IF-Schleife vergisst die Variable $path ihren Inhalt

        PHP-Code:
        if ($xstart==1)
        {

         
        $cutstrtok($file,".");  //string dateiendung von der jpg-Datei (Bild-Datei) abschneiden ab punkt 
         
        echo "2Path=$path";
         
        $anzeige=$cut;
         
         

               if (
        $submit=="Erstes")
                   {
                    
        $file="01";
                    echo 
        "4Path=$path";    
                   }
         
         

         echo 
        "<table align=\"center\">";                                           
         echo 
        "<tr><td  align=\"center\"><img src=$path/$file></td></tr>";     
         echo 
        "</table>";
         
         } 
        Ich hoffe, dass jemand hier mir helfen kann.

        Mit freundlichen Grüßen

        david2
        Zuletzt geändert von david2; 10.04.2008, 21:01.

        Kommentar


        • #5
          Und zu der zweiten Frage in folgender IF-Schleife vergisst die Variable $path ihren Inhalt
          es gibt keine if-schleifen. welche if-bedingung meinst du? die erste oder die zweite? ich rate mal:
          PHP-Code:
          if (!empty($_POST['submit'])) 
          und bitte gewöhn dir an, ohne diese anführungszeichen zu arbeiten. ... und ohne layout-tabellen und ohne uralte attribute zur optischen auszeichnung.

          gruß
          peter
          Zuletzt geändert von Kropff; 10.04.2008, 21:16.
          Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
          Meine Seite

          Kommentar


          • #6
            Hallo Kropff

            Ich meine diese If - Bedingung

            PHP-Code:
                  if ($submit=="Erstes")  //Übrigens, diese Abfrage funktioniert auch!
                       
            {
                        
            $file="01";
                        echo 
            "4Path=$path";    
                       } 
            P.S. Wenn Sie mit uralten Attributen das
            //---------------//
            //--- Blabla ---//
            //---------------//
            meinen, das mache ich nur zur Übersichtlichkeit des Quelltextes quasi eine Art Modularisierung.

            Und falls Sie mit Layout-Tabellen das

            echo "<table align=\"center\">";
            echo "<tr><td align=\"center\"><img src=$path/$file></td></tr>";
            echo "</table>

            meinen, das mache ich, weil ich im Rahmen der HTML-Programmierung gelernt habe und auch die Erfahrung gemacht habe, dass man mit Tabellen die Seitenoptik am besten im Griff hat.

            Mit freundlichen Grüßen

            david2
            Zuletzt geändert von david2; 10.04.2008, 21:33.

            Kommentar


            • #7
              PHP-Code:
              if ($_POST['submit'] == 'Erstes'
              siehe auch register_globals
              Was sind Layout-Tabellen
              offenbar das, was du machst. ich rate aber.
              und "uralte Attribute zur optischen Auszeichnung"
              PHP-Code:
              echo "<table align=\"center\">"
              das ist veraltet. keine attribute mehr zur optischen auszeichnung. dafür nimmt man css.

              gruß
              peter
              Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
              Meine Seite

              Kommentar


              • #8
                Hallo Kropf

                Falls Sie meinten durch

                PHP-Code:
                if ($_POST['submit'] == 'Erstes'
                löst sich das Problem mit dem Vergessen, ich habe es ausprobiert und es funktioniert nicht.
                Ich weiß dass PHP-Programmierung etwas anders ist normale Programmierung also etwa C oder Delphi, vielleicht übersehe ich dadurch etwas.

                MFG

                david2
                Zuletzt geändert von david2; 10.04.2008, 22:00.

                Kommentar


                • #9
                  ich habe es ausprobiert und es funktioniert nicht.
                  dann betreib mal ein vernünftiges debugging

                  peter
                  Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                  Meine Seite

                  Kommentar


                  • #10
                    Danke für die Antworten. Den session() - Befehl habe ich ganz oben, noch vor dem ersten HTML-Tag gesetzt.
                    Ich hoffe für dich, dass das Teil in deinem Originalcode session_start() heisst. Sonst ist nicht viel mit Sessions
                    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                    Kommentar


                    • #11
                      Hallo

                      Leider habe ich immernoch das Problem, dass eine Variabel plötzlich und "unerklärlich" ihren Inhalt scheinbar vergisst. Deshalb stelle ich hier nochmal den aktuellen PHP-Quelltext ein.
                      Es wäre nett, wenn jemand sich diesen Quelltext mal ansehen könnte, ob er konsistent ist und ob die if-Abfragen logisch richtig angeordnet sind. Vielleicht steckt mein Fehler in der logischen Abfolge.
                      Ich werde die if-Abfrage, in der die Variable ihren Inhalt vergisst besonders markieren.

                      Mit freundlichen Grüßen

                      david2

                      PHP-Code:
                      <?
                      session_start();     
                      ?>

                      <html>
                      <head>
                      <title>Bildanzeige</title>

                      <body bgcolor="#cccccc">
                      <center>

                      <?php

                      error_reporting
                      (E_ALL);
                      ini_set('register_globals'0);

                      global 
                      $path;
                      global 
                      $xstart;
                      global 
                      $file;
                      global 
                      $submit;
                      global 
                      $zeile;
                      global 
                      $cfile;
                      [COLOR=limegreen]$_SESSION["xpath"]=$path;[/COLOR]
                      //dies ist die problematische Variable
                      PHP-Code:
                      //-------------------------------------------------------------------------------------//
                      //-------- Vorraussetzungen für die Anzeige von 01.jpg beim Oeffnen der Galerie -------//
                      //-------------------------------------------------------------------------------------//

                      if (($xstart<>1)&&($file==""))   
                      {    
                           
                      $file="01.jpg";
                           
                           
                      $anzeige="01";
                           
                           
                      $xstart=1;
                      }    
                       
                      //-------------------------------------------------------------
                      //------------------------------------------------------------- 
                      [COLOR=limegreen]if ($submit=="Erstes") //hier "fehlt" in $path (oben dick markiert) der Inhalt
                      {
                      $file="01.jpg";
                      }
                      [/COLOR]
                      PHP-Code:

                      //--------------------------------------------------------------------------------------------------//
                      //-------------- Variablen-Vorbereitungen für die Bildausgabe, wenn ein Bild angeklickt wurde ------//
                      //--------------------------------------------------------------------------------------------------//

                      if (($xstart==1) || ($submit==""))
                      {
                      $cutstrtok($file,".");  //string dateiendung von der jpg-Datei (Bild-Datei) abschneiden ab punkt 
                       
                      $anzeige=$cut;
                      }

                      //---------------------------------------------------------------------------------------//
                      //-------------Anzeige des Titels der Fotogalerie --- BEIDE Routinen --------------------//
                      //---------------------------------------------------------------------------------------//

                          
                      if ($path!="");
                           
                      //if ($anzeige != "")
                           
                      {
                          
                      $fp =@fopen($path."/titel.txt","r");
                           
                                if (
                      $fp)
                                {
                                  while (!
                      feof($fp))
                                   {
                                    
                      $zeile=fgets($fp,100);
                                    echo
                      "<font size=\"4\" color=\"#cc3300\"><p><b><u>$zeile</u></b><p>";
                                     
                                   }
                                 
                      fclose ($fp); 
                                }
                                
                                 else
                                  { 
                                   echo
                      "<font size=\"3\" color=\"#000000\"><p>$zeile<br>";
                                   echo
                      "<font size=\"4\" color=\"#cc3300\"><p><b><u>Fotogalerie von Maxi Mustermann</u></b><p>";     
                                  }
                            }

                      //---------------------------------------------------
                      //------ Die Bildausgabe für BEIDE Routinen ---------
                      //---------------------------------------------------
                       
                       
                      echo "<table align=\"center\">";                                           
                       echo 
                      "<tr><td  align=\"center\"><img src=$path/$file></td></tr>";     
                       echo 
                      "</table>";

                      //--------------------------------------------------------------------------------------------------//
                      //------ Auslesen der Textdatei zur Anziege der Bildunterschrift wenn in Textdatei vorhanden -------//
                      //----------------------------------- Auslesen für BEIDE Routinen ----------------------------------//
                      //--------------------------------------------------------------------------------------------------//
                           
                           
                      if ($path!="");
                           
                      //if ($anzeige != "")
                           
                      {
                             
                      $fp =@fopen("$path/$anzeige.txt","r");
                               
                                if (
                      $fp)
                                 {
                                   while (!
                      feof($fp))
                                    {
                                     
                      $zeile=fgets($fp,100);
                                     echo
                      "<font size=\"3\" color=\"#000000\"><p>$zeile<p>";
                                     
                                    }
                                  
                      fclose ($fp); 
                                 }
                                 else
                                  { 
                                   echo
                      "<font size=\"3\" color=\"#000000\"><p>$zeile<br>";
                                   echo
                      "<font size=\"3\" color=\"#000000\">Keine Angaben oder kein Bild vorhanden.";     
                                  }
                          }  

                      .....


                      echo
                      "

                      <form action='
                      $PHP_SELF' method='_self'>

                      <Table><tr>
                        <td align='right' width='50'><input type='submit' name='submit' value='Erstes'></td>
                         </tr></Table>

                      </form>

                      "
                      ;
                          
                      ?>
                      </center>
                      </body>
                      </html> 
                      Zuletzt geändert von david2; 21.04.2008, 20:19.

                      Kommentar


                      • #12
                        woher kommt denn dein $path?
                        schonmal print_r($_POST) bzw. $_GET angeschaut?

                        das sieht sehr verdächtig aus:
                        in dem formular ist nur ein <input> ??
                        method _self ist mir auch neu


                        PHP-Code:
                        <form action='$PHP_SELF' method='_self'>

                        <
                        Table><tr>
                          <
                        td align='right' width='50'><input type='submit' name='submit' value='Erstes'></td>
                           </
                        tr></Table>

                        </
                        form

                        Kommentar


                        • #13
                          Das Fenster, welches auf diesem PHP-Script basiert, wird durch Klick auf einen Link aufgerufen. Bei diesem Aufruf wird die $path-Variable mitgeliefert.

                          Das seltsame, und das macht mich ziemlich verrückt, ist, dass die Variable nur in der hellgrün markierten if-Abfrage leer ist. Ansonsten funktioniert alles so wie es soll. Daher denke ich, dass das Problem in der logischen Anordnung der if-Abfragen liegt.
                          Zuletzt geändert von david2; 21.04.2008, 20:36.

                          Kommentar


                          • #14
                            ich wette du würdest den fehler finden, wenn du dieses
                            global zeug mal aus den weg räumen würdest!


                            [...]dass die Variable nur in der hellgrün markierten if-Abfrage leer ist.
                            danach ist $path dann wieder nicht leer oder was?

                            überleg mal was genau passiert wenn du auf deinen submit button drückst
                            du solltest, wie dir schon vorgeschlagen, einfach mal ordentlich debuggen
                            und meiner meinung nach auch mal die globals beseitigen ^^

                            Kommentar


                            • #15
                              Haste dein error_reporting auf E_ALL stehen?

                              Kommentar

                              Lädt...
                              X