Variable per Klick ändern

Ja, da müsstest du dich aber mit Javascript/AJAX beschäftigen.

Das ist dann nicht mehr so trivial; zudem musst du auch bedenken was passiert, wenn jemand JS deaktiviert hat.
 
Da ich den zuletzt gedrücken Button anders haben wollte, damit es Übersichtlich ist, habe ich ein wenig rumprobiert. Aber irgendwie ist das nicht das gelbe vom Ei.

PHP:
<?php
if (isset($_GET['section'] == "home")) 
{
 echo "<img src="images/m1a.gif" width="87" height="41" />";
}
else
{
 echo "<img src="images/m1b.gif" width="87" height="41" />";
}
?>
 
Wenn du doppelte Anführunszeichen " benutzt um Strings einzugrenzen, kannst du diese nicht gleichzeitig auch im String benutzen (bspw. bei scr, width, height).

Entweder benutzt du einfache Anführungszeichen ' um den String einzugrenzen und doppelte " innerhalb, oder du benutzt immer doppelte Anführungszeichen ", musst diese dann aber im String escapen \".

Bei einfachen Anführungszeichen ' musst du Variablen im String außerdem abgrenzen, bei doppelten nicht.

PHP:
echo '<img src="bild.jpg" width="' . $width . '" height="' . $height . '">';
oder
PHP:
echo "<img src=\"bild.jpg\" width=\"$width\" height=\"$height\">";


Also:
PHP:
if($_GET['section'] == "home")
{
  echo '<img src="images/m1a.gif" width="87" height="41" />';
} 
else 
{ 
  echo '<img src="images/m1b.gif" width="87" height="41" />';
}


Wobei sich mir eigentlich die Frage stellt, was nicht das Gelbe vom Ei ist? Fehlermeldung (vermutlich) oder gefällt dir sonst etwas an dieser Vorgehensweise nicht?
 
Zuletzt bearbeitet:
Ja, damit meine ich die Fehlermeldung.

PHP:
<?php                   
if($_GET['section'] == "home")
 {
  echo '<td><a href="?lang=<?php echo $sprache; ?>&section=home"><img src="images/<?php echo $sprache; ?>/m1a.gif" width="97" height="41" border="0" /></a></td>';
 } 
  else 
 { 
  echo 'blabliblub';
 }  
 ?>

Text ausgabe funktioniert aber das Bild nicht.

Btw: alles selber beigebracht?
 
Hier bist du ja schon in PHP, brauchst also innerhalb deines echo keine PHP-Tags mehr

falsch:
PHP:
<?php
  echo '<td><a href="?lang=<?php echo $sprache; ?>&section=home">' ...
?>
korrekt:
PHP:
<?php
  echo '<td><a href="?lang=$sprache&section=home">' ...
?>


Nur, wenn du in HTML einen Link hast, in dem du dann eine Variable einfügen willst, musst du diese mit PHP ausgeben:

falsch:
HTML:
<td><a href="?lang=$sprache&section=home"> ...
korrekt:
HTML:
<td><a href="?lang=<?php echo $sprache; ?>&section=home"> ...

Btw: alles selber beigebracht?
Mehr oder weniger; am Anfang mal ein Buch gekauft und dann try and error ;)
 
Zuletzt bearbeitet: (Beitrag wiederhergestellt)
Respekt... Da braucht man bestimmt viel Zeit/Lust und Ausdauer :eek:

Habe mir überlegt, wie ich aus mehreren Datei die letzte Änderung bekomme.

PHP:
<?PHP
$datei = '1.txt';

$zeit = filemtime ( $datei );

// dann nach größe sortieren und den größten Wert umwandeln

echo 'Letzte Änderung der Datei: ' . $zeit . ';

Nur muss ich dann alle Datein hinzufügen. Gibt es da nicht einen einfacheren und bessernen Weg? Das man vielleicht nur die Ordner aufrufen muss?
 
Schau dir mal die Funktion scandir an.

Liefert ein Array mit allen Dateien im angegebenen Ordner, das kannst du dann mit einer foreach-Schleife durchlaufen.
 
wow, foreach-Schleife sieht ja ganz schön kompliziert aus:rolleyes:

mal gucken ob ich noch eine andere Seite finde, wo es vielleicht besser beschrieben ist
 
Nö, isses nicht :)

PHP:
$array = array("Apfel", "Birne", "Kirsche");

// durchläuft das Array $array und gibt in jedem Durchgang echo $obst aus
foreach($array as $obst)
{
  echo $obst;
}

Du machst in der Schleife halt dein filmtime() oder was auch immer.
 
Ich habe heute mal ausprobiert, aber irgendwie klappt es nicht.

Wie packe ich denn da Ordner hinein und was bringt es mir, dass ich als Antwort ApfelBirneKirsche erhalte?
 
Das Array mit Apfel, Birne, Kirsche war natürlich nur ein Beispiel zur Veranschaulichung der foreach-Schleife ;)

Das Array mit den Dateinamen bekommst du über oben genannte scandir-Funktion. Und statt dem echo $obst in der Schleife machst du wie gesagt dein filemtime(...)
 
Das war mir klar;).

Irgendwo ist da ein Fehler drinnen.
Wie kann ich mehrere Ordner als Quelle angeben?

PHP:
<?php
$dir  	= 'content/de/';
$files 	= scandir($dir);
$array = array($files); 
foreach($array as $filetime($array))
$zeit = filemtime ( $array );
echo 'Letzte Änderung der Datei: ' . $zeit . '<br>';
?>
 
Wenn du scandir nutzt, landen die Dateinamen automatisch in einem Array; in deinem Fall $files. Das entspricht meinem oben manuell erzeugten Array $array mit Apfel, Birne, Kirsche.

  • Ich hatte: $array = array("Apfel", "Kirsche", "Birne");
  • Du hast quasi : $file = array("datei1.abc", "datei2.xyz", ...); (durch die Funktion scandir erzeugt)

Also setzt du das Array $file in die foreach-Schleife, welche das Array dann Element für Element durchläuft:

PHP:
foreach($files as $file)
// 1. Durchgang: $file = "datei1.abc"; 2. Durchgang: $file = "datei2.xyz", usw.
{
  $zeit = filemtime($file);
  echo 'Letzte Änderung der Datei: ' . $zeit . '<br>'; 
}


Wie du am ersten Beispielen der scandir-Funktion siehst, enthält dein Array aber auch zwei Eintrage "." und "..".

Die kannst du bspw. in der foreach-Schleife auslassen, wenn du mit einer if-Abfrage prüfst ob das aktuelle Element "." oder ".." ist:
PHP:
foreach($files as $file)
{
  // nur wenn $file nicht "." und $file nicht ".."
  if($file != "." AND $file != "..")
  {
    $zeit = filemtime($file);
    echo 'Letzte Änderung der Datei: ' . $zeit . '<br>'; 
  }
}
 
Wenn ich das mit
PHP:
  if($file != "." AND $file != "..")

mache, sollten ja nur Werte kommen die nicht aus "." und ".." bestehen, aber leider geschied genau das Gegenteil.

kommt das hier raus:
Code:
Letzte Änderung der Datei:
Letzte Änderung der Datei:
Letzte Änderung der Datei:
Letzte Änderung der Datei:

sollte nicht aber das hier raus kommen?

Code:
Letzte Änderung der Datei: 1272306289
Letzte Änderung der Datei: 1272135623

Sind die Daten automatisch nach Zahlengröße geordnet?
 
Zuletzt bearbeitet:
Lass die if-Anweisung erstmal weg, und schau, was dann passiert.

Entweder kommt bei den Punkten ein Fehler oder ansonsten zumindest irgendeine Ausgabe.


Geordnet sind die Zahlen nicht, dazu müsste man zuerst in einer foreach-Schleife die Zeiten der Dateien auslesen (quasi wie du's aktuell vorhast), aber dann nicht mit echo ausgeben, sondern in einem neuen Array speichern.

Das neue Array kannst du dann mit arsort der Größe nach absteigend sortieren, und wiederum in einer foreach-Schleife mit echo deine Text ausgeben.


PHP:
$files = scandir(...);

foreach($files as $file)
{
  $zeit = filemtime($file); // Zeiten ermitteln ...
  $zeiten[] = $zeit;  // ... und in neuem Array speichern
}

arsort($zeiten); // Array absteigend sortieren

foreach($zeiten as $zeit)
{
  echo "Letzte Änderung der Datei: " . $zeit . "<br>";
}


Danach nochmal probieren, mit der if-Anweisung die Punkte abzufangen.
 
Das Problem mit "." und ".." ist leider immer noch da.

Mit Abfrage:
Code:
Letzte Änderung der Datei:
Letzte Änderung der Datei:
Letzte Änderung der Datei:
Letzte Änderung der Datei:

Ohne Abfrage:
Code:
Letzte Änderung der Datei: 1272306289
Letzte Änderung der Datei: 1272135623
Letzte Änderung der Datei:
Letzte Änderung der Datei:
Letzte Änderung der Datei:
Letzte Änderung der Datei:

Nach Größe ist es auf jedenfall schon sortiert. Aber eigentlich ist es doch egal, ob "." und ".." dabei ist, da ich na nur den größten Wert brauche und dann stehen sie ja unten;)

Wie filter ich nur den ersten Wert aus $zeiten?

Ich denke das die letzte foreach unnötig ist.
PHP:
foreach($zeiten as $zeit)
{
  echo "Letzte Änderung der Datei: " . $zeit . "<br>";
}
brauche ja nur den ersten, oder verwechsel ich da gerade was?
 
D.h. mit if-Anweisung werden die beiden . und .. korrekt nicht ausgegeben, die restlichen vier aber auch nicht. Dann stimmt da evtl. was mit deinem Dateipfad nicht, so dass da gar keine Dateien liegen.

Mach doch in der Schleife nur mal echo $file um zu sehen, ob da überhaupt die Dateinamen auftauchen, die du willst.


Wenn du nur den Maximalwert aus dem Array brauchst, dann mach echo max(array($zeiten)), sortieren brauchst du dann natürlich nichts.
 
Zeigt nur immer Array an, egal was ich versuche

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

foreach($files as $file)
{
  $zeit = filemtime($file); // Zeiten ermitteln ...
  $zeiten[] = $zeit;  // ... und in neuem Array speichern
}

arsort($zeiten); // Array absteigend sortieren

foreach($zeiten as $zeit)
{
  echo "Letzte Änderung der Datei: " . $zeit . "<br>";
}   
?>
 
Das $file = array($files); ist auch falsch. $files ist wie gesagt bereits ein Array, dass du direkt so in der foreach-Schleife benutzt.
 
Und woher bekomme ich dann $file?
Oder so wie bei
PHP:
  $zeiten[] = $zeit;

Das $file = array($files); ist auch falsch. $files ist wie gesagt bereits ein Array, dass du direkt so in der foreach-Schleife benutzt.

Was denn noch?
 
Zurück
Oben