PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   PHP Developer Forum (https://www.php-resource.de/forum/php-developer-forum/)
-   -   Variable vergisst Inhalt (https://www.php-resource.de/forum/php-developer-forum/91321-variable-vergisst-inhalt.html)

david2 10-04-2008 01:49

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)
{
 
$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>";
 
 }
 
 
//------------------------------------------------------//
 //-------- 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>
"
;
?>


frodenius 10-04-2008 08:38

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??

jahlives 10-04-2008 10:19

Zitat:

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 :D

david2 10-04-2008 20:49

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

Kropff 10-04-2008 21:13

Zitat:

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

david2 10-04-2008 21:23

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

Kropff 10-04-2008 21:32

PHP-Code:

if ($_POST['submit'] == 'Erstes'

siehe auch register_globals
Zitat:

Was sind Layout-Tabellen
offenbar das, was du machst. ich rate aber. :)
Zitat:

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

david2 10-04-2008 21:36

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

Kropff 11-04-2008 09:17

Zitat:

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

peter

jahlives 11-04-2008 09:24

Zitat:

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 ;)

david2 21-04-2008 19:56

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;

$_SESSION["xpath"]=$path;
//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;
}    
 
//-------------------------------------------------------------
//------------------------------------------------------------- 

if ($submit=="Erstes") //hier "fehlt" in $path (oben dick markiert) der Inhalt
{
$file="01.jpg";
}
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> 


BugBite 21-04-2008 20:28

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


david2 21-04-2008 20:33

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.

BugBite 21-04-2008 20:51

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


Zitat:

[...]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 ^^

TobiaZ 21-04-2008 20:59

Haste dein error_reporting auf E_ALL stehen?


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:10 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG