Schusselfehler Kontrollstruktur? PHP / MySQL

ptolein

Erfahrenes Mitglied
Hi,

heute mal wieder mit (wahrscheinlich) einem Schusselfehler. Ich habe eine Datenbank aus der eine Automarke bzw.-sparte ausgelesen werden soll. Falls eines der beiden nicht vorhanden ist, soll jeweils das vorhandene ausgegeben werden. Allerding überspringt er immer diesen Part der Abfrage.
Woran liegt es? Ich sehe den Wald vor lauter Bäumen schon nicht mehr ....
Oder gibt es eine bessere Idee? Sowas wie "wenn leer, dann..."

Code:
(die Werte von $werte[21] and $werte[22] kommen aus einer anderen -funktionierenden- Abfrage und geben Zahlen von 1-9 oder "" zurück)
PHP:
  if (($werte[21] and $werte[22]=="0") or ($werte[21] and $werte[22]=="") or ($werte[21] and $werte[22]==0)  ){
 		 		echo "<td valign=\"top\">&nbsp; / &nbsp;</td>"; 		#beide leer
  			}
 			elseif (($werte[21] and $werte[22]!="0") or ($werte[21] and $werte[22]!="")){
 				$markespartesql="select marke.marke, sparte.sparte 
  				from marke, sparte
 				where sparte.spartenid = $werte[22]
 				and marke.markenid = $werte[21]";
 				$markesparteanfrage=mysql_query($markespartesql);
 				$daten=mysql_fetch_row($markesparteanfrage);
 		 		echo "<td valign=\"top\">$daten[0] / $daten[1]</td>"; #marke sparte 
  			}
  			elseif (($werte[21]!="0") or ($werte[21]!="")  ){
 		 	$markespartesql="select marke.marke	from marke	where marke.markenid = $werte[21]";
 				$markesparteanfrage=mysql_query($markespartesql);
 				$daten=mysql_fetch_row($markesparteanfrage);
 		 		echo "<td valign=\"top\">$daten[0] / </td>"; 		#nur marke
  			}
  			elseif (($werte[22]!="0") or ($werte[22]!="") ){
 		 	$markespartesql="select sparte.sparte from sparte	where sparte.spartenid = $werte[22]";
 				$markesparteanfrage=mysql_query($markespartesql);
 				$daten=mysql_fetch_row($markesparteanfrage);
 		 		echo "<td valign=\"top\">/ $daten[0]</td>"; 	 	#nur sparte
  			}
 
Habe noch vergessen, dass er immer in die erste oder zweite Anweisung springt, die dritte und vierte aber nicht annimmt.
 
ptolein hat gesagt.:
Woran liegt es? Ich sehe den Wald vor lauter Bäumen schon nicht mehr ....

Bei dem Code würde ich aber ehrlich gesagt auch nichts mehr erkennen, wenn du ihn etwas sauberer strukturierst würde ich dir auch helfen können.

Greetz Mirko
 
PHP:
 #beide leer
    if (($werte[21] and $werte[22]=="0") or ($werte[21] and $werte[22]=="") or ($werte[21] and $werte[22]==0)  ){
    
 		 echo "<td valign=\"top\">&nbsp; / &nbsp;</td>"; 	 
    }
    #marke sparte
  elseif (($werte[21] and $werte[22]!="0") or ($werte[21] and $werte[22]!="")){
    		 $markespartesql="select marke.marke, sparte.sparte 
    		 from marke, sparte
    		 where sparte.spartenid = $werte[22]
    		 and marke.markenid = $werte[21]";
    		 $markesparteanfrage=mysql_query($markespartesql);
    		 $daten=mysql_fetch_row($markesparteanfrage);
    		   
    		 echo "<td valign=\"top\">$daten[0] / $daten[1]</td>"; 
     }
   #nur marke
    elseif (($werte[21]!="0") or ($werte[21]!="")  ){
    		 $markespartesql="select marke.marke	
    		 from marke	where marke.markenid = $werte[21]";
    		 $markesparteanfrage=mysql_query($markespartesql);
    		 $daten=mysql_fetch_row($markesparteanfrage);
    
 		 echo "<td valign=\"top\">$daten[0] / </td>"; 		
    }
   #nur sparte
  elseif (($werte[22]!="0") or ($werte[22]!="") ){
    		$markespartesql="select  sparte.sparte 
    		 from  sparte	where sparte.spartenid = $werte[22]";
    		 $markesparteanfrage=mysql_query($markespartesql);
    		 $daten=mysql_fetch_row($markesparteanfrage);
    
 		 echo "<td valign=\"top\">/ $daten[0]</td>"; 		
    }

Besser? ;)

Leider bekomme ich hier trotz rumprobieren den Code nicht so hin wie im Editor. Hoffe Du schaust drüber weg...
 
Also folgendes:
Ich habe eine Tabelle, in der die Marken und Sparten stehen.
Marke kann dabei sein: Mercedes, Fiat, Porsche ....
Sparte kann sein: Transporter, Kleinwagen, LKW ....

Jetzt habe ich eine andere Tabelle, in der die Marke / Sparte mit IDs verknüpft sind. Das Problem ist, wenn eine Marke oder Sparte vom Benutzer nicht angegeben wurde, dann steht "" in dem Feld oder "0".
Frage ich nun in der zweiten Tabelle die Werte ab und es ist ein leeres Feld dabei, dann gibt mir SQL logischerweise einen Fehler zurück, da in der WHERE-Bedingung steht
"Where marke.markenID = $markenID" und die variable den Wert "" hat.

Um das zu umgehen, wollte ich eine Abfrage machen, die nur dann die SQL-Abfrage aufruft, wenn beide Werte Marke / Sparte) ungleich Null sind bzw. NICHT leer sind.
 
Ich kann zwar jetzt mit diesem Beitrag nicht dein Problem lösen, aber ich glaube du hast einen Denkfehler bei der IF Konstruktion(wenn es aber so gewollt ist, ignoriere meinen Beitrag ;) )
PHP:
if (($werte[21] and $werte[22]=="0") or ($werte[21] and $werte[22]=="") or ($werte[21] and $werte[22]==0)  ){

1. Die erste/letzte Bedingung ist doppelt
2. Bei der Bedingung $werte[21] and $werte[22]==0 , versuchst du da Abzufragen ob beide 0 sind? Wenn ja, geht das so nicht, du müsstest dafür
PHP:
$werte[21] == 0 and $werte[22]==0
machen. Bisher schaust du ja, ob die Variable $werte[21] gesetzt ist.

3. Sollte das so gewollt sein, kannst du aber auch eine andere(übersichtlichere) Struktur nehmen die das widerspiegelt was du mit deinem Konstrukt erzeugen willst
PHP:
if( $were[21] and ($werte[22]=="0" or $werte[22]=="")){...
 
@Kerwin:
erstmal herzlichen Dank für Deine Hilfe.
Ich habe die Befehle auch so umgestrickt, wie Du gesagt hast. (Deine Punkte 1 und 2) . Allerdings springt er immernoch nur in die Schleife, in der beide Werte (Marke und Sparte) oder keiner von beiden vorhanden ist.
Die beiden Bedingungen, wo jeweils nur ein Wert vorhand ist, werden ignoriert. Habe ich noch was vergessen?
PHP:
         if ((($werte[21] == "0") and ($werte[22] == "0")) or (($werte[21] == "") and ($werte[22] == ""))  ){
      
        echo "<td valign=\"top\">&nbsp; / &nbsp;</td>"; #beide leer
     
      }
  
   elseif ((($werte[21] != "0") and ($werte[22] != "0")) or (($werte[21] != "") and ($werte[22] != ""))){
      
                         $markespartesql="select marke.marke, 
     sparte.sparte 
                         from marke, sparte
    where sparte.spartenid = $werte[22]
                         and marke.markenid = $werte[21]";
                         $markesparteanfrage=mysql_query($markespartesql);
                         $daten=mysql_fetch_row($markesparteanfrage);
      
                             echo "<td valign=\"top\">$daten[0] / $daten[1]</td>";     #marke sparte 
     
      }
     
      elseif (($werte[21]!="0") or ($werte[21]!="")  ){
      
                         $markespartesql="select marke.marke    
     from marke    
  where marke.markenid = $werte[21]";
                         $markesparteanfrage=mysql_query($markespartesql);
                         $daten=mysql_fetch_row($markesparteanfrage);
      
                             echo "<td valign=\"top\"> $daten[0] / </td>";             #nur marke
     
      }
     
      elseif (($werte[22]!="0") or ($werte[22]!="") ){
      
                         $markespartesql="select  sparte.sparte 
     from  sparte    
  where sparte.spartenid = $werte[22]";
                         $markesparteanfrage=mysql_query($markespartesql);
                         $daten=mysql_fetch_row($markesparteanfrage);
     
      echo "<td valign=\"top\"> / $daten[0]</td>";             #nur sparte
     
      }

PS: Sorry, aber die Editierung des Quellcodes bekomme ich hier nicht besser hin. Die Select-Anweisung wird immer so zerpflückt... :(
 
Hab ja gesagt das mein Beitrag nicht hilft das Problem zu beheben.

Du kannst die Klammern rund um eine Bedingung auch weglassen, verwirrt nur zu sehr, finde ich.

PHP:
if(($werte[21] == "0" and $werte[22] == "0") or ($werte[21] == "" and $werte[22] == "")){

// oder

if(empty($werte[21]) and empty($werte[22])){
Bei empty() wird er in den elsezweig springen wenn der Wert darin 0 ist, oder aber ""(leer).
Hilft vielleicht zu besseren Übersicht deinerseits. ;)
 
Schade... geändert, aber das Problem bleibt dasselbe.
Leider passiert nichts, wenn einer der beiden Werte ($werte[21] Marke / $werte[21]Sparte) vorhanden ist.
Und ich dachte, es ist eine Kleinigkeit ;)

Hier nochmal der geänderte Code:
PHP:
   			if ( empty($werte[21]) and empty($werte[22])   ){
 		 		echo "<td valign=\"top\"> &nbsp; / &nbsp;</td>"; 		#beide leer
   			}
   
   
 			elseif (($werte[21] != "0" and $werte[22] != "0") or ($werte[21] != "" and $werte[22] != "")){
 				$markespartesql="select marke.marke, 
  sparte.sparte 
  from marke, sparte
 				where sparte.spartenid = $werte[22]
 				and marke.markenid = $werte[21]";
 				$markesparteanfrage=mysql_query($markespartesql);
 				$daten=mysql_fetch_row($markesparteanfrage);
 		 		echo "<td valign=\"top\"> $daten[0] / $daten[1]</td>"; 	#marke sparte 
   			}
   
   
   			elseif ( empty($werte[22])  ){
 		 	$markespartesql="select marke.marke	
  from marke   
  where marke.markenid = $werte[21]";
 				$markesparteanfrage=mysql_query($markespartesql);
 				$daten=mysql_fetch_row($markesparteanfrage);
 		 		echo "<td valign=\"top\"> $daten[0] / </td>"; 			#nur marke
   			}
   
   
   			elseif ( empty($werte[21]) ){
   		    	$markespartesql="select  sparte.sparte 
  from  sparte	
  where sparte.spartenid = $werte[22]";
 				$markesparteanfrage=mysql_query($markespartesql);
 				$daten=mysql_fetch_row($markesparteanfrage);
 		 		echo "<td valign=\"top\"> / $daten[0]</td>"; 			#nur sparte
   			}
 
Zurück