Variable per Klick ändern

Nicht auch im Sinne von noch was anderes ;)

$file wird hierbei erzeugt foreach($files as $file) ...; und in jedem Durchlauf wird ein Element aus dem Array $files in $file gespeichert.


Ich denke ein kleiner Grundkurs PHP für die gängigen Sachen wäre seeeeehr hilfreich.
 
Zuletzt bearbeitet:
Auch wenn ich $file = array($files); rausnehme, kommt das gleiche Ergebnis dabei raus, sowohl mit 'if' als auch ohne.

Der Fehler muss also irgendwo anders sein.

Wie würdest du mir empfehlen, PHP zu lernen? Auch mit einem Buch?
 
Danke für die Links. Schattenbaum.net hatte ich mir schon angeschaut, einiges war aber ganz schön kompliziert. Werde mir danach mal http://tut.php-quake.net/de/ angucken, sieht ja viel versprechend und ausführlich aus.

EDIT:

Ich würde mich freuen, wenn du da nochmal drüber gucken könntest, ich 4 Datein in den Ordner habe aber nur 2 in der Array bekomme. Wahrscheinlich kommt dann auch der Fehler mit der if-Abfrage. In Sprachen habe ich es nochmal unterteilelt, damit beim englischen der Monat am anfang steht.

PHP:
 <?php    
$dir      = 'content/de/';
$files     = scandir($dir); 

foreach($files as $file)
  {
    $zeit = filemtime($file);
	$zeiten[] = $zeit;  // ... und in neuem Array speichern
  }
  
$timestamp = max($zeiten);
if($_GET['lang'] == "en")
 {
  $datum_en = date("m.d.Y",$timestamp);
$uhrzeit = date("H:i",$timestamp);
echo "Letzte Aktualisierung: ", $datum_en," - ",$uhrzeit," Uhr";
 } 
  else 
 { 
  $datum_de = date("d.m.Y",$timestamp);
$uhrzeit = date("H:i",$timestamp);
echo "Letzte Aktualisierung: ", $datum_de," - ",$uhrzeit," Uhr";
 }

?>

Nur eines würde mich noch interessieren:
Wie kann ich bei $dir = 'content/de/'; mehrere Quellen angeben, oder am besten alles was noch auf dem Server bzw. Root (auch Datein die z.B. bei root/blub/mimi.txt) ?
 
Zuletzt bearbeitet:
Die if-Anweisung selbst arbeitet korrekt. Du hattest mit der Anweisung 4 mal die Ausgabe
Letzte Änderung der Datei:
Ohne die Anweisung hattest du ebenfalls diese 4 Ausgaben, zusätzlich aber natürlich auch zwei zusätzliche Ausgaben für "." und "..". D.h. die if-Anweisung fängt die Punkte korrekt ab, in den übrigen 4 Ausgaben steht nichts. Warum das so ist, musst du jetzt herausfinden.


Ist im Grunde ganz einfach: in der Variablen $zeit steht nichts (du bekommst ja keine Zeit angezeigt). Die Variable bekommst du über $zeit = filemtime($file), und $file wiederum aus dem Array $files. Und das Array $files bekommst du über die Funktion scandir.

Also musst du der Reihe nach abarbeiten, was in den einzelnen Variablen/Arrays steht um zu sehen, warum du keine Ausgabe bekommst/wo der Fehler ist.


Deine erste Anweisung ist $files = scandir($dir);, also sollten in $files deine Dateinamen stehen. Lass dir $files einfach in einer foreach-Schleife* mit echo ausgeben um zu sehen, ob da wirklich Dateinamen drinstehen (und ob es die sind, die du erwartest).

Wenn das korrekt ist, lässt du dir als nächstes mit echo filemtime($file) wieder für jedes Element im Array das Änderungsdatum ausgeben.

Wenn das ok ist, nimmst du das Array $zeiten und lässt dir wieder in einer Schleife ausgeben, ob dort die ganzen Zeiten drinstehen, die du mit filemtime($file) bekommst.

usw. usf.


Ich vermute, dass der Fehler bei scandir liegt, und gar keine Dateinamen drinstehen. Denn andernfalls müsste dein $zeit (bzw. in deiner aktuellesten Version $datum_xx) zumindest irgendwas ausgeben und nicht gar nichts.


-----



Wenn du mehrere Verzeichnisse auslesen willst, müsstest du das auch wieder mit einer Schleife machen. D.h. mit scandir das Hauptverzeichnis auslesen, damit du die Unterordner bekommst (werden wie gehabt in einem Array gespeichert), und die Unterordner grast du dann wiederum mit scandir in einer Schleife ab.

Alternativ, wenn die Ordnernamen fest sind und sich nicht mehr ändern/keine neuen dazukommen, kannst du auch händisch die Ordnernamen in einem Array speichern $array = array("Ordner1", "Ordner2", ...) und die Ordner in diesem Array dann in einer Schleife mit scandir abarbeiten.


-----



* nur zum Testen kannst du dir ein Array auch einfach mit print_r($array) ausgeben lassen, dann sparst du dir die Codeschreiberei mit der foreach-Schleife.
 
Zuletzt bearbeitet:
Also, ich habe erst einmal $files abgefragt

Code:
Array ( [0] => . [1] => .. [2] => home.txt [3] => news.txt [4] => news_messe.txt [5] => newsbox.html )
=> funktioniert

Wenn ich mir aus der foreach $file ausgeben lasse kommt auch was gutes bei raus.
Code:
.
..
home.txt
news.txt
news_messe.txt
 newsbox.html

Sobald ich mir die $zeit anzeigen lasse, stimmt etwas nicht
Code:
Zeit: 1272472660
Zeit: 1272135623
Zeit:
Zeit:
Zeit:
Zeit:

Daher schließe ich, dass bei dem
Code:
    $zeit = filemtime($file);
irgendwas nicht stimmen kann
 
Kann ich hier leider nicht nachvollziehen.

Probier das ganze erstmal ohne Array mit nur einer Datei, bspw. ob
PHP:
echo filemtime("datei1.abc")
überhaupt korrekt funktioniert. Dann mach dir mal manuell ein Array
PHP:
$files = array("datei1.abc", "datei2.xyz", ...)
und teste das dann in einer Schleife.

Du musst dich halt nach und nach zum Fehler vortasten; überall wo du Variablen erzeugst/Daten einliest usw. sind Ansatzpunkte, wo was schiefgehen kann.

Quasi jede Zeile nach der anderen abarbeiten.
 
Ich hab das Problem. (JA, ich bin stolz auf mich:D)

Heute in der Schule (Biounterricht), habe ich mich einfach mal in das Programm gedacht und alles auf einen Zettel geschrieben, was ich habe, was ich bekomme und wohin mich das führt.
Dann habe ich mich gefragt, woher denn die filetime weiß, wo die Datein liegen, da ja nur die namen weiter gegeben werden. Da ich aber nicht wusste, wie ich zusätzlich das Verzeichnis mit in die filetime bekomme, habe ich die Datein, die eigentlich in content/de/ liegen mal in den root (da liegt auch mein script) geworfen

==> und sie da, es funktionierte *grins*, auch mit der if-Abfrage

trotzdem weiß ich leider nicht, wie ich das Verzeichnis davorschreibe, dass müsste ich ja dann irgendwie wieder mit einer foreach abarbeiten, oder?

Dann habe ich es mit mehreren Ordner versucht:

PHP:
<?php    

$dirs = array('content/de/', 'content/en/');

foreach($dirs as $dir)
	{
     $files = scandir($dir);
	}

print_r($files);

foreach($files as $file)
	{
	 if($file != "." AND $file != "..")
 	  {
       $zeit = filemtime($file);
	   $zeiten[] = $zeit;  // ... und in neuem Array speichern
      } 
	}
  
?>
$files wird nun aber immer überschrieben, also sehe ich nur die faten in content/en/
wenn ich aus $files eine array mache ( $files[] ) steht dann aber eine array in einer array, da scandir(); ja automatisch eine array erzeugt

gibt es da eine gute lösung?
 
Zuletzt bearbeitet:
Pack die zweite foreach-Schleife in die erste; d.h. du sammelst erst alle Zeiten von de und danach von en.

Die Verzeichnisnamen hast du ja im Array $dirs, also kannst du diese auch bei filemtime einsetzen:

PHP:
foreach($dirs as $dir)
{
  ...
  foreach($files as $file)
  {
    ...
    $zeit = filemtime($dir . $file); // ggf. mit Slash zwischen Ordner/Datei aufpassen
    ...
  }
}

Kannst dir ja auch einfach mal echo $dir . $file; ausgeben lassen um zu sehen, ob die Pfadangabe stimmt.
 
Zuletzt bearbeitet:
Danke, es funktioniert wunderbar.

1. Wie kann ich den root auswählen, also da, wo auch meine datei liegt? oder soll ich dann die datein per hand einfügen

Und dann habe ich noch eine Frage:
Wenn ich eine .txt mit
PHP:
  echo nl2br(file_get_contents('content/' . $sprache . '/' . $page . '.txt'));
hinzufüge, wie kann ich dann eine Variable wie z.B. $sprache ausgeben lassen?

Wenn das hier die .txt ist sollte er mir ja eigentlich dann "test" anzeigen, stattdessen wird nichts angezeigt. Habe schon vieles ausprobiert, aber entweder wurde nichts angezeigt, oder echo "test"; o.ä.

HTML wie <h1>...</h1> hat funktioniert

Code:
<?php echo "test"; ?>

Dies hier ist ein Testtext.
 
Zuletzt bearbeitet:
Wenn die Datei im Root liegt und du von da ab auch die Verzeichnisse haben willst, mach einfach scandir(".").




Schau dir mal den Quelltext der Seite an (und lies in der Dokumentation), wenn du die Textdatei mit file_get_contents einliest, dann sollte klar werden, warum das nicht funktioniert.

Wenn du PHP-Code in der eingelesenen Datei nutzen willst, benutze include oder require
 
Zuletzt bearbeitet:
ah, sorry mein Fehler...

aber mit "." zeigt er zwar die Datein an, aber bei filetime kommt nichts ordnentliches raus.

Code:
Array ( [0] => . [1] => .. [2] => content [3] => images [4] => index.php [5] => style.css [6] => test [7] => test.php )
Letzte Änderung der Datei:
Letzte Änderung der Datei:
Letzte Änderung der Datei:
Letzte Änderung der Datei:
Letzte Änderung der Datei:
Letzte Änderung der Datei:

vielleicht gibt es bei filetime eine andere Abkürzung?
 
Hast du dir den Pfad bei filemtime angeschaut?

Wenn du die Dateien direkt im Root haben willst, brauchst du hier keinen Ordner ($dir) angeben.
 
also muss ich dann nochmal eine if-Abfrage rein packen, die abfraht, welchen Ordner/Root man gerade abfragt, weil die scandir Funktion baucht dies ja.
edit: du bist mein schatzelein :D

Kann man mit include auch bei der .txt Zeilenumbrüche aktivieren ohne <br>?
 
Zuletzt bearbeitet:
Versuch's mal mit getcwd, das liefert das aktuelle Verzeichnis:
PHP:
$dirs = getcwd();
$files = scandir($dirs);


Via include sollte die Datei 1:1 so eingelesen werden (d.h. mit allen Absätzen, Einrückungen usw.) wie sie vorliegt.
 
wenn ich in der .txt das hier reinschreibe
Code:
<?php echo "hi"; ?>

Dies hier ist ein Testtext.
0
wird alles hintereinander geschrieben.


2. ich habs jetzt so gemacht, und es klappt gut:
PHP:
  foreach($files as $file)
  {
   
   if($file != "." AND $file != ".." AND $dir != ".")
      {
        ...
      } 
   else if($file != "." AND $file != ".." AND $dir = ".")
      {
        ...
      } 
  }
 
Achso ja klar, mein Fehler.

In der includeten Datei musst du Zeilenumbrüche usw. so angeben, wie sie erscheinen sollen (ich meinte, dass der Quelltext mit allen Umbrüchen usw. angezeigt wird, wie er in der Datei steht nud nicht bspw. einfach als langer String).
 
Wenn ich das jetzt richtig verstehe, muss da dann immer ein <br> hin?
Kann nicht so wirklich in deiner Antwort eine Lösung sehen.;)
 
Ja, die Datei muss quasi genau so geschrieben werden, wie du auch sonst HTML-Code schreibst. also mit <br> o.ä. wo ein Absatz sein soll.
 
gibt es noch eine andere Möglichkeit, das er Absätze automatisch mitnimmt?

Kannst du mir sagen, wie die Buttons bei CB gemacht wurden, also ds sie größer werden?
Flash, Java, CSS?

Wenn nicht trotzdem Danke für deine großartige Unterstützung.
 
Zuletzt bearbeitet:
Zurück
Oben