"We are back" « oc.at

Eine PHP Frage noch - Bilder aus Ordner anzeigen

Nightstalker 06.08.2006 - 20:48 3412 40
Posts

Nightstalker

ctrl+alt+del
Avatar
Registered: Jan 2002
Location: .^.
Posts: 6707
Naja, ok, schon klar was das tut, nur wo find ich denn nun meine Werte heeeeuuul...

Was ich bisher kapiert hab:

Code: PHP
$galnames = array(); 
das ist mein array für die Galerienamen

Code: PHP
 if ($galerie==""){ 
$verz=opendir ($_SERVER['DOCUMENT_ROOT']."$pfaddir/"); 
while ($files = readdir ($verz)) { 
     if($files!= "." && $files!= ".." )
das liest aus dem Verzeichnis die Ordnernamen in die Variable $files oder?

Code: PHP
$galnames[] = $files; 
in meiner Einfalt habe ich angenommen das würde die Werte aus $files in das Array $galnames übergeben, tut es das auch? Oder muss ich das anders machen?

dann kommt
Code: PHP
sort($galnames);
damit sortiere ich dann den Inhalt des Arrays, darum gehts ja auch.

So meinem Halbwissennach (oder besser 1/8 Wissen) müsste ich nun ein Array haben dass ca. so aussieht
Code: PHP
$galnames = array(Galerie_001, Galerie_002, Galerie_003, Galerie_004, usw.)

Nun könnte ich mit $galnames[0 usw.] den jeweiligen "Teil" des Arrays aufrufen, heist für mich wenn ich $galnames[3] angeben dann müssste die Ausgabe lauten: "Galerie_004". Wenn das bis hierhin stimmt bin ich schonmal froh ;)

So und nun kommt der Teil wo ich dann für jede Galerie Bild + Linktext anzeigen lassen will/muss und da stolper ich immer wieder weil ich nicht kapier wie das eigentlich (also vom Prinzip her) abläuft.

Also wenn ich mir das hier anseh
Code: PHP
if ($galerie==""){ 
$verz=opendir ($_SERVER['DOCUMENT_ROOT']."$pfaddir/"); 
while ($files = readdir ($verz)) { 
     if($files!= "." && $files!= ".." ) { 

        echo "<td width=\"100\" valign=\"top\">"; 
        echo "<a href=\"java script:startPopup1('".$_SERVER['PHP_PARENT'].$sitedir."galleryload.php"."?galerie=".$files."')\"><img src=\"$pfaddir/".$files."/prev.jpg\" width=\"50\" height=\"50\" alt=\"$files\" align=\"top\"></a>" ;  
        echo "<br>"; 
          echo "<a href=\"java script:startPopup1('".$_SERVER['PHP_PARENT'].$sitedir."?galerie=".$files."')\">$files </a>"; 
        echo "</td>"; 

          } 
         
     }
Ist mir klar dass hier das Verzeichnis gelesen wird und das Ergebnis, also der Name in dem Fall, in $files übergeben wird, ich versteh auch dass unten damm it echo usw. die Bilder und Links usw. generiert werden und $files dann immer das jeweilige Verzeichnis angibt. Mir ist aber nicht klar wie und weshalb das nun genau 4mal passiert nämlich sooft wie es Verzeichnisse gibt, ich nehme an das ist dieses "while", das macht ja etwas solange und sooft solange eine "Bedingung" erfüllt ist nur was ist da die Bedingung, ich vermute "if($files!= "." && $files!= ".." )" richtig?

Ok wenn das auch stimmt bin ich noch weiter. Aber jetzt kommts, wie mach ich ihm klar dass er anstelle von $files was ja einfach ist da es innerhalb dieser while schleife hängt und damit bei jedem durchlauf quasi immer den nächsten Wert beinhaltet, in jedem Durchlauf den richtigen Wert aus dem Array nimmt... da wirds mir jetzt nämlich zu hoch...

Wenn ich mir dein Script von vorhin anseh mit dem Bilder array erscheint mir das ja auch recht logisch und plausibel nur ich kanns einfachh nicht auf das was ich brauch anwenden. Ich habs versucht aber es kommen immer irgendwelche Fehler oder es geht zwar die Seite aber er tut nix, ich mach definitiv immer nen Blödsinn.

mh10001

Bloody Newbie
Registered: Jul 2006
Location: BW\Sachsenheim
Posts: 4
Ich habe mir jetzt zwar nicht den kompletten Thread durchgelesen, versuche aber dennoch einmal auf die letzten Posts einzugehen. ;)

[...][...] ich nehme an das ist dieses "while", das macht ja etwas solange und sooft solange eine "Bedingung" erfüllt ist nur was ist da die Bedingung, ich vermute "if($files!= "." && $files!= ".." )" richtig? [...][/QUOTE]
Ersteres stimmt schon einmal, zweiteres nicht ganz. ;)
"while" ist eine Schleife, die so lange durchlaufen wird, bis der in den Klammern ausgegebene Ausdruck "false" ist (oder diese durch "break" abgebrochen wird).
"readdir()" gibt dir den Dateinamen des Nächsten files des Verzeichnishandles aus. Gibt es keine Einträge mehr, so wird "false" zurückgegeben und damit die schleife beendet. ;)

Die folgende if-Bedingung sorgt dafür, dass nur die richtigen Verzeichnisse in das Array aufgenommen werden und "." und ".." ignoriert werden.

Zitat
[...] Aber jetzt kommts, wie mach ich ihm klar dass er anstelle von $files was ja einfach ist da es innerhalb dieser while schleife hängt und damit bei jedem durchlauf quasi immer den nächsten Wert beinhaltet, in jedem Durchlauf den richtigen Wert aus dem Array nimmt... da wirds mir jetzt nämlich zu hoch... [...]

Wenn du innerhalb der Schleife deine "echo"-Anweisungen gegen ein "$galnames[] = $files;" ersetzt, werden die die Werte in dem Array hinterlegt. Dieses kannst du dann normal per "sort()" sortieren.
Anschließend kannst du dieses Array wieder mit Hilfe einer foreach-Schleife ausgeben.

Etwa so:

Code: PHP
foreach($galnames AS $galname)
{
        echo "<td width=\"100\" valign=\"top\">";
        echo "<a href=\"java script:startPopup1('".$_SERVER['PHP_PARENT'].$sitedir."galleryload.php"."?galerie=".$galname."')\"><img src=\"$pfaddir/".galname."/prev.jpg\" width=\"50\" height=\"50\" alt=\"$galname\" align=\"top\"></a>" ; 
        echo "<br>";
        echo "<a href=\"java script:startPopup1('".$_SERVER['PHP_PARENT'].$sitedir."?galerie=".$galname."')\">$galname </a>";
        echo "</td>"; 
}

MfG mh1001

Nightstalker

ctrl+alt+del
Avatar
Registered: Jan 2002
Location: .^.
Posts: 6707
:bash:
das war also mein Fehler?! Das muss in der Schleife stehen...
Ok jetzt weiß ich nur noch nicht wie ich das in dieses ganze If / Else Konstrukt bringe denn das:

Code: PHP
//ROOT mit Galerieordnern auslesen
echo "<table width=\"130\" border=\"0\" cellspacing=\"15\" cellpadding=\"0\" height=\"150\" align=\"left\">";
$galnames = array(); 
if ($galerie==""){
$verz=opendir ($_SERVER['DOCUMENT_ROOT']."$pfaddir/");
while ($files = readdir ($verz)) {
	 if($files!= "." && $files!= ".." ) {
 sort($galnames); 

foreach ($galnames as $galname) { 
          
		echo "<td width=\"100\" valign=\"top\">";
		echo "<a href=\"javascript:startPopup1('".$_SERVER['PHP_PARENT'].$sitedir."galleryload.php"."?galerie=".$galname."')\"><img src=\"$pfaddir/".$galname."/prev.jpg\" width=\"50\" height=\"50\" alt=\"$galname\" align=\"top\"></a>" ; 
		echo "<br>";
	  	echo "<a href=\"javascript:startPopup1('".$_SERVER['PHP_PARENT'].$sitedir."?galerie=".$galname."')\">$galname </a>";
		echo "</td>";

	 }
	 }
	 }
	
echo "</table>"; }

else {

####################### 

//Vars übernehmen
if ($bid == '') {
 $bid = 0;
}
 
//1 Seite zurück
function back($bid) {
	return $bid - 6;
}
 
//1 Seite weiter
function weiter($bid) {
	return $bid + 6;
}

####################### 
 
//Bilder aus Verzeichnis auslesen  
$bilder = array();  
$names = array();  
$dir = opendir($pfad);  
while ($bild = readdir($dir)) {  
    if ($bild != '.' && $bild != '..' && $bild != 'prev.jpg') {  
        //Dateinamen Array  
        $names[] = $bild;  
    } 
} 
sort($names); 

foreach ($names as $index => $bild) { 
        //Bildertitel Array (Bildername ohne Extensions)  
        $titel = explode(".",$bild);  
        $titles[] = $titel[0];  
          
        //Bilder Array (Komplette Imagetags)  
          $image = bildformat($files);  
        $bilder[] = '<img src="thumb.php?src='.$thumbdir.'' . $bild.'&wmax=154&hmax=130&quality=50&bgcol=FFFFFF" class="rahmen">';  
          
        //Bilderpfade  
        $bilder_orig[] = $pfadbild.$bild;  
} 
closedir($dir);
 
//Anzahl der elemente im bilder array zählen
$max = count($bilder)-1;

####################### 

//Ausgabe in Tabellenform   
echo  "<table align=\"left\" width=\"800\" height=\"180\" cellspacing=\"5\" cellpadding=\"1\" border=\"0\"><tr>"; 
for($tmp = $bid; $tmp < $bid+6; $tmp++) {   

    //Grösse der Bilder feststellen   
       
    $files = $_SERVER['DOCUMENT_ROOT']."/".$bilder_orig[$tmp];   
if(is_file($files)) {//Damit nur angezeigt wird wenn es eine Bilddatei ist   
    $image = bildformat($files);   

        //Ausgabe der Bilder   
        echo "<td valign=\"top\" width=\"164\" height=\"89\"><div align=\"left\">";   
        echo "<a href=\"javascript:void(0)\" onClick=\"javascript:bildanzeige('$bilder_orig[$tmp]','$image[0]','$image[1]','$titles[$tmp]')\">";
        echo $bilder[$tmp]."</a>";   
        echo "<br>";   
        echo $titles[$tmp];   
        echo "</div></td>";   
       
unset($image);   
       
} else break;//Damit nur angezeigt wird wenn es eine Bilddatei ist   

} 
echo "</tr>";
####################### //hier gehts weiter im code

Funkt nicht, das gibt zwar keinen Fehler aber auch sonst nix aus, kommt ne leere Seite!? Ich denk mal da hats noch was mit den ganzen Klammern aber wenn kein Fehler kommt ähm ;) Ich stell mich grad sau dum an.
Der erste Teil bis zum 1. # balken ist der um dens grad geht, das danach geht alles.

Luzandro

Here to stay
Avatar
Registered: Mar 2006
Location: 2482
Posts: 708
Ich hab jetzt nur mal die ersten paar Zeilen gelesen, aber die machen schon mal keinen Sinn (Einrückungen angepasst):

Code: PHP
$galnames = array();  
if ($galerie=="") {
  $verz=opendir ($_SERVER['DOCUMENT_ROOT']."$pfaddir/"); 
  while ($files = readdir ($verz)) {
    if($files!= "." && $files!= ".." ) {
      sort($galnames);

      foreach ($galnames as $galname) { 

galnames ist ein leeres Array - und bei jedem Durchlauf der while-Schleife sortierst du dieses leere Array und führst irgendwas für jedes, nicht existierende, Element davon aus (wo die Klammern dann wieder zugehen hab ich nicht geschaut..)

also nochmal ganz langsam was du erreichen willst:
Code: PHP
//galnames array anlegen
$galnames = array();
//solange noch weitere dateien (bzw. ordner) in dem verzeichnis sind:
//hole nächsten dateinamen
while (false !== ($filename = readdir($verz))) {
  if ($filename != "." && $filename != "..") {
    //wenn dateiname nicht "." od "..": füge diesen zu galnames-array hinzu
    $galnames[] = $filename;
    //bezogen auf das ergebnis ist diese syntax gleichbedeutend mit:
    //array_push($galnames, $filename);
  }
}

//nachdem komplett eingelesen: sortiere
sort($galnames);

//für jedes element des sortierten arrays:
foreach ($galnames as $galname) {
  //...
}

wo hast du eigentl. deinen urspr. Code her?

ps: probier mal ein wenig Python, dann machst du vllt. konsistentere Einrückungen und die Verschachtelungen sind offensichtlicher ;)

Nightstalker

ctrl+alt+del
Avatar
Registered: Jan 2002
Location: .^.
Posts: 6707
Hm, ich hatte es schonmal so ähnlich, also die while geschichte geschlossen bevor ich sortiert hab usw. aber dann kam ein Fehler wg. dem else weiter unten im code.

jetzt hab ich es so wie du es geschrieben hast drinn und bekomm:
Parse error: syntax error, unexpected '}' in .... on line 122

edit: hm ursprungscode hab ich mir von ner opensource seite geholt, hab ich zufällig gefunden als ich gesucht hab und dachte damit kann ich was machen, ging ja bisher gut nur jetzt kommen hald so feinheiten wo ich mit meinem nixwissen ansteh ;)
Bearbeitet von Nightstalker am 14.09.2006, 15:22

dio

Here to stay
Registered: Nov 2002
Location: Graz
Posts: 4943
Ich bin zwar selbst ein Freund von "just do it", aber das hier is schon bissl arg. Ohne dir zu nahe treten zu wollen, beschäftige dich doch bitte mit den Basics ;).

Nightstalker

ctrl+alt+del
Avatar
Registered: Jan 2002
Location: .^.
Posts: 6707
Sowas hilft mir auch nicht weiter. Arg is es für mich weil ich leider damit nix am hut hab und es von heut auf morgen nicht lernen kann schon garnicht durch lesen sondern nur durch tun und probieren aber irgendwann is hald schluss. Ich komm hald nicht weiter und darum frag ich um Hilfe, niemand muss mir helfen wenn er nicht will, oder?

Es nutzt mir nix wenn ich noch 10mal was les was ich nicht versteh weil mir einfach die Zusammenhänge nicht klar sind usw. Das geht auch nicht von heut auf morgen. Ich lern hald leichter wenns mir jemand zeigt/erklärt, dann kann ich es auch irgendwie nachvollziehen weil die ganzen Beispiele, Tutorials und Erklärungen sind immer nur so "Fetzen".

Vielleicht hast ja auch einen besseren Tipp für mich wo ich anfangen sollte zu lernen?!
Das Ding da is jedenfalls schon sogut wie fertig.

mh10001

Bloody Newbie
Registered: Jul 2006
Location: BW\Sachsenheim
Posts: 4
Zitat
[...] jetzt hab ich es so wie du es geschrieben hast drinn und bekomm:
Parse error: syntax error, unexpected '}' in .... on line 122 [...]

Wie schaut denn dein kompletter Code nun aus? Was steht in der entsprechenden Zeile bzw. in der darüber?
Hast du evenentuell ein Semiklon vergessen oder eine Klammer zu viel gesetzt? ;)

MfG mh1001

Luzandro

Here to stay
Avatar
Registered: Mar 2006
Location: 2482
Posts: 708
Zitat von Nightstalker
Sowas hilft mir auch nicht weiter. Arg is es für mich weil ich leider damit nix am hut hab und es von heut auf morgen nicht lernen kann schon garnicht durch lesen sondern nur durch tun und probieren aber irgendwann is hald schluss. Ich komm hald nicht weiter und darum frag ich um Hilfe, niemand muss mir helfen wenn er nicht will, oder?

Es nutzt mir nix wenn ich noch 10mal was les was ich nicht versteh weil mir einfach die Zusammenhänge nicht klar sind usw. Das geht auch nicht von heut auf morgen. Ich lern hald leichter wenns mir jemand zeigt/erklärt, dann kann ich es auch irgendwie nachvollziehen weil die ganzen Beispiele, Tutorials und Erklärungen sind immer nur so "Fetzen".

Vielleicht hast ja auch einen besseren Tipp für mich wo ich anfangen sollte zu lernen?!
Das Ding da is jedenfalls schon sogut wie fertig.

Link zu einem guten Tutorial hab ich grad auch nicht, aber mach dich auf jeden Fall mehr mit der Doku vertraut - diese ist eigentl. recht ausführlich und einfach geschrieben, mit etlichen Beispielen dabei. Ein paar deiner Fragen hätten sich damit sofort klären lassen sollen. Probier diese "Fetzen" vorher auch mal "im kleinen" aus, also zB ein kleines Test-Script, das dir bspw. einfach mal deine gewünschten Dateinamen in der richtigen Reihenfolge ausgibt. Wenn du nicht wirklich weißt, was du tust und dann auch gleich noch direkt einen fremden Code editierst, den du nur teilweise verstehst, kriegst du verständlicherweise Schwierigkeiten, wenn es nicht gleich so funktioniert, wie du angenommen hast...
http://at.php.net/manual/de/

Nicht unbedingt als Anfang zum Lernen, aber dennoch ein brauchbares FAQ: http://www.php-faq.de/

Und wie auch im vorigen Post angedeutet: achte etwas mehr auf die Formatierung des Codes - zum Teil stehen deine Änderungen "irgendwo" und es ist auf den ersten Blick nur mehr schwer nachvollziehbar, was jetzt bspw. zu gewissen Schleifen gehört, oder wo diese aufhören - das dürfte auch zu dem Problem mit deinem else geführt haben: "irgendwas passt da nicht, also machen wir halt irgendwo noch eine Klammer dazu"
Ein guter Editor hilft dir dabei auch bzw. zeigt dir auch an, welche Klammern zusammengehören

Nightstalker

ctrl+alt+del
Avatar
Registered: Jan 2002
Location: .^.
Posts: 6707
Jup brauch nen editor da hast du recht, derweilen arbeite ich vorallem mit dem Texteditor ;) Naja und fürs Highlighting nehm ich dann GoLive oder so das hab ich hald zuhaus nicht.

Muss mir mal nen Editor besorgen, gibts auch was brauchbares für Mac?

Hm den ganzen Code mag ich jetzt nicht posten, wer sich das anschauen mag dem kann ichs gern schicken das is einfacher.

Nightstalker

ctrl+alt+del
Avatar
Registered: Jan 2002
Location: .^.
Posts: 6707
ohjaohjaohja ;)

ich habs gefunden... :bash:

war wohl wirklich ein Klammernsalat und weils so lustig war hab ich dummerweise auch noch die Zeile gelöscht wo "$verz" definiert wird, das konnte ja nicht gehen.

Hm wohl wirklich besser mit editor ;) ahja, ich hab jEdit genommen, geht ganz gut, kein riesending mit 1000funktionen aber das highlighting geht gut, erinrückung macht er auch selber und so, das geht schon!

Danke ;)
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz