Thread Verfasser: Catzenjaeger
Thread ID: 964
Thread Info
Es gibt 16 Beiträge zu diesem Thema, und es wurde 5113 Mal angesehen.
 Thema drucken
Bild aus DB darstellen
Catzenjaeger
In einem Panel möchte ich die letzten Figuren einer DB darstellen lassen. Die Bilder werden eingesendet und in einer Tabelle namens DB_FIGURE_IMAGES mit folgenden Spalten abgelegt:

figure_images_image_id mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
figure_images_figure_id varchar(100) NOT NULL DEFAULT '',
figure_images_image varchar(100) NOT NULL DEFAULT '',
figure_images_thumb varchar(100) NOT NULL DEFAULT '',
figure_images_sorting varchar(50) NOT NULL DEFAULT '',
figure_images_language VARCHAR(50) NOT NULL DEFAULT '".LANGUAGE."',

Die Bilder selbst werden im Infusionsverzeichnis unter Figures/images (das Original) bzw unter Figures/images/thumbs als Thumb gespeichert

Meine DB Abfrage sieht so aus:
Zitat: 
$result = dbquery(
"SELECT tb.figure_id, tb.figure_submitter, tb.figure_freigabe, tb.figure_pubdate, tb.figure_scale, tb.figure_title, tb.figure_manufacturer, tb.figure_brand, tb.figure_datestamp, tb.figure_cat, tbc.figure_cat_id, tbc.figure_cat_name, tbu.user_id, tbu.user_name, tbu.user_status, tbu.user_avatar, tbm.figure_manufacturer_name, tbb.figure_brand_name, tby.figure_year_id, tby.figure_year, tbs.figure_scale_id, tbs.figure_scale_name, tbi.figure_images_image_id, tbi.figure_images_image, tbi.figure_images_thumb FROM ".DB_FIGURE_ITEMS." tb
LEFT JOIN ".DB_USERS." tbu ON tb.figure_submitter=tbu.user_id
INNER JOIN ".DB_FIGURE_CATS." tbc ON tb.figure_cat=tbc.figure_cat_id
INNER JOIN ".DB_FIGURE_MANUFACTURERS." tbm ON tbm.figure_manufacturer_id = tb.figure_manufacturer
INNER JOIN ".DB_FIGURE_BRANDS." tbb ON tbb.figure_brand_id = tb.figure_brand
INNER JOIN ".DB_FIGURE_SCALES." tbs ON tbs.figure_scale_id = tb.figure_scale
INNER JOIN ".DB_FIGURE_YEARS." tby ON tby.figure_year_id = tb.figure_pubdate
INNER JOIN ".DB_FIGURE_IMAGES." tbi ON tbi.figure_images_figure_id = tb.figure_id ......
".(multilang_table("FI") ? "WHERE figure_language='".LANGUAGE."' AND" : "WHERE")." tb.figure_freigabe='0'
ORDER BY figure_datestamp DESC LIMIT 0,10");


der rote part -- dort wollte ich das Bild suchen lassen aber wie kann man das eingrenzen bzw filtern das das erste gefundene Bild was die gleiche "figur_id" wie die figur hat? Es können ja bis zu 10 Bilder hochgeladen werden pro Figur. Ich dachte mit LIMIT geht das aber scheint nicht so.

darstellen wollte ich das ganze dann so: (nur Ausschnitt)
Zitat: if ($data['figure_images_image'] == "") {
echo "<td class='side-small'><a href='".INFUSIONS."figurelib/figures.php?figure_id=".$data['figure_id']."' class=''>\n<img src='".INFUSIONS."figurelib/images/default.png"."' alt='".trimlink($data['figure_title'],50)."' title='".trimlink($data['figure_title'],100)."' style='border:0px;max-height:60px;max-width:60px' /></td>";
} else {

echo "<td class='side-small'><a href='".INFUSIONS."figurelib/figures.php?figure_id=".$data['figure_id']."' class=''>\n<img src='".$data['figure_images_image']."' alt='".trimlink($data['figure_title'],100)."' title='".trimlink($data['figure_title'],50)."' style='border:0px;max-height:60px;max-width:60px' /></td>";


würde jemand helfen :) DANKE schon einmal
Bearbeitet von Catzenjaeger am 15.06.2016 um 18:01
 
Wemi
Am einfachsten:

Lass den INNER JOIN für die Bilder weg und starte eine erneute Anfrage innerhalb der While Schleife darunter.


Joins sind nicht immer die beste Lösung.
"Es geht hier um die Frage, ob die Menschheit ohne Religion besser dastünde. Und ich sagte: ja" Ben Moore
 
Catzenjaeger
ok das sollte machbar sein .. danke .. aber wie bekomme ich dann erste Bild?

es werden ja bis zu 10 Bilder unter der gleichen
figure_images_figure_id

abgelegt ... heisst da sind dann 10 Bilder mit der gleichen figure_id aber unterschiedlichen automatisch vergebenen DB_ID

ich brauche ja nur das erste Bild davon und weiss nicht wie das auswählen kann.
 
Wemi
Hier kannst du das Limit ja auf 1 setzen.

du kannst aber auch

Code 

figure_image=dbarray($deinquery);



Also while schleife, dann wird dir dir das letzte Bild angezeigt.
"Es geht hier um die Frage, ob die Menschheit ohne Religion besser dastünde. Und ich sagte: ja" Ben Moore
 
Catzenjaeger
so was? -->

Code 


         $result = dbquery("SELECT
            tb.figure_id, 
            tb.figure_freigabe,
            tbi.figure_images_image_id,
            tbi.figure_images_image,
            tbi.figure_images_thumb FROM ".DB_FIGURE_ITEMS." tb
         INNER JOIN ".DB_FIGURE_IMAGES." tbi ON tbi.figure_images_figure_id = tb.figure_id
         ".(multilang_table("FI") ? "WHERE figure_language='".LANGUAGE."' AND" : "WHERE")." tb.figure_freigabe='0'
         ORDER BY figure_datestamp DESC LIMIT 0,1");

         while($data = dbarray($result)){



Aber da ist ja wieder ein INNER JOIN nötig weil ich ja in zwei Tabellen muss und die figur mit der einf´eindeutigen figure_id Identifizieren muss

ich habe mal nach while geggeolt aber für ein Anfänger ist das echt das hart: https://www.php-einfach.de/php-tutori...schleifen/
 
John Doe
Whileschleifen sind im Grunde ganz einfach und nur dann kompliziert, wenn man den Sinn dahinter nicht erkennt.

Eine while-Schleife dient dazu, Aktionen durchzuführen solange eine vorher bestimmte Bedingung erfüllt ist.

Der Grundaufbau einer while Schleife ist deshalb auch denkbar einfach:

Code 

while (Bedingung ist wahr) {
    entsprechenden Code ausführen;
}



Es gibt auf den meisten PHP-Seiten auch dieses berühmt-berüchtigte Beispiel, in der einfach eine Zahl um eins erhöht und ausgegeben wird bis die Zahl 5 erreicht:

Code 

$x = 1;

while($x <= 5) {
    echo "Die Zahl ist: $x <br>";
    $x++;
}



Im ersten Step wird die in der Schleife genutzte Variable "x" auf den Wert 1 gesetzt. Die Whileschleife prüft dann, ob die Zahl kleiner als 5 ist. Ist das der Fall (Bedingung) wird der Text ausgegeben und die Zahl um 1 erhöht ($x++).
Daraufhin wird die Schleife erneut durchlaufen, wieder geprüft usw. Das Ganze läuft dann soweit bis die Variable den Wert "5" erreicht.

Ich hoffe ich konnte dir das Ganze damit jetzt etwas näher bringen :)
Dieses Mitglied wurde gelöscht!
 
Catzenjaeger
ok aber das umsetzen in meinem Fall ist kompliziert:

Zitat: while (DB_FIGURE_ITEM figure_id == DB_FIGURE_IMAGES figure_images_figure_id AND das erste Bild von den 10 gespeicherten ($x <= 1) {
zeige mir hier dann das Bild Nimmer 1 an;
}


so wäre doch erstmal die Denkweise oder?
Bearbeitet von Catzenjaeger am 14.06.2016 um 15:53
 
Wemi
Oh Mann!

du hast für deine erste Abfrage doch auch irgendwo das
while($data=dbarray($result)){
// Dein ganzer Code mit dem echo Krams drin
}

Und da zwischen setzt du die erneute Anfrage. Und du brauchst da dann keinen Join.

Code 

 $result = dbquery("SELECT
           figure_images_image_id,
            figure_images_image,
            figure_images_thumb FROM ".DB_FIGURE_IMAGES." WHERE figure_images_figure_id='".$data['figures_id']."' LIMIT 0,1");
$image=dbarray($result);



Eine ganz einfache und simple Datenbankanfrage. Warum kompliziert, wenn es doch so einfach ist.

$data['figures_id'] kommt dann aus deiner ersten Abfrage. Also entsprechend anpassen.
"Es geht hier um die Frage, ob die Menschheit ohne Religion besser dastünde. Und ich sagte: ja" Ben Moore
 
Catzenjaeger
Smile ja für euch Profis ist das einfach Smile
danke für die Aufklärung ich habs zwar immer noch raus aber probiere das mal irgendwie Shock

Das Problem ist ja nur das es nichts anzeigt weil es ja mehrere Bilder gibt mit gleicher ID (also der figure_id)
 
John Doe
Genau aus diesem Grund habe ich dir die GRUNDLAGEN erklärt.
Du machst einfach den Fehler, beim Hausbau zuerst das Dach zu bauen statt das Fundament zu giessen....

Vielleicht solltest du erstmal mit kleineren Dingen anfangen und dich mit den Grundlagen auseinandersetzen. Deine FigureLIB wurde, wenn ich das jetzt mal so grob überfliege mehr von den Supportern hier als von dir selbst programmiert und ich weiss nicht ob das wirklich im Sinne des Erfinders ist Wink
Dieses Mitglied wurde gelöscht!
 
Catzenjaeger
ich weiss ich bin ja lernwillig und habe auch viel selbst hinbekommen. .. ich wusste worauf ich mich einlasse aber was soll ich machen ... ich brauche das nun einmal ... Uns das projekt ist doch geil zum lernen.
Wenn ihr mal überlegt vor 3 Wochen habe ich noch simple Dinge gefragt die ich jetzt beherrsche also soooom schlimm ist ja auch nicht

Jetzt komme ich mir wieder blöd vor weil ich so oft frage ... so als wenn ich jetzt als Last hier immForum bin..
 
John Doe
Datenbankabfragen- und ausgaben haben in erster Linie überhaupt nichts mit Fusion 9 zu tun. Einzig die Fusioneigenen Konstanten und Variablen gilt es zu beachten. Das ändert aber nichts an der zu beachtenen grundlegenden Syntax Wink

Ich spreche dir ja auch den in meinen Augen lobenswerten "Lerneffekt" nicht ab, aber für einen Anfänger ist so eine Infusion wie deine schon ziemlich Hardcore. Nicht falsch verstehen, ich finde es super dass du lernen willst. Aber auch Lernen beginnt bei den Grundlagen oder hast du in der ersten Klasse schon komplizierte Texte flüssig gelesen? Und wenn du das kleine "EinmalEins" nicht beherrschst wird Bruchrechnen und Wurzelziehen für dich ein Mysterium bleiben Wink

Auch uns hier ist das Wissen nicht mit in die Wiege gelegt worden, auch wir mussten lernen, fragen, nachfragen und ausprobieren. Wichtig ist einfach, dass man sich zu Anfang nicht "übernimmt" denn dann sind Frustmomente vorprogrammiert. Erfolgserlebnisse sind wichtig für den Lernprozess Smile
Bearbeitet von John Doe am 14.06.2016 um 16:18
Dieses Mitglied wurde gelöscht!
 
Catzenjaeger
Darf ich noch einmal etwas fragen?????

ich möchte gerne die Darstellung der Bilder der jeweiligen Figuren so abfangen, dass wenn kein Bild hochgeladen wurde ein Platzhalter-Bild angezeigt wird.

Leider funzt das bei dieser Abfrage nicht .. ich gehe davon aus, dass es daran liegt weil ja eigentlich Bilder da sind ... heißt die variable $data['figure_image_thumb'] ist ja immer == 1 sowie ein Bild im Ordner ist

Irgendwie müsste ich noch herausfiltern das nur bei Figuren wo kein Bild geuploadet wurde ein Platzhalter Bild erscheint.

Könnt ihr noch einmal helfen?

Danke :)

Code 

$result2 = dbquery("SELECT
               figure_images_image_id,
               figure_images_image,
               figure_images_thumb
               FROM ".DB_FIGURE_IMAGES."
               WHERE figure_images_figure_id='".$data['figure_id']."' LIMIT 0,1");
      
      while($data2 = dbarray($result2)){

      // WENN KEIN BILD VORHANDEN DANN ZEIGE PLATZHALTER BILD
         if ($data2['figure_images_thumb'] == ""){
            echo "<td class='side-small'><a href='".INFUSIONS."figurelib/figures.php?figure_id=".$data['figure_id']."' class=''>\n<img src='".INFUSIONS."figurelib/images/default.png"."' alt='".trimlink($data['figure_title'],50)."' title='".trimlink($data['figure_title'],100)."' style='border:0px;max-height:40px;max-width:40px' /></td>";
         } else { 
 
            echo "<td class='side-small'><a href='".INFUSIONS."figurelib/figures.php?figure_id=".$data['figure_id']."' class=''>\n<img src='".($data2['figure_images_thumb'] ? THUMBS_FIGURES.$data2['figure_images_thumb'] : INFUSIONS.$inf_folder."/images/default.png")."' alt='".trimlink($data['figure_title'],100)."' title='".trimlink($data['figure_title'],50)."' style='border:0px;max-height:40px;max-width:40px' /></td>";
         }
      }


Bearbeitet von Catzenjaeger am 15.06.2016 um 18:08
 
Wemi
Wenn kein Bild, dann ist es 0, bzw. PDO wird dir einen Fehler melden.

Abfabgen kannst du es so:

Code 

$result2 = dbquery("SELECT
               figure_images_image_id,
               figure_images_image,
               figure_images_thumb
               FROM ".DB_FIGURE_IMAGES."
               WHERE figure_images_figure_id='".$data['figure_id']."' LIMIT 0,1");
// Fragen, ob überhaupt ein Ergebnis kommt
if(dbrows($result2)){
     
      while($data2 = dbarray($result2)){
            echo "<td class='side-small'><a href='".INFUSIONS."figurelib/figures.php?figure_id=".$data['figure_id']."' class=''>\n<img src='". THUMBS_FIGURES.$data2['figure_images_thumb'] ."' alt='".trimlink($data['figure_title'],100)."' title='".trimlink($data['figure_title'],50)."' style='border:0px;max-height:40px;max-width:40px' /></td>";
         }
      }else{
<td class='side-small'><a href='".INFUSIONS."figurelib/figures.php?figure_id=".$data['figure_id']."' class=''>\n<img src='".INFUSIONS.$inf_folder."/images/default.png")."' alt='".trimlink($data['figure_title'],100)."' title='".trimlink($data['figure_title'],50)."' style='border:0px;max-height:40px;max-width:40px' /></td>";
}


"Es geht hier um die Frage, ob die Menschheit ohne Religion besser dastünde. Und ich sagte: ja" Ben Moore
 
Catzenjaeger
danke ... klappt aber nicht Seite bleibt leer ...

Code 

         // WHILE SCHLEIFE FÜR DAS HOLEN DES BILDES AUS ORDNER / ORDNER MUSS IN infusion.db.php deklariert sein!
      $result2 = dbquery("SELECT
               figure_images_image_id,
               figure_images_image,
               figure_images_thumb
               FROM ".DB_FIGURE_IMAGES."
               WHERE figure_images_figure_id='".$data['figure_id']."' LIMIT 0,1");
// Fragen, ob überhaupt ein Ergebnis kommt
if(dbrows($result2)){
     
      while($data2 = dbarray($result2)){
       
       
            echo "<td class='side-small'>
            <a href='".INFUSIONS."figurelib/figures.php?figure_id=".$data['figure_id']."' class=''>\n<img src='".INFUSIONS."figurelib/images/default.png"."' alt='".trimlink($data['figure_title'],50)."' title='".trimlink($data['figure_title'],100)."' style='border:0px;max-height:40px;max-width:40px' /></td>";
         } else { 
 
            echo "<td class='side-small'>
            <a href='".INFUSIONS."figurelib/figures.php?figure_id=".$data['figure_id']."' class=''>\n<img src='".($data2['figure_images_thumb'] ? THUMBS_FIGURES.$data2['figure_images_thumb'] : INFUSIONS.$inf_folder."/images/default.png")."' alt='".trimlink($data['figure_title'],100)."' title='".trimlink($data['figure_title'],50)."' style='border:0px;max-height:40px;max-width:40px' /></td>";
         }
      
      }



SO AUCH NICHT

Code 

            $result2 = dbquery("SELECT
                  figure_images_image_id,
                  figure_images_image,
                  figure_images_thumb
               FROM ".DB_FIGURE_IMAGES."
               WHERE figure_images_figure_id='".$data['figure_id']."'
               LIMIT 0,1");
      
      while($data2 = dbarray($result2)){
      if(dbrows($result2)){
         
            echo "<td class='side-small'>
            <a href='".INFUSIONS."figurelib/figures.php?figure_id=".$data['figure_id']."' class=''>\n<img src='".($data2['figure_images_thumb'] ? THUMBS_FIGURES.$data2['figure_images_thumb'] : INFUSIONS.$inf_folder."/images/default.png")."' alt='".trimlink($data['figure_title'],100)."' title='".trimlink($data['figure_title'],50)."' style='border:0px;max-height:40px;max-width:40px' /></td>";
               
      // WENN KEIN BILD VORHANDEN DANN ZEIGE PLATZHALTER BILD
         
            
         } else { 
 echo "<td class='side-small'>
            <a href='".INFUSIONS."figurelib/figures.php?figure_id=".$data['figure_id']."' class=''>\n<img src='".INFUSIONS."figurelib/images/default.png"."' alt='".trimlink($data['figure_title'],50)."' title='".trimlink($data['figure_title'],100)."' style='border:0px;max-height:40px;max-width:40px' /></td>";
         
         }
      }


Bearbeitet von Catzenjaeger am 15.06.2016 um 19:44
 
Wemi
An der falschen Stelle eingebaut?

Was gibt dir denn ein echo von $data['figure_id'] kurz vor deiner Datenbankanfrage aus?
"Es geht hier um die Frage, ob die Menschheit ohne Religion besser dastünde. Und ich sagte: ja" Ben Moore
 
Springe ins Forum: