Holgi: Bilderserie

Hallo miteinander,

ich habe mithilfe von PHP-MYSQL eine kleine Bilderserie mit Kategorien erstellt.

  • ID  INT_autoincrement + PS
  • Beschreibung VCHAR
  • File VCHAR
  • Kategorie INT

Das Hinzufügen von Bildern funktioniert soweit, nur bei der Ausgabe komm ich nicht so ganz mit.

Ich habe 3 Kategorien (Österreich, Deutschland, Sonstige). Nun habe ich für jede Kategorie eine php-site erstellt wo die einzelnen kategorien herausgefiltert werden. Mit Hilfe von einem "zurück" und "weiter"-Button möchte ich, dass der Benutzer die Bilder der jeweiligen Kategorie ansehen kann.

Wie kann ich das am Besten machen, das mit der ID scheint mir ein bisschen unlogisch, da sie verschiedener Kategorie sind und manche ID's wieder gelöscht werden.

Ich bin kein PHP-Spezialist, deshalb bitte ich euch um Hilfe!

Danke im Voraus!

Holgi

  1. Moin Holgi,

    Wie kann ich das am Besten machen, das mit der ID scheint mir ein bisschen unlogisch, da sie verschiedener Kategorie sind und manche ID's wieder gelöscht werden.

    Ein Ansatz wäre, sich alle ID's der betreffenden Kategorie in ein
    Array zu speicheren. Du könntest dann im Array vorwärts und rückwärts gehen und den entsprechenden Datensatz mittels der ID
    aus der DB holen.

    Oder, Du lädst gleich alle Informationen in Arrays.

    Grüsse
    Mike

    --
    Freunde kommen und gehen. Feinde sammeln sich an.
    1. Hi,

      danke für die Antwort.

      Ein Ansatz wäre, sich alle ID's der betreffenden Kategorie in ein
      Array zu speicheren. Du könntest dann im Array vorwärts und rückwärts gehen und den entsprechenden Datensatz mittels der ID
      aus der DB holen.

      Oder, Du lädst gleich alle Informationen in Arrays.

      Wie gesagt bin ich kein Spezialist in PHP. Könntest du mir ungefähr sagen wie man die ID in Arrays speichert bzw. wie man sie rausliest?

      danke!

      Holgi

      1. Moin Holgi,

        Wie gesagt bin ich kein Spezialist in PHP. Könntest du mir ungefähr sagen wie man die ID in Arrays speichert bzw. wie man sie rausliest?

        Die Ergebnismenge aus der DB liest du ja mit einer while Schleife.
        In dieser Schleife speicherst du die ID's

        $x=0;

        while (....)
              {
                $ID[$x]=$id_aus_DB;
                $x++;
              }

        Auslesen kannst du nun mit hoch- und runter zählen der Variable $x
        Also Bild 1 = $ID[0] wobei $x=0 nächstes Bild ist $x+1 vorheriges
        Bild $x-1 ( Grenzen beachten $x nicht < 0 und $x nicht > max Bilder.

        $Hole_ID=$ID[$x];

        Und nun ein select mit $Hole_ID

        Grüsse
        Mike

        --
        Freunde kommen und gehen. Feinde sammeln sich an.
        1. Hi,

          irgendwie komm ich mit der serie doch nicht ganz weiter. ich habe nun nach dem herausfiltern der kategorie bilder mit gemischt id's (1,3,4,8,...). mit einem weiter- und zurück-button würde ich immer gerne zum bild der nächsten id kommen. es soll immer nur eine id angezeigt werden.

          weiß jemand wie ich z.B. von id 1 zur nächsten id 3 komme? gibt es da einen befehl?

          danke im voraus!

          holgi

          1. Moin Holgi,

            weiß jemand wie ich z.B. von id 1 zur nächsten id 3 komme? gibt es da einen befehl?

            Da müssen wir wohl die Kristallkugel befragen.
            Wie hast du es bis jetzt gelöst? Hast du die ID's in einem Array gespeichert?

            Grüsse
            Mike

            --
            Freunde kommen und gehen. Feinde sammeln sich an.
            1. Da müssen wir wohl die Kristallkugel befragen.
              Wie hast du es bis jetzt gelöst? Hast du die ID's in einem Array gespeichert?

              bisher sieht das script so aus:

              <?php

              include ("../data.inc.php");

              $abfrage = mysql_query("Select * from bilder where bi_kategorie=1 order by bi_id desc", $conn);

              $zeilen = mysql_num_rows($abfrage);

              for ($i=0; $i<$zeilen; $i++)
               {
               $bi_id = mysql_result($abfrage, $i, "bi_id");
               $bi_beschreibung = mysql_result($abfrage, $i, "bi_beschreibung");
               $bi_file = mysql_result($abfrage, $i, "bi_file");
               $bi_kategorie = mysql_result($abfrage, $i, "bi_kategorie");

              //echo "$bi_id<p>";

              $ids = array($bi_id);

              echo $ids[0];

              }
               ?>

              weiß nicht was ich mit dem array jetzt anfangen soll. das echo gibt die beiden bisherigen id's 3 1 aus.

              1. Moin Holgi,

                for ($i=0; $i<$zeilen; $i++)
                 {

                $bi_id = mysql_result($abfrage, $i, "bi_id");

                Für diese Lösung ist die bi_id nicht mehr relevant, diese Zeile kannst du weglassen.

                $bi_beschreibung = mysql_result($abfrage, $i, "bi_beschreibung");
                 $bi_file = mysql_result($abfrage, $i, "bi_file");

                Hier überschreibst du den Inhalt der Variablen, mit jedem Schleifendurchgang. In den Variablen steht dann nur das Ergebnis des letzten Schleifendurchgangs.

                Baue 2 Arrays auf:
                $bi_beschreibung[$i] = mysql_result($abfrage, $i, "bi_beschreibung");
                $bi_file[$i] = mysql_result($abfrage, $i, "bi_file");
                        ^^^^

                $bi_kategorie = mysql_result($abfrage, $i, "bi_kategorie");

                Diese Zeile brauchst Du auch nicht, den hier steht ja immer die gleiche (ausgewählte) Kategorie.

                Und nun: $x=0;

                $beschreibung=$bi_beschreibung[$x]; 1. Bild
                $file=$bi_file[$x]; 1. File

                $x++:

                $beschreibung=$bi_beschreibung[$x]; 2. Bild
                $file=$bi_file[$x]; 2. File

                $x--;

                $beschreibung=$bi_beschreibung[$x]; 1. Bild
                $file=$bi_file[$x]; 1. File

                Grüsse
                Mike

                --
                Freunde kommen und gehen. Feinde sammeln sich an.
                1. danke für die schnelle antwort mike!

                  nun schaut das ganze so aus:

                  <?php

                  include ("../data.inc.php");

                  $abfrage = mysql_query("Select * from bilder where bi_kategorie=1 order by bi_id desc", $conn);

                  $zeilen = mysql_num_rows($abfrage);

                  for ($i=0; $i<$zeilen; $i++)
                   {

                  //$bi_beschreibung = mysql_result($abfrage, $i, "bi_beschreibung");
                   //$bi_file = mysql_result($abfrage, $i, "bi_file");

                  $bi_beschreibung[$i] = mysql_result($abfrage, $i, "bi_beschreibung");
                   $bi_file[$i] = mysql_result($abfrage, $i, "bi_file");

                  $x=0;

                  $beschreibung=$bi_beschreibung[$x];
                   $file=$bi_file[$x];

                  $x++;

                  $beschreibung=$bi_beschreibung[$x];
                   $file=$bi_file[$x];

                  $x--;

                  $beschreibung=$bi_beschreibung[$x];
                   $file=$bi_file[$x];
                   }
                   ?>

                  <?php echo "<img src=files/$file><br>$beschreibung<br>"; ?>

                  da ich ein bisschen begriffstützig bin, frage ich nun nochmal wie das mit dem weiter und zurück innerhalb der datei läuft?

                  danke nochmals im voraus!

                  holgi

                  1. Moin Holgi,

                    $x=0;
                     $beschreibung=$bi_beschreibung[$x];
                     $file=$bi_file[$x];
                     $x++;
                     $beschreibung=$bi_beschreibung[$x];
                     $file=$bi_file[$x];
                     $x--;
                     $beschreibung=$bi_beschreibung[$x];
                     $file=$bi_file[$x];

                    Das gehört natürlich nicht in die Schleife. Das sind doch nur Beispiele wie du jetzt mit letztes und nächstes Bild navigieren kannst.

                    da ich ein bisschen begriffstützig bin, frage ich nun nochmal wie das mit dem weiter und zurück innerhalb der datei läuft?

                    Jetzt bist du wieder dran mit nachdenken. Ich kann die doch nicht den ganzen fertigen Code geben.

                    Grüsse
                    Mike

                    --
                    Freunde kommen und gehen. Feinde sammeln sich an.
                    1. Das gehört natürlich nicht in die Schleife. Das sind doch nur Beispiele wie du jetzt mit letztes und nächstes Bild navigieren kannst.

                      ich raffs einfach nicht

                      <?php

                      include ("../data.inc.php");

                      $abfrage = mysql_query("Select * from bilder where bi_kategorie=1 order by bi_id desc", $conn);
                       $zeilen = mysql_num_rows($abfrage);

                      for ($i=0; $i<$zeilen; $i++)
                       {

                      //$bi_id = mysql_result($abfrage, $i, "bi_id");
                       //$bi_beschreibung = mysql_result($abfrage, $i, "bi_beschreibung");
                       //$bi_file = mysql_result($abfrage, $i, "bi_file");
                       //$bi_kategorie = mysql_result($abfrage, $i, "bi_kategorie");
                       $bi_beschreibung[$i] = mysql_result($abfrage, $i, "bi_beschreibung");
                       $bi_file[$i] = mysql_result($abfrage, $i, "bi_file");

                      }
                      $x=0;

                      $beschreibung=$bi_beschreibung[$x];
                      $file=$bi_file[$x];
                      echo "<img src=files/$file><br>";

                      $x--;

                      $beschreibung=$bi_beschreibung[$x];
                      $file=$bi_file[$x];

                      echo "<a href=bilder.php?id=$x>zur&uuml;ck</a>";

                      $x++;

                      $beschreibung=$bi_beschreibung[$x];
                      $file=$bi_file[$x];
                      echo "<a href=bilder.php?id=$x>vor</a>";

                      ?>

                      wie muss ich die ganze sach verlinken um zum nächsten bzw. zum vorigen bild zu gelangen? bin ich wenigstens ungefähr auf dem richtigen weg?

                      1. Moin Holgi,

                        <?php

                        include ("../data.inc.php");

                        $currentPic=$_GET['currentPic'];

                        $abfrage = mysql_query("Select * from bilder where bi_kategorie=1 order by bi_id desc", $conn);
                         $zeilen = mysql_num_rows($abfrage);

                        for ($i=0; $i<$zeilen; $i++)
                         {

                        //$bi_id = mysql_result($abfrage, $i, "bi_id");
                         //$bi_beschreibung = mysql_result($abfrage, $i, "bi_beschreibung");
                         //$bi_file = mysql_result($abfrage, $i, "bi_file");
                         //$bi_kategorie = mysql_result($abfrage, $i, "bi_kategorie");
                         $bi_beschreibung[$i] = mysql_result($abfrage, $i, "bi_beschreibung");
                         $bi_file[$i] = mysql_result($abfrage, $i, "bi_file");

                        }

                        $number_pics = count ($bi_file);

                        if ( empty ($currentPic) )
                           $currentPic = 0;

                        if ( ($currentPic > $number_pics) || ($currentPic == $number_pics) )
                           $currentPic = '0';

                        $last = $number_pics - 1;
                        $next = $currentPic + 1;

                        if ($currentPic > 0 )
                           $back = $currentPic - 1;
                        else
                           $currentPic = "0";

                        if ($currentPic > 0 )
                           $nav=$back;
                        else
                           $nav=$last;

                        echo "<a href=bilder.php?id=$nav>zur&uuml;ck</a>";
                        echo "<a href=bilder.php?id=$next>vor</a>";

                        ?>

                        Ich hoffe dieser Ansatz hilft die weiter.

                        Grüsse
                        Mike

                        --
                        Freunde kommen und gehen. Feinde sammeln sich an.
                        1. muss mal wieder nerven...

                          den ersten datensatz zeigt es jetzt an, jedoch zeigt er bei vor und zurück << http://www.wohnart-hilpert.at/bilder/bilder.php?id=1 >> an, obwohl die nächste id 3 sein müsste  (es gibt keine id 2).

                          an was kann das liegen?

                          danke

                          Holgi

                          $abfrage = mysql_query("Select * from bilder where bi_kategorie=1 order by bi_id asc", $conn);
                           $zeilen = mysql_num_rows($abfrage);
                           $currentPic=$_GET['currentPic'];
                           for ($i=0; $i<$zeilen; $i++)
                           {

                          $bi_beschreibung[$i] = mysql_result($abfrage, $i, "bi_beschreibung");
                           $bi_file[$i] = mysql_result($abfrage, $i, "bi_file");

                          }

                          $number_pics = count ($bi_file);

                          if ( empty ($currentPic) )
                             $currentPic = 0;

                          if ( ($currentPic > $number_pics) || ($currentPic == $number_pics) )
                             $currentPic = '0';

                          $last = $number_pics - 1;
                          $next = $currentPic + 1;

                          if ($currentPic > 0 )
                             $back = $currentPic - 1;
                          else
                             $currentPic = "0";

                          if ($currentPic > 0 )
                             $nav=$back;
                          else
                             $nav=$last;

                          $x=0;
                          $beschreibung=$bi_beschreibung[$x];
                          $file=$bi_file[$x];

                          echo "<img src=files/$file height=200>";
                          echo "<a href=kuechen.php?id=$nav>zur&uuml;ck</a>";
                          echo "<a href=kuechen.php?id=$next>vor</a>";

                          ?>

                          1. muss mal wieder nerven...

                            den ersten datensatz zeigt es jetzt an, jedoch zeigt er bei vor und zurück << http://www.wohnart-hilpert.at/bilder/kuechen.php?id=1 >> an, obwohl die nächste id 3 sein müsste  (es gibt keine id 2).

                            an was kann das liegen?

                            danke

                            Holgi

                            $abfrage = mysql_query("Select * from bilder where bi_kategorie=1 order by bi_id asc", $conn);
                             $zeilen = mysql_num_rows($abfrage);
                             $currentPic=$_GET['currentPic'];
                             for ($i=0; $i<$zeilen; $i++)
                             {

                            $bi_beschreibung[$i] = mysql_result($abfrage, $i, "bi_beschreibung");
                             $bi_file[$i] = mysql_result($abfrage, $i, "bi_file");

                            }

                            $number_pics = count ($bi_file);

                            if ( empty ($currentPic) )
                               $currentPic = 0;

                            if ( ($currentPic > $number_pics) || ($currentPic == $number_pics) )
                               $currentPic = '0';

                            $last = $number_pics - 1;
                            $next = $currentPic + 1;

                            if ($currentPic > 0 )
                               $back = $currentPic - 1;
                            else
                               $currentPic = "0";

                            if ($currentPic > 0 )
                               $nav=$back;
                            else
                               $nav=$last;

                            $x=0;
                            $beschreibung=$bi_beschreibung[$x];
                            $file=$bi_file[$x];

                            echo "<img src=files/$file height=200>";
                            echo "<a href=kuechen.php?id=$nav>zur&uuml;ck</a>";
                            echo "<a href=kuechen.php?id=$next>vor</a>";

                            ?>

                            edit: hab den dateinamen editiert...das problem ist immer noch da.

                          2. Moin Holgi,

                            $x=0;
                            $beschreibung=$bi_beschreibung[$x];
                            $file=$bi_file[$x];

                            Jetzt wirst du aber nervig. Du must auch ein bißchen denken.
                            Du schreibst $x=0; Also ist $x immer 0

                            Das muss natürlich heisen:
                            $beschreibung=$bi_beschreibung[$currentPic];
                            und
                            $file=$bi_file[current_Pic];

                            Jetzt bastellst du bitte selbst, like SELF

                            Grüsse
                            Mike

                            --
                            Freunde kommen und gehen. Feinde sammeln sich an.
              2. Hallo Holgi!

                Du willst doch pro Seite ein Bild anzeigen, oder? Und auf jeder Seite soll ein "zurück"- und ein "weiter"-Button vorhanden sein, richtig?

                $abfrage = mysql_query("Select * from bilder where bi_kategorie=1 order by bi_id desc", $conn);

                Hinweis: Eine SQL-Query endet immer mit einem Semikolon.

                BTW: kein "SELECT * ...", siehe hierzu:
                        dclp-FAQ: 16.14. Warum soll ich nicht SELECT * schreiben?
                        http://www.dclp-faq.de/q/q-sql-select.html

                Vorschlag:

                Zähle alle Datensätze mit einer ersten SQL-Abfrage und speichere die Anzahl in eine Variable.

                In einer zweiten SQL-Abfrage begrenzt du das Ergebnis mit "LIMIT ?, 1". Wobei "?" die aktuell anzuzeigende Datensatz ist.

                Deine SQL-Abfrage sortiert deine Tabelle nach der ID und mit der von mir o.g. geschilderten Abfolge, kannst du einen Datensatz nach dem anderen bzw. eine ID nach der anderen auslesen bzw. ausgeben.

                Ob ein "zurück"- oder "weiter"-Button möglich ist, kannst du anhand der aktuellen Position und der Gesamtanzahl der Datensätze ermitteln.

                Schau dir die folgende Seite an und abstriehiere deine Problem von dem dort angegebenen Beispiel. Somit wäre dann dein $limit immer 1.
                   dclp-FAQ: 17.10. Ich habe eine Tabelle mit n Einträgen und möchte auf jeder Seite m davon anzeigen
                   http://www.dclp-faq.de/q/q-mysql-seitenweise.html

  2. Hallo Holgi!

    • ID  INT_autoincrement + PS
    • Beschreibung VCHAR
    • File VCHAR
    • Kategorie INT

    Ich habe 3 Kategorien (Österreich, Deutschland, Sonstige). Nun habe ich für jede Kategorie eine php-site
    erstellt wo die einzelnen kategorien herausgefiltert werden. Mit Hilfe von einem "zurück" und
    "weiter"-Button möchte ich, dass der Benutzer die Bilder der jeweiligen Kategorie ansehen kann.

    Wie kann ich das am Besten machen, das mit der ID scheint mir ein bisschen unlogisch, da sie verschiedener
    Kategorie sind und manche ID's wieder gelöscht werden.

    Also... Ein Skript, welchem die Kategorie übergeben wird (die Kategorie-ID):

    ...
     $kategorie = irgendeine_validierungs_funktion($_GET["kategorie"]);
     ...
     SELECT Bilder.Beschreibung,
            Bilder.File
       FROM Bilder
      WHERE Bilder.Kategorie = $kategorie
      LIMIT $start, $limit
      ...

    Wie du das Durchblättern hinbekommst, erfährst du hier:
       dclp-FAQ: 17.10. Ich habe eine Tabelle mit n Einträgen und möchte auf jeder Seite m davon anzeigen
       http://www.dclp-faq.de/q/q-mysql-seitenweise.html

    Ich bin kein PHP-Spezialist, deshalb bitte ich euch um Hilfe!

    Das wird noch! Kauf dir am Besten ein Buch für PHP-Anfänger. Ansonsten gibt es noch das PHP-Handbuch online unter http://de.php.net/manual/de/. Für viele Standard-Fragen und -Probleme gibt es noch die dclp-FAQ unter http://www.dclp-faq.de/.

    Viel Erfolg!