Ergebnis 1 bis 16 von 16

Thema: Bilderauswechseln per PHP?

  1. #1

    Bilderauswechseln per PHP?

    Kann man eine HTML/PHP nehmen, ihr sagen das das Bilder Verzeichnis zB. /wallpaper das Verzeichnis ist um die Bilder zu laden.

    Also ich stelle mir das so vor: So soll es aussehen [400KB]

    Chobits 01/81:
    gibt das aktuelle Bild an und alle Bilder zusammen (letzteres muss nicht Variabel sein).

    Das ganze sollte auch nur in einer PHP/HTML Datei ablaufen, nicht in 81.

    Falls ja, würde sich eine Seele erbarmen, mir so etwas zu skripten (also das HTML das es so aussihet würde ich natürlich demjenigen geben (soll ja so aussehen wie die Seite von mir).

    Dennis

    PS: Chocwise hat jetz den Auftrag

    Geändert von Maisaffe (11.08.2004 um 22:40 Uhr)

  2. #2

    Re: Bilderauswechseln per PHP?

    Zitat Zitat
    Original geschrieben von dennis_meckel
    Kann man eine HTML/PHP nehmen, ihr sagen das das Bilder Verzeichnis zB. /wallpaper das Verzeichnis ist um die Bilder zu laden.

    Also ich stelle mir das so vor: So soll es aussehen [400KB]

    Chobits 01/81:
    gibt das aktuelle Bild an und alle Bilder zusammen (letzteres muss nicht Variabel sein).

    Das ganze sollte auch nur in einer PHP/HTML Datei ablaufen, nicht in 81.

    Falls ja, würde sich eine Seele erbarmen, mir so etwas zu skripten (also das HTML das es so aussihet würde ich natürlich demjenigen geben (soll ja so aussehen wie die Seite von mir).

    Dennis
    Jop, das geht, sogar relativ leicht. Ich mach mich gleich mal dran und progg das Dingen, muss mich allerdings erst noch im Forum umschauen und nachher noch mit ein paar Array-Funktionen vertraut machen um dein Script proggen zu können.

    Ich dokumentiers dann noch schön aus, damit du noch selbst dran fummeln kannst.

  3. #3
    Ich hoffe, du hast nichts dagegen, wenn ich meine Variante ebenfalls poste.

    Das ist der erste Abschnitt, ihn fügst du am besten im Kopf deiner Datei ein.
    PHP-Code:
    <?php

        $pfad 
    './bilder/'

        
    $verzeichnis opendir $pfad );
        
    /* opendir öffnet ein Verzeichnis. Liegt in dem Verzeichnis, in dem auch
           diese Datei liegt, das Verzeichnis 'bilder', dann passt die Angabe,
           ansonnsten musst du sie anpassen (wie du dabei vorgehst solltest du
           ja schon aus der Arbeit mit HTML Dateien kennen).
           --
           Im 'bilder' Verzeichnis sollten sich alle Bilder befinden. Sind dort
           auch andere Dateien gespeichert erkläre ich später, wie du Dateien,
           die nicht benötigt werden, herausfilterst).
        */

        
    $bilder = array();
        
    // $bilder wird die Bildnamen enthalten.

        
    $zaehler 1;
        
    // Gibt den Start des Arrayschlüssels an.

        
    while ( $datei readdir $verzeichnis ) )
        {

        
    /* So lange Dateien ausgelesen werden können
           soll der Dateiname in ein Array eingefügt werden.
           --
           Die IF Abfrage verhindert, dass das eigene Verzeichnis '.',
           sowie das Verzeichnis einen Schritt zurück '..' ebenfalls
           ausgelesen werden.
           --
           Du kannst diese Abfrage mit --OR substr ( $datei, -4 ) != '.png'--
           ohne die -- hinzufügen, dann werden nur Dateien mit der Dateiendung
           '.png' ausgelesen. Das kannst du für alle Bildformate machen, wenn
           sich im Bilderverzeichnis auch Dateien befinden, die keine Bilder sind.
           --
           substr ( $datei, -4 ) gibt die letzten vier Zeichen eines Strings aus,
           bei Dateien ist das die Dateiendung, möchtest du z.B. '.jpeg' Dateien
           auslesen änderst du entweder -4 in -5 oder lässt den Punkt bei der
           Dateiendung nach != weg.
         */

            
    if ( $datei != '.' AND $datei != '..' )
            {

                
    $bilder[$zaehler] = $datei;
                
    $zaehler++;
                
    /* $bilder[1] erhält den Namen der ersten Datei,
                   $bilder[2] erhält den Namen der zweiten Datei
                   ... */

            
    }

        }

    ?>
    Dieser Abschnitt gibt einer Variable den Wert 1, falls kein Bild ausgewählt, oder ein ungültiger Wert übergeben wurde.
    PHP-Code:
    <?php

        
    // Hier wird der Variable $_GET['bild'] automatisch ein Wert gegeben.
        // Da du beim Aufrufen dieser Datei noch keinen Wert an $_GET['bild']
        // gegeben hast wird hier erstmal der Wert 1 eingetragen.
        // Zur Sicherheit ist das auch der Fall, wenn der Wert ein unerlaubter Wert
        // sein sollte.

        
    if ( !isset ( $_GET['bild'] ) OR ( int ) $_GET['bild'] < OR ( int ) $_GET['bild'] > count $bilder ) )
        {

            
    $_GET['bild'] = 1;

        }

    ?>
    Dieser Abschnitt gibt das Bild aus, einfügen, wo gewünscht.
    PHP-Code:
    <?php

            
    echo '<img src="' $pfad $bilder[$_GET['bild']] . '" alt="" />';
            
    /* Hier wird nach der Verzeichnisangabe im src-Attribut der Dateiname
               eingetragen, der als Schlüssel, den Wert der Variable $_GET['bild'] hat. */

    ?>
    Hier der Link für das Bild zuvor und das Bild danach.
    PHP-Code:
    <?php

      
    // ZURÜCK
      
    if ( $_GET['bild'] != )
      {

          echo 
    '<a href="' $_SERVER['PHP_SELF'] . '?bild=' . ( $_GET['bild'] -) . '">zur&uuml;ck</a>';

      }

      
    // WEITER
      
    if ( $_GET['bild'] != count $bilder ) )
      {

          echo 
    '<a href="' $_SERVER['PHP_SELF'] . '?bild=' . ( $_GET['bild'] +1  ) . '">weiter</a>';

      }

    ?>
    Die ersten beiden Abschnitte müssen in dieser Reihenfolge eingefügt werden, die letzten beiden kannst du je nach Bedarf einfügen (denke aber, dass es ohne weiter kein zurück geben kann ).

    Geändert von mitaki (12.08.2004 um 16:33 Uhr)

  4. #4
    Dagegen habe ich nichts...

    Aber mir ist der Sinn jetz entgangen...
    Chocwise hat jetz doch schon die PHP Datei erstellt.

    Dennis

    PS: Trotzdem Danke

  5. #5
    Ob das Skript schon erstellt wurde ging aus deinem Post nicht wirklich hervor, daher habe ich meine Methode geposted. Im Zweifelsfall hättest du dir die leichtere aussuchen können.

    Außerdem denke ich, dass es immer gut wäre seine Lösung anderen preiszugeben, um erneutes Fragen zu verhinden (sofern es nichts komplexeres ist, obwohl das zweifelsohne interessant wäre).

  6. #6
    @ mitaki: Mir scheint meine Version 'n Tick komfortabler zu sein.
    Ich hab deine Version nur kurz überflogen, stelle aber fest das dein Script spezielle Dateinamen benötigt.
    Meins ist da 'n tick anspruchsloser weil es selbstständig die Dateinamen im definierten Ordner ausliest.

    Hier mal der Code (Ich hab die Stylesheets mal rausgeschnibbelt und etwas umgebastelt), auch wenn es viel ist:
    PHP-Code:
    <?php
    #### Configuration ####
    $pfad "ordner/blah/Chobits/";                 // Pfad zum Bilderordner (Bitte relativ zu dieser Scriptdatei angeben)

    #### Confuguration Ende ####


    #### Informationssammelnde Funktionen ####
    if ($handle opendir($pfad)) {                         // Öffnet den in $pfad definierten Ordner und prüft zugleich, obs gelungen ist            
       
    while (($file readdir($handle))) {                 // Liest den Inhalt des geöffneten Ordners
         
    if ($file != "." && $file != "..") {               // Filtert die Zeichen "." (reload folder) und ".." (previous folder) raus.
           
    $files[] = $file;                                // Übergibt die Dateinamen in einen Array
           
    sort ($files);                                   // Sortiert die Dateinamen Alphanumerisch
         
    }
       }
    }

    $filecount count($files);                             // Zählt die Anzahl der Dateien im Pfad $pfad

    if(!$wich){ $wich 0; }                // Sollte die GET Variable $wich nicht gesetzt sein, wird sie auf 0 gesetzt

    if (!isset($files[$wich])) {            // Überprüft ob es überhaupt den passenden Arraykey zum entspr. $wich-Wert gibt.
        
    $error=1;                                   // Setzt bei Fehlen des Key's eine Errorvariable zum Fehlerabfang
    }
    #### Informationssammelnde Funktionen Ende ####
    ?>

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>Unbenanntes Dokument</title>

    </head>

    <body>
    <?php
    if($error==1){                                   // Reagiert auf den oben ermittelten Fehlerfall
       
    echo"Das angeforderte Bild gibt es nicht.";
    }else{ 
    ?>
    <table width="100%" height="100%" border="0" align="center" cellpadding="4" cellspacing="1" bgcolor="#C0C0C0">
      <tr>
        <td bordercolor="#575757" background="../index.arcor/homepage/homepage/kasten_oben.png" bgcolor="#575757"><div align="center" class="Stil14">Wallpaper</div></td>
      </tr>
      <tr>
        <td height="100%" valign="top"  bgcolor="#C0C0C0">
          <table width="670" border="0" align="center" cellpadding="4" cellspacing="1" bgcolor="#424242">
            <tr> 
              <td bordercolor="#575757" bgcolor="#EAEAEA"> 
                <table width="300" border="0" align="center" cellpadding="0" cellspacing="0">
                  <tr align="center" valign="middle"> 
                    <td width="50" bordercolor="#575757" bgcolor="#EAEAEA" nowrap> 
                      <?php if($wich!=0){ 
                      
    // Gibt das "Rückwärtsbild" und Link nur aus wenn es auch ein vorhergehendes Bild gibt
                      
    ?>
                      <a href="<?php 
                      $prev
    =$wich-1;
                      echo
    "$PHP_SELF?wich=$prev"?>"><font face="Arial, Helvetica, sans-serif" size="2">&lt;&lt;Previous</font></a> 
                      <?php ?>
                    </td>
                    <td width="200" bordercolor="#575757" bgcolor="#EAEAEA" nowrap> 
                      <div align="center" class="Stil15">Pic 
                        <?php 

       $imgnr
    $wich+1;        // In Bildnummer umrechnen da $wich bei 0 beginnt (In Programmiersprachen ist 0 die erste Instanz)
       
    echo"$imgnr/$filecount";        // Gibt die aktuelle Bildnummer und die Gesamtzahl aus

    ?>
                      </div>
                    </td>
                    <td width="50" bordercolor="#575757" bgcolor="#EAEAEA" nowrap> 
                      <?php 
                      
    // Gibt das "Vorwärtsbild" und Link nur aus wenn es auch ein folgendes Bild gibt
                      
    if($filecount>$imgnr){ ?>
                      <a href="<?php 
                      $next
    =$wich+1;
                      echo
    "$PHP_SELF?wich=$next"?>"><font face="Arial, Helvetica, sans-serif" size="2">Next 
                      &gt;&gt;</font></a> 
                      <?php ?>
                    </td>
                  </tr>
                </table>
              </td>
            </tr>
            <tr> 
              <td bordercolor="#575757" bgcolor="#EAEAEA"> 
                <table width="660" border="0" align="center" cellpadding="0" cellspacing="0">
                  <tr> 
                    <td width="99%" valign="top" bordercolor="#575757" bgcolor="#EAEAEA">
                      <div align="center"><img src="<?php
                    
    // Gibt das angeforderte Bild aus.
                
    $files[$wich]=stripslashes($files[$wich]);
                echo
    $pfad.$files[$wich];
                
    ?>"></div>
                    </td>
                  </tr>
                </table>
              </td>
            </tr>
            <tr> 
              <td bordercolor="#575757" bgcolor="#EAEAEA"> 
                <table width="300" border="0" align="center" cellpadding="0" cellspacing="0">
                  <tr align="center" valign="middle"> 
                    <td width="50" bordercolor="#575757" bgcolor="#EAEAEA" nowrap> 
                      <?php 
                      
    // Gibt das "Rückwärtsbild" und Link nur aus wenn es auch ein vorhergehendes Bild gibt
                      
    if($wich!=0){ ?>
                      <a href="<?php 
                      $prev
    =$wich-1;
                      echo
    "$PHP_SELF?wich=$prev"?>"><font face="Arial, Helvetica, sans-serif" size="2">&lt;&lt;Previous</font></a> 
                      <?php ?>
                    </td>
                    <td width="200" bordercolor="#575757" bgcolor="#EAEAEA"> 
                      <div align="center" class="Stil15">Pic 
                        <?php 

       $imgnr
    $wich+1;
       echo
    "$imgnr/$filecount"

    ?>
                      </div>
                    </td>
                    <td width="50" bordercolor="#575757" bgcolor="#EAEAEA" nowrap> 
                      <?php 
                      
    // Gibt das "Vorwärtsbild" und Link nur aus wenn es auch ein folgendes Bild gibt
                      
    if($filecount>$imgnr){ ?>
                      <a href="<?php 
                      $next
    =$wich+1;
                      echo
    "$PHP_SELF?wich=$next"?>"><font face="Arial, Helvetica, sans-serif" size="2">Next 
                      &gt;&gt;</font></a> 
                      <?php ?>
                    </td>
                  </tr>
                </table>
              </td>
            </tr>
          </table>
        </td>
      </tr>
    </table>
    <?php ?>
    </body>
    </html>

  7. #7
    Zitat Zitat
    ...stelle aber fest das dein Script spezielle Dateinamen benötigt.
    Damit ich konkurenzfähig bleibe habe ich das gleich ausgebessert
    Unsere Skripte sind uns sonst recht ähnlich, ich muss aber zugeben, dass du über ein besseres Fehler Handling verfügst.
    Als großen Minuspunk sehe ich aber das nicht verwenden der Superglobalen Arrays an ($_GET, $_SERVER), sprich du bist komfortabler aber nicht portabler (wie hört sich das an..? )!

  8. #8
    Zitat Zitat
    Original geschrieben von mitaki
    Damit ich konkurenzfähig bleibe habe ich das gleich ausgebessert
    Unsere Skripte sind uns sonst recht ähnlich, ich muss aber zugeben, dass du über ein besseres Fehler Handling verfügst.
    Als großen Minuspunk sehe ich aber das nicht verwenden der Superglobalen Arrays an ($_GET, $_SERVER), sprich du bist komfortabler aber nicht portabler (wie hört sich das an..? )!
    Du wirst es nicht glauben, aber ich hab Dennis 2 Versionen übermittelt.
    Eine mit $_GET['wich'] und eine mit $wich.
    Welche er nutzen möchte, liegt an ihm.

  9. #9
    Daraus ergibt sich mir kein Sinn, $_GET['wich'] wird immer angelegt, während $wich nur bei register_globals = On angelegt wird.

    Naja, ich hoffe er entscheidet sich für die Version mit $_GET, wir wollen ja Probleme vermeiden

  10. #10
    Abgesehen davon, dass ein gesetztes register_globals mehr Arbeit erzeugt als ein ungesetztes, da man jede Variable initialisieren muss, um Sicherheitsprobleme zu vermeiden.
    Wenn es nach mir ginge wär auf meinem Server r_g ausgeschaltet, gibt es eigentlich auch eine Möglichkeit, das lokal zu tun (Was weiß ich, .htaccess oder im Dokument selber)?

  11. #11
    Zitat Zitat
    Original geschrieben von wrtlprnft
    Abgesehen davon, dass ein gesetztes register_globals mehr Arbeit erzeugt als ein ungesetztes, da man jede Variable initialisieren muss, um Sicherheitsprobleme zu vermeiden.
    Wenn es nach mir ginge wär auf meinem Server r_g ausgeschaltet, gibt es eigentlich auch eine Möglichkeit, das lokal zu tun (Was weiß ich, .htaccess oder im Dokument selber)?
    Klar.

    .htaccess:
    php_flag register_globals off


    Ich hab ihm die $_GET-freie Version geschickt weil er sie 1. haben wollte und 2. weil es tatsächlich für Anfänger leichter ist damit zu arbeiten. Und wenn der Server da mitmacht, ist doch alles ok.
    Solange man keine hochkomplexen Scripte schreibt, ist es auch noch nicht nötig auf Sicherheitsaspekte zu pochen.
    Ich hab 3/4tel meiner PHP-Karriere auch immer mit register_globals gearbeitet und bin noch nie Problemen begegnet.
    Klar, wenn man professioneller arbeiten möchte, wird es Zeit mit den entspr. Variablen klarzukommen, aber als Anfänger reicht es wenn man weiß das es auf einigen Servern zu Problemen kommen kann wenn man $var statt $_GET['var'] $_COOKIE['var'], $_POST['var'], ... verwendet, weil register_globals aus sind.
    Fakt ist, das ich bisher noch keinen Server gesehen habe außer einem meiner vHosts meines privaten WAMPP's, auf denen die register_globals ausgeschaltet gewesen wären. Und wenn sie es sind, schaltet man sie eben per .htaccess wieder an, wenn man kann.

  12. #12
    Ich laufe gerade per WAMP, hier Funktioniert diese .htaccess Angabe:
    Code:
    php_value register_globals On
    Der Payspace über den ich durch einen Freund verfüge zeigt mir dabei aber einen 500 - Internal Server Error an, sprich entweder erlaubt es nicht jeder oder die Angabe funktioniert nur gerade so.

  13. #13
    THX@Chocwise!
    Bei mir hat sich kein Unterschied gezeigt, aber jetzt kann ich endlich darauf verzichten, dauernd Variablen mit 0 zu initialisieren.

  14. #14
    Natürlich hätte ich Off schreiben müssen, aber da ich bei mir ja schon deaktiviert habe..
    Zitat Zitat
    php_flag register_globals off
    Ah, flag verwendest du, muss ich auch versuchen
    hm.. mist ^^, du warst schon wieder schneller.

    Vielleicht ist es leichter, dann sollte man aber dennoch gleich die 'richtigere' Methode erwähnen (hast du ja anscheinend). Ich kenne leider mehrere Seiten auf denen es Sicherheitslücken gibt, wie ich es im Beispiel meiner Seite beschreibe, es ist einfach nicht witzig, wenn man sich /etc/passwd ansehen kann.

  15. #15
    Zitat Zitat
    Original geschrieben von mitaki
    Es ist einfach nicht witzig, wenn man sich /etc/passwd ansehen kann.
    Bei einem guten Passwort hilft das erstens weniger, da man es dann nur durch brute-force rausfinden könnte (Aber wer hat 2000 Jahre Zeit zum Rechnen?) und außerdem verwenden die meisten sicherheitsbewussten Leute dann doch eine shadow-Datei (wenn die passwd überhaupt einem Normaluser zugänglich ist).

    EDIT: Bei mir kommt dann sowas:
    Code:
    Warning: main() [function.main]: open_basedir restriction in effect. File(/etc/passwd) is not within the allowed path(s): (/www/htdocs/v096179/) in /www/htdocs/v096179/test.php on line 1
    
    Warning: main(/etc/passwd) [function.main]: failed to create stream: Operation not permitted in /www/htdocs/v096179/test.php on line 1
    
    Warning: main() [function.main]: Failed opening '/etc/passwd' for inclusion (include_path='.:..') in /www/htdocs/v096179/test.php on line 1
    Wär ja auch noch schöner

  16. #16
    Bei so etwas geht es ums Prinzip.

    Ich bekam Zugriff bei den wenigen Seiten, die ich testen konnte (es gibt eben noch Leute die nicht Sicherheitsbewusst sind).

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •