function geht nicht

forsterm

Erfahrenes Mitglied
Hallo,

ich lese mit folgendem Script alle Bilder eines Verzeichnisses in ein array und gebe dann das aktuelle bild aus.

PHP:
<?
  function (next) {$id++;}
  $bilder = array();
  $dir = opendir("bilder");
  while ($bild = readdir ($dir)) if ($bild != "." && $bild != "..")  $bilder[] = "<img border=\"1\" src=\"bilder/$bild\">";
  closedir($dir);
  $bild = $bilder[$id];
?>
<p align="center"><?= $bild ?></p>
<br><br><a href="next();"></a>

Normalerweise müsste ich doch über die funktion next dann das nächste Bild ausgelesen werden.
Nur funktioniert das nicht.

Wer kann mir helfen für eine Profi dürfte das doch kein Problem sein, oder?
 
PHP:
function next_pic() {
    global $id;
    $id++;
    return $id;
}
...
<br><br><a href="<? next_pic(); ?>"></a>

next kannst du nicht nehmen da es in php schon eine funktion next() gibt.
 
Auch wenn ich es so
PHP:
<?
function next_pic() { 
	global $id; 
	$id++; 
	return $id; 
} 
$bilder = array();
$dir = opendir("bilder");
while ($bild = readdir ($dir)) if ($bild != "." && $bild != "..") $bilder[] = "<img border=\"1\" src=\"bilder/$bild\">";
closedir($dir);
$bild = $bilder[$id];
?>
<p align="center"><?= $bild ?></p>
<? echo "<br><br><a href=\"next_pic();\">Weiter</a>"; ?>
mache funktioniert es leider nicht. :(
 
PHP:
<? echo '<br><br><a href="'.next_pic().'">Weiter</a>'; ?>
bzw:
PHP:
<? echo '<br><br><a href="show_pic.php?id='.next_pic().'">Weiter</a>'; ?>
oder so ähnlich
 
Hallo,

ich habe voll den komischen Fehler und zwar, wenn ich dieses Script benutze

PHP:
<?
  if ($id == "") {
	$id="0";
  }
  function back() { 
	  global $id; 
	  $id=$id-2; 
	  return $id; 
  } 
  function weiter() { 
	  global $id; 
	  $id=$id+1; 
	  return $id; 
  } 
  $bilder = array();
  $dir = opendir("home/bilder");
  while ($bild = readdir ($dir)) if ($bild != "." && $bild != "..")  $bilder[] = "<img border=\"1\" src=\"home/bilder/$bild\">";
  closedir($dir);
  $bild = $bilder[$id];
?>
<p align="center"><?= $bild ?></p>
<?
  echo '<center>';
  echo '<a href="haup.php?id='.weiter().'">Weiter</a> ';
  echo '<a href="haup.php?id='.back().'">Zurück</a>';
  echo '</center>';
?>

funktioniert alles, aber wenn ich folgendes Script verwende funktioniert es nicht mher.
PHP:
<?
  if ($id == "") {
	$id="0";
  }
  function back() { 
	  global $id; 
	  $id=$id-2; 
	  return $id; 
  } 
  function weiter() { 
	  global $id; 
	  $id=$id+1; 
	  return $id; 
  } 
  $bilder = array();
  $dir = opendir("home/bilder");
  while ($bild = readdir ($dir)) if ($bild != "." && $bild != "..")  $bilder[] = "<img border=\"1\" src=\"home/bilder/$bild\">";
  closedir($dir);
  $bild = $bilder[$id];
?>
<p align="center"><?= $bild ?></p>
<?
  echo '<center>';
  echo '<a href="haup.php?id='.back().'">Zurück</a>';
  echo '<a href="haup.php?id='.weiter().'">Weiter</a> ';
  echo '</center>';
?>
 
Hm ich nehme mal an, das liegt daran, dass die Variablen als global definiert sind. Eine Sch***-Idee, um's mal so direkt zu sagen.

Probier's mal so:
PHP:
<?php
if ($id == '') {
    $id = 0;
}

function back($id) {
    return $id - 1;
}

function weiter($id) {
    return $id + 1;
}

$bilder = array();
$dir = opendir('home/bilder');
while ($bild = readdir($dir)) {
    if ($bild != '.' && $bild != '..') {
        $bilder[] = '<img border="1" src="home/bilder/' . $bild . '">';
    }
}
closedir($dir);
$bild = $bilder[$id];
?>
<p align="center"><?= $bild ?></p>
<?php
echo '<center>';
echo '<a href="haup.php?id=' . back($id) . '">Zurück</a>';
echo '<a href="haup.php?id=' . weiter($id) . '">Weiter</a>';
echo '</center>';
?>
Übrigens: Ich kenne mich zwar mit der Dateiauslesung nicht sonderlich aus, aber dein Algorithmus ist imo nicht gerade das Gelbe vom Ei. Du liest jedesmal alle Bilder aus, auch wenn es eigentlich das erste wäre. Ich würde das so machen: Führ eine Variable $i ein, die bei jedem Durchgang der while-Schleife um 1 erhöht wird und stoppt, sobald $id = $i. Dieses Bild ist es dann. Dann kannst du dir auch den Array $bilder sparen.
 
Zuletzt bearbeitet:
SilentWarrior hat gesagt.:
Hm ich nehme mal an, das liegt daran, dass die Variablen als global definiert sind. Eine Sch***-Idee, um's mal so direkt zu sagen.

Probier's mal so:
PHP:
<?php
if ($id == '') {
$id = 0;
}
 
function back($id) {
return $id - 1;
}
 
function weiter($id) {
return $id + 1;
}
 
$bilder = array();
$dir = opendir('home/bilder');
while ($bild = readdir($dir)) {
if ($bild != '.' && $bild != '..') {
$bilder[] = '<img border="1" src="home/bilder/' . $bild . '">';
}
}
closedir($dir);
$bild = $bilder[$id];
?>
<p align="center"><?= $bild ?></p>
<?php
echo '<center>';
echo '<a href="haup.php?id=' . back($id) . '">Zurück</a>';
echo '<a href="haup.php?id=' . weiter($id) . '">Weiter</a>';
echo '</center>';
?>

Danke jetzt gehts genau so wie ich mir das vor gestellt hab.:)
 
Zurück