Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

if/else Fallunterscheidung

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
ben78
PostRank 4
PostRank 4
Beiträge: 153
Registriert: 30.03.2007, 17:15

Beitrag von ben78 » 25.02.2010, 03:44

Hi Leutz,

ich habe eine MySQL-Tabelle, in der pro Datensatz eine Grafik zugeordnet ist.

Jedoch besteht nicht für jeden Datensatz eine Grafik, sodass bei der Ausgabe mittels PHP & HTML für das fehlende Bild immer ein rotes Kreuz, Fragezeichen etc. (Browserabhängig) angezeigt wird. Anstelle dieser Symbole hätte ich aber gerne eine eigene Grafik die besagt, das kein Bild vorhanden ist.

Diese Grafik habe ich bereits erstellt und mittels CSS als Hintergrundbild in die gewünschte Spalte gesetzt, sodass bei fehlendem Bild das Hintergrundbild angezeigt wird. Ist für mich aber - wegen Breite und Höhe - nicht die perfekte Lösung. Also es kommt vor, dass das Hintergrundbild breiter oder höher sein kann als das im Vordergrund angezeigte Bild...Schaut a bissl blöd aus...

Wie kann ich dafür sorgen, dass mir immer dann das "KeinFoto Bild" angezeigt wird, sobald für einen Datensatz kein Bild vorhanden ist???

Hierzu habe ich mittels PHP folgendes Probiert. Und ich bin mir auch sicher, dass das die richtige Vorgehensweise für mein Vorhaben ist. Aber ich bekomme den Code nicht ganz korrekt hin.

Ich habe das in meinem Skript:

Code: Alles auswählen

echo "<tr class='tabelle' >";
echo "<td class='bild'><img id='product-pic' alt='Produkt' src='".
htmlspecialchars&#40;$zeile&#91;'Abbildung'&#93;&#41; . "' /></td>";
echo"</tr>" 
...und will daraus das hier machen. Also eine Fallunterscheidung:

Code: Alles auswählen

if&#40;$zeile&#91;'Abbildung'&#93; == "&#91;b&#93;WAS KOMMT HIER REIN...EMPTY???&#91;/b&#93;"&#41;
  &#123;
    echo "<td class='bild'><img id='product-pic' alt='Abbildung' src='".
htmlspecialchars&#40;$zeile&#91;'Abbildung'&#93;&#41; . "' /></td>";
  &#125;
  else
  &#123;
    echo "<td class='bild'><img id='product-pic' alt='Abbildung' src='".
htmlspecialchars&#40;../../KeinFoto-BILD.jpg&#41; . "' /></td>";
  &#125;  
Die große Tante hat mir nicht viel gebracht.

THX an alle die helfen können.

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


nerd
PostRank 10
PostRank 10
Beiträge: 4023
Registriert: 15.02.2005, 04:02

Beitrag von nerd » 25.02.2010, 05:33

vielleicht willst du wissen ob das bild auf deinem server vorhanden ist?
https://php.net/manual/en/function.file-exists.php

htmlspecialchars(../../KeinFoto-BILD.jpg) - ist in diesem fall nicht korrekt, weil pfadangaben eigentlich keine sonderzeichen wie <>"'& enthalten duerfen.

https://nz.php.net/manual/en/function.urlencode.php waere richtig, falls du leerzeichen oder aehnliches im dateinamen erwartest.
grundsaetzlich solltest du die dateinamen selbst vergeben, bilder skalieren und auf deinem server abspeichern - alles andere macht dir frueher oder spaeter probleme.

Mork vom Ork
PostRank 9
PostRank 9
Beiträge: 2557
Registriert: 08.07.2008, 11:07
Wohnort: Aufm Friedhof.

Beitrag von Mork vom Ork » 25.02.2010, 11:26

ben78 hat geschrieben:

Code: Alles auswählen

echo "<td class='bild'><img id='product-pic' alt='Produkt' src='".
htmlspecialchars&#40;$zeile&#91;'Abbildung'&#93;&#41; . "' /></td>";
...und will daraus das hier machen. Also eine Fallunterscheidung:

Code: Alles auswählen

if&#40;$zeile&#91;'Abbildung'&#93; == "&#91;b&#93;WAS KOMMT HIER REIN...EMPTY???&#91;/b&#93;"&#41;
Die große Tante hat mir nicht viel gebracht.
Dann schaust du mal in den HTML-Code, den dein Skript bei nicht vorhandenem Bild produziert, und setzt genau das, was im betreffenden <img>-Element als src-Attribut ausgegeben wird, in deine if-Bedingung, die den Leer-Fall ansteuert.

w3news
PostRank 8
PostRank 8
Beiträge: 938
Registriert: 10.10.2006, 23:17
Wohnort: Berlin

Beitrag von w3news » 25.02.2010, 14:57

Oder einfach so lassen:

Code: Alles auswählen

if&#40;$zeile&#91;'Abbildung'&#93;&#41; &#123;
echo "Bild aus DB anzeigen";
                                         &#125;
else                                   &#123;
echo "Platzhalten anzeigen lassen";
                                         &#125;
MfG Lars

News, Tarife und Mobilfunk: w3news.de
Mobile Datenflatrates

800XE
PostRank 10
PostRank 10
Beiträge: 5223
Registriert: 02.12.2004, 03:03

Beitrag von 800XE » 25.02.2010, 15:02

ben78 hat geschrieben:

Code: Alles auswählen

if&#40;$zeile&#91;'Abbildung'&#93; == "&#91;b&#93;WAS KOMMT HIER REIN...EMPTY???&#91;/b&#93;"&#41;
Wenns kein Bild gibt, dann gibts dort kein Bild, oder?
(oder steht dort dann doch was drin?)




in der Annahme das "kein Bild = nix steht drin" ist

ich würde den doppelten echo aber weglassen

Code: Alles auswählen

 if &#40; !$zeile&#91;'Abbildung'&#93; &#41; $zeile&#91;'Abbildung'&#93;='../../KeinFoto-BILD.jpg';
oder

Code: Alles auswählen

 if &#40; $zeile&#91;'Abbildung'&#93;=='' &#41; $zeile&#91;'Abbildung'&#93;='../../KeinFoto-BILD.jpg';
nimm das was dir besser im Auge gefällt

=

Code: Alles auswählen

 if &#40; $zeile&#91;'Abbildung'&#93;=='' &#41; $zeile&#91;'Abbildung'&#93;='../../KeinFoto-BILD.jpg';
echo "<td class='bild'><img id='product-pic' alt='Abbildung' src='".
htmlspecialchars&#40;$zeile&#91;'Abbildung'&#93;&#41; . "' /></td>";
Alternative ... wo NIX dort NIX

Code: Alles auswählen

 if &#40; $zeile&#91;'Abbildung'&#93;  &#41; 
echo "<td class='bild'><img id='product-pic' alt='Abbildung' src='".
htmlspecialchars&#40;$zeile&#91;'Abbildung'&#93;&#41; . "' /></td>";
ähm, ne, korektur

Code: Alles auswählen

 
echo "<td class='bild'>";
if &#40; $zeile&#91;'Abbildung'&#93;  &#41; 
echo "<img id='product-pic' alt='Abbildung' src='".
htmlspecialchars&#40;$zeile&#91;'Abbildung'&#93;&#41; . "' />";
echo "</td>";
oder

Code: Alles auswählen

 
if &#40; $zeile&#91;'Abbildung'&#93;  &#41;  $picout="<img id='product-pic' alt='Abbildung' src='". $zeile&#91;'Abbildung'&#93; . "' />"; else $picout='';
echo "<td class='bild'>" . $picout  . "</td>";
und das htmlspecialchar würde ich dort auch nicht machen

ben78
PostRank 4
PostRank 4
Beiträge: 153
Registriert: 30.03.2007, 17:15

Beitrag von ben78 » 26.02.2010, 20:33

Erstmal Danke @all für die vielen Antworten.

Also ich habe entsprechend dem Post von 800XE unten stehenden Code Versucht:
Mir stehen insgesamt 3 Spalten (MySQL-Tabelle) mit jeweils einem Bild zu Verfügung. Erst nach dem alle 3 Spalten (Datensatz abhängig) über keine Pfadangabe zum Bild verfügen, soll das "KeinFotoBild.jpg" angezeigt werden.

Wie Mork vom Ork schon geschrieben hat, habe ich in den Quelltext geschaut. Und noch mal Danke an dieser Stelle für den Tipp. Er ist wirklich sehr hilfreich, Wenn's um's Debuggen geht und man sollte eigentlich selbst auf die Idee kommen....:bad-words: => Das geht an mich...

Wenn also 'Bild1' in der MySQL-Tabelle keinen Pfad hat, dann erscheint automatisch das Wort 'Bild2'...dann 'Bild3' im Quelltext. Die logische Folge: Mir wird das KeinFotoBild.jpg automatisch angezeigt, Sobald Bild1 keinen Pfad hat.

Liegt das vlt. an den beiden ( '...' ) Strichchen am Ende der ersten und zweiten Zeile? Die sagen Doch aus, das exakt das angegeben werden soll, was auch dazwischen steht...oder?
Sollte ich hier Gänsefüschen nehmen?...aber schon probiert, das bringt auch nichts ausser das selbe Ergebnis.

Code: Alles auswählen

if &#40; $zeile&#91;'Bild1'&#93;=='' &#41; $zeile&#91;'Bild1'&#93;='Bild2';
	if &#40; $zeile&#91;'Bild1'&#93;=='Bild2' &#41; $zeile&#91;'Bild1'&#93;='Bild3'; 
	if &#40; $zeile&#91;'Bild1'&#93;=='Bild3' &#41; $zeile&#91;'PicSmall'&#93;='../pfad/KeinFotoBild.jpg'; 
echo "<td class='bild'><img id='product-pic' alt='Abbildung' src='". 
htmlspecialchars&#40;$zeile&#91;'Bild1'&#93;&#41; . "' /></td>"; 
Hierzu habe ich weitere mir erdenkliche Varianten versucht, die ich nicht aufführen will, weil's sonst zu viel wird und die eh nichts gebracht haben.

w3news
PostRank 8
PostRank 8
Beiträge: 938
Registriert: 10.10.2006, 23:17
Wohnort: Berlin

Beitrag von w3news » 26.02.2010, 21:34

Wieso eigentlich immer so kompliziert:

Code: Alles auswählen

if &#40;$zeile&#91;'Bild1'&#93;&#41;
echo "Ausgabe Bild1";

else if &#40;$zeile&#91;'Bild2'&#93;&#41;
echo "Ausgabe Bild2";

else if &#40;$zeile&#91;'Bild3'&#93;&#41;
echo "Ausgabe Bild3";

else
echo "Ausgabe kein Bild";
MfG Lars

News, Tarife und Mobilfunk: w3news.de
Mobile Datenflatrates

nerd
PostRank 10
PostRank 10
Beiträge: 4023
Registriert: 15.02.2005, 04:02

Beitrag von nerd » 26.02.2010, 22:25

optimal weare es natuerlich alle bilder per komma getrennt in die selbe zelle zu schreiben und dann beim auslesen per explode in ein array zu packen und dieses durchlaufen lassen. damit kannst du pro datensatz 3 oder spaeter auch 300 bilder haben ohne was an deinem code zu aendern und du sparst dir den if/else spagetticode ....

ben78
PostRank 4
PostRank 4
Beiträge: 153
Registriert: 30.03.2007, 17:15

Beitrag von ben78 » 26.02.2010, 23:48

Leutz...ich will doch nur wissen, wie ich dafür sorgen kann, dass im Quelltext nicht das Wort Bild2 oder Bild3 sondern lediglich der Pfad, welcher sich in der Spalte Bild2 oder Bild3 meiner MySQL-Tabelle befindet, erscheint.

[EDIT: Nachkorrigiert]

Code: Alles auswählen

if &#40; $zeile&#91;'Bild1'&#93;=='' &#41; $zeile&#91;'Bild1'&#93;='Bild2'; 
   if &#40; $zeile&#91;'Bild2'&#93;=='' &#41; $zeile&#91;'Bild2'&#93;='Bild3'; 
   if &#40; $zeile&#91;'Bild3'&#93;=='' &#41; $zeile&#91;'Bild1'&#93;='../pfad/KeinFotoBild.jpg'; 
echo "<td class='bild'><img id='product-pic' alt='Abbildung' src='". 
htmlspecialchars&#40;$zeile&#91;'Bild1'&#93;&#41; . "' /></td>";
Dieser Code ist bis auf die beiden Platzhalter 'Bild2' und 'Bild3' am Ende der ersten zwei Zeilen einwandfrei O. K..

Ich habe zum Testen anstelle der beiden Platzhalter 'Bild2' und 'Bild3' jeweils einen Pfad angegeben die dann auch korrekt im Quelltext erscheinen.
Zuletzt geändert von ben78 am 27.02.2010, 06:13, insgesamt 3-mal geändert.

Mork vom Ork
PostRank 9
PostRank 9
Beiträge: 2557
Registriert: 08.07.2008, 11:07
Wohnort: Aufm Friedhof.

Beitrag von Mork vom Ork » 26.02.2010, 23:50

ben78 hat geschrieben:Mir stehen insgesamt 3 Spalten (MySQL-Tabelle) mit jeweils einem Bild zu Verfügung. Erst nach dem alle 3 Spalten (Datensatz abhängig) über keine Pfadangabe zum Bild verfügen, soll das "KeinFotoBild.jpg" angezeigt werden.
Um nochmal etwas Verwirrung zu stiften: Benutze SQL statt PHP. Angenommen, deine Spalten sind bild1 bis bild3 benannt und eine leere Spalte enthält korrektweise den Wert null statt "":

select case when bild1 is not null then bild1 when bild2 is not null then bild2 when bild3 is not null then bild3 else "keinbild.png" end as bild where blafasel

Diese Abfrage liefert dir die erste gefüllte Spalte oder "keinbild.png", falls alle leer sind, unter dem Namen bild. PHP-seitig brauchst du dann nichts mehr machen.
Relevant ist der blaue Bereich, diesen kopierst du logischerweise in deine bestehende SQL-Abfrage.

Mork vom Ork
PostRank 9
PostRank 9
Beiträge: 2557
Registriert: 08.07.2008, 11:07
Wohnort: Aufm Friedhof.

Beitrag von Mork vom Ork » 26.02.2010, 23:58

ben78 hat geschrieben:Leutz...ich will doch nur wissen, wie ich dafür sorgen kann, dass im Quelltext nicht das Wort Bild2 oder Bild3 sondern lediglich der Pfad, welcher sich in der Spalte Bild2 oder Bild3 meiner MySQL-Tabelle befindet, erscheint.
Vielleicht schreibst du dir erstmal in Deutsch deine gewünschte Vorgehensweise auf, momentan scheinst du nämlich vom richtigen Ansatz aus deiner Ausgangsfrage auf einen Irrweg gekommen zu sein. Du läufst los, aber bist dir nicht im Klaren darüber, wo das Ziel überhaupt liegt.

Was du möchtest, sieht etwa so aus:

Wenn spalte1 nicht leer, dann gebe spalte1 aus,
ansonsten wenn spalte2 nicht leer, dann gebe spalte2 aus,
ansonsten wenn spalte3 nicht leer, dann gebe spalte3 aus,
ansonsten gebe Kein-Bild-Platzhalter-Bild aus.

Das könntest du beinahe 1:1 in PHP (oder SQL, aber das steht oben bereits, vergleiche es) umsetzen.
Zuletzt geändert von Mork vom Ork am 27.02.2010, 00:02, insgesamt 1-mal geändert.

w3news
PostRank 8
PostRank 8
Beiträge: 938
Registriert: 10.10.2006, 23:17
Wohnort: Berlin

Beitrag von w3news » 27.02.2010, 00:02

@ben78
Weil ich weiß mittlerweile gar nicht mehr worauf du hinaus willst...
MfG Lars

News, Tarife und Mobilfunk: w3news.de
Mobile Datenflatrates

800XE
PostRank 10
PostRank 10
Beiträge: 5223
Registriert: 02.12.2004, 03:03

Beitrag von 800XE » 27.02.2010, 01:21

Mork vom Ork hat geschrieben:Was du möchtest, sieht etwa so aus:

Wenn spalte1 nicht leer, dann gebe spalte1 aus,
ansonsten wenn spalte2 nicht leer, dann gebe spalte2 aus,
ansonsten wenn spalte3 nicht leer, dann gebe spalte3 aus,
ansonsten gebe Kein-Bild-Platzhalter-Bild aus.
Als "Programmcode Beschreibung"

w3news hat geschrieben:Wieso eigentlich immer so kompliziert:

Code: Alles auswählen

if &#40;$zeile&#91;'Bild1'&#93;&#41;
echo "Ausgabe Bild1";

else if &#40;$zeile&#91;'Bild2'&#93;&#41;
echo "Ausgabe Bild2";

else if &#40;$zeile&#91;'Bild3'&#93;&#41;
echo "Ausgabe Bild3";

else
echo "Ausgabe kein Bild";
= Direktausgabe

oder über $Var

Code: Alles auswählen


                                     $picout = ''; 
if &#40; $picout='' && $zeile&#91;'Bild1'&#93; &#41; $picout = $zeile&#91;'Bild1'&#93;;
if &#40; $picout='' && $zeile&#91;'Bild2'&#93; &#41; $picout = $zeile&#91;'Bild2'&#93;;
if &#40; $picout='' && $zeile&#91;'Bild3'&#93; &#41; $picout = $zeile&#91;'Bild3'&#93;;
if &#40; $picout=''                    &#41; $picout = 'noPic.jpg';


// oder im Rückwertsgang
// um die Frage "schon was drin?"
//      bzw     "noch nix drin?" sich zu ersparen

                       $picout = ''; 
if &#40; $zeile&#91;'Bild3'&#93; &#41; $picout = $zeile&#91;'Bild3'&#93;;
if &#40; $zeile&#91;'Bild2'&#93; &#41; $picout = $zeile&#91;'Bild2'&#93;;
if &#40; $zeile&#91;'Bild1'&#93; &#41; $picout = $zeile&#91;'Bild1'&#93;;
if &#40; $picout=''      &#41; $picout = 'noPic.jpg';


// oder .... 
// die "schonwas drin" bzw "noch nix drin"
// Frage über "elseif" abfangen

                           $picout = ''; 
if     &#40; $zeile&#91;'Bild1'&#93; &#41; $picout = $zeile&#91;'Bild1'&#93;;
elseif &#40; $zeile&#91;'Bild2'&#93; &#41; $picout = $zeile&#91;'Bild2'&#93;;
elseif &#40; $zeile&#91;'Bild3'&#93; &#41; $picout = $zeile&#91;'Bild3'&#93;;
else                       $picout = 'noPic.jpg';


//und dann wieder der "einheitliche" echo&#40;&#41;

ben78
PostRank 4
PostRank 4
Beiträge: 153
Registriert: 30.03.2007, 17:15

Beitrag von ben78 » 27.02.2010, 02:21

Wenn spalte1 nicht leer, dann gebe spalte1 aus,
ansonsten wenn spalte2 nicht leer, dann gebe spalte2 aus,
ansonsten wenn spalte3 nicht leer, dann gebe spalte3 aus,
ansonsten gebe Kein-Bild-Platzhalter-Bild aus.
Weil ich weiß mittlerweile gar nicht mehr worauf du hinaus willst...
:oops: Ups und Sorry.

Ich habe nur vergessen die (if-)Bedingungen vor dem Posten aus der Klammer zu löschen. Das stand noch vom herum probieren drinn.

if ( $zeile['Bild1']=='>>Bild2<<' ) $zeile['Bild1']='Bild3';

ben78
PostRank 4
PostRank 4
Beiträge: 153
Registriert: 30.03.2007, 17:15

Beitrag von ben78 » 27.02.2010, 18:00

@Mork vom Ork
Um nochmal etwas Verwirrung zu stiften:...
:P...haha...das kannste in Versalien schreiben...haha...:P

Bin aber trotzdem jedem sehr Dankbar für seine Antwort.

und ich glaube die für mich beste Lösung gefunden zu haben. Und zwar meine ich damit die Erweiterung meiner Query um das hier (von Mork vom Ork):

Code: Alles auswählen

case when bild1 is not null then bild1 when bild2 is not null then bild2 when bild3 is not null then bild3 else "keinbild.png" end as bild
...ich fühle mich gerade so, wie jemand der nicht schwimmen kann und mit seinen Freunden vor einem Schwimmbecken steht wo sie jetzt alle schwimmen wollen und der jemand, der nicht schwimmen kann sich schämt, weil er gerade seinen Freunden gegenüber seine Beichte ablegt, nicht schwimmen zu können...

...aber ich weiß nicht, wie meine Query aussehen muss, wenn ich sie um gewünschtes erweitern will. Habe sämtliche Varianten probiert in google gesucht etc..

:oops: :oops:...könnte mir das evtl. jemand von Euch posten. Sind schon wieder so viele Stunden vor dem Compi verstrichen..:oops: :oops:
...jetzt schäme ich mich aber wirklich.

So sieht meine Query momentan aus:

Code: Alles auswählen

$abfrage = "SELECT DISTINCT * FROM tabelle WHERE";

if &#40;$suchwort&#41; $abfrage .= " MATCH &#40;SpalteA, SpalteB,, SpalteC,&#41;
AGAINST&#40;'" . mysql_real_escape_string&#40;$suchwort&#41; . "'&#41;";

if &#40;$marke&#41;
&#123;
if &#40;$suchwort&#41; $abfrage .= "AND";
$abfrage .= " Marke LIKE '%" . mysql_real_escape_string&#40;$Marke&#41; . "%'";
&#125;
VERY BIG THX @All

Antworten