Ergebnis automatisch farblich markieren

fixxxxxi

Erfahrenes Mitglied
Ich möchte Ergebnisse aus einer Datenbank auslesen, und diese farblich markieren. Das funktioniert soweit auch ganz gut, solange das Ergebnis des einen Teams nicht 0 ist. Bei gleichviel Punkten wird es auch farblich richtig gelb angezeigt.

Wenn jedoch ein Team 0 Punkte hat, wird dieses Ergebnis einfach schwarz angezeigt. Um es zu verdeutlichen was ich meine, hänge ich ein Screenshot mit an.

Was muss ich ändern, um dieses Problem zu lösen?

PHP:
if($dd['confirmscore']=='0'){
						$ergebnis = '<span style="color: green;"><b>live</b></span>';
		}else{
   	if($dd[score1] && $dd[score2]){
   	
   if(array_sum(explode("||", $dd[score1])) > array_sum(explode("||", $dd[score2])))
	  $ergebnis='<span style="color: green;">'.array_sum(explode("||", $dd[score1])).'</span>:<span style="color: red;">'.array_sum(explode("||", $dd[score2])).'</span>';
	 elseif(array_sum(explode("||", $dd[score1])) < array_sum(explode("||", $dd[score2])))
	  $ergebnis='<span style="color: red;">'.array_sum(explode("||", $dd[score1])).'</span>:<span style="color: green;">'.array_sum(explode("||", $dd[score2])).'</span>';
	 elseif(array_sum(explode("||", $dd[score1])) == array_sum(explode("||", $dd[score2])))
	  $ergebnis='<span style="color: orange;">'.array_sum(explode("||", $dd[score1])).'</span>:<span style="color: orange;">'.array_sum(explode("||", $dd[score2])).'</span>';
	}
	  }

Vielen Dank im Vorraus

Lg Chris
 

Anhänge

  • screen.jpg
    screen.jpg
    120,7 KB · Aufrufe: 51
Liegt das vielleicht daran das das Team nicht 0 sondern NULL Punkte hat?

In diesem Fall würde keiner der IF-Abfragen zutreffen.

Gruß Thomas
 
Hi,

ich würde sagen, da fehlt noch ein wesentlicher Teil in dem Codeschnipsel. Wo (unter welcher Bedingung) wird denn da der Punktestand ohne Färbung ausgegeben?

LG
 
Das kann möglich sein. Nur wie gebe ich an, das wenn es leer ist, also NULL in der Datenbank eingetragen ist, das dann acuh farblich markiert wird.

Ich habe bereits versucht mit if empty also:

PHP:
if(!$dd[live_status]){
  if((empty($dd[score1]) || empty($dd[team2_score])) || (preg_match ('/0/', $dd[score1]) || preg_match('/0/', $dd[score2]))){
   if(date('d.m.Y', $dd[start_time]) == date('d.m.Y',time()))
	 $start=date('H:i', $dd[start_time]);
   else
	 $start=date('d.m.', $dd[start_time]);  
  }else{
  	if($dd[score1] && $dd[score2]){
	 if(array_sum(explode("||", $dd[score1])) > array_sum(explode("||", $dd[score2])))
	  $start='<span style="color: green;">'.array_sum(explode("||", $dd[score1])).'</span>:<span style="color: red;">'.array_sum(explode("||", $dd[score2])).'</span>';
	 elseif(array_sum(explode("||", $dd[score1])) < array_sum(explode("||", $dd[score2])))
	  $start='<span style="color: red;">'.array_sum(explode("||", $dd[score1])).'</span>:<span style="color: green;">'.array_sum(explode("||", $dd[score2])).'</span>';
	 elseif(array_sum(explode("||", $dd[score1])) == array_sum(explode("||", $dd[score2])))
	  $start='<span style="color: orange;">'.array_sum(explode("||", $dd[score1])).'</span>:<span style="color: orange;">'.array_sum(explode("||", $dd[score2])).'</span>';
	}
  }
 }else
 $start='<span style="color: green;"><b>live</b></span>';
  echo '<tr >
probiert, aber komme irgendwie nicht weiter. Wie müsste der Code dann korrekterweise aussehen?

LG Chris

So. Entschuldigt den Doppelpost. Ich poste jetzt mal den gesammten Quellcode der PHP. Da scheint mir auch einiges doppelt und unsinnig zu sein, aber ich komm einfach nicht weiter. =/

PHP:
<?php
echo '<table width="100%" cellspacing="0" cellpadding="0">';
$result=safe_query("SELECT * FROM ".PREFIX."cup_matches ORDER BY date DESC LIMIT 0, 10");

$n=1;
  while($dd=mysql_fetch_array($result)){
 
//++++++++ START
 
 $date=date("d.m.Y, H:i", $dd[date]);
 $ergebnis = $dd['score1'].':'.$dd['score2'];

 $cupID = $_GET['cupID'];
 

 
 //BIS HIERHER T ALLES
 
 
		if($dd['confirmscore']==1)
			$match_status='closed';
		elseif($dd['confirmscore']==0 && $dd['inscribed'] == 0)
			$match_status='open';
		elseif($dd['einspruch']==1)
			$match_status='<font color="red">protest</font>';
		else
			$match_status='open';
		if($dd['confirmscore']=='0'){
						$ergebnis = '<span style="color: green;"><b>live</b></span>';
		}else{
   	if($dd[score1] && $dd[score2]){
   	
   if(array_sum(explode("||", $dd[score1])) > array_sum(explode("||", $dd[score2])))
	  $ergebnis='<span style="color: green;">'.array_sum(explode("||", $dd[score1])).'</span>:<span style="color: red;">'.array_sum(explode("||", $dd[score2])).'</span>';
	 elseif(array_sum(explode("||", $dd[score1])) < array_sum(explode("||", $dd[score2])))
	  $ergebnis='<span style="color: red;">'.array_sum(explode("||", $dd[score1])).'</span>:<span style="color: green;">'.array_sum(explode("||", $dd[score2])).'</span>';
	elseif(array_sum(explode("||", $dd[score1])) == array_sum(explode("||", $dd[score2])))
	  $ergebnis='<span style="color: orange;">'.array_sum(explode("||", $dd[score1])).'</span>:<span style="color: orange;">'.array_sum(explode("||", $dd[score2])).'</span>';
	}
	  }
 
//++++++++ END 
 
 
 
 
  


  if(!$dd[live_status]){
  if((empty($dd[score1]) || empty($dd[team2_score])) || (preg_match ('/xx/', $dd[score1]) || preg_match('/xx/', $dd[score2]))){
   if(date('d.m.Y', $dd[start_time]) == date('d.m.Y',time()))
	 $start=date('H:i', $dd[start_time]);
   else
	 $start=date('d.m.', $dd[start_time]);  
  }else{
  	if($dd[score1] && $dd[score2]){
	 if(array_sum(explode("||", $dd[score1])) > array_sum(explode("||", $dd[score2])))
	  $start='<span style="color: green;">'.array_sum(explode("||", $dd[score1])).'</span>:<span style="color: red;">'.array_sum(explode("||", $dd[score2])).'</span>';
	 elseif(array_sum(explode("||", $dd[score1])) < array_sum(explode("||", $dd[score2])))
	  $start='<span style="color: red;">'.array_sum(explode("||", $dd[score1])).'</span>:<span style="color: green;">'.array_sum(explode("||", $dd[score2])).'</span>';
	 elseif(array_sum(explode("||", $dd[score1])) == array_sum(explode("||", $dd[score2])))
	  $start='<span style="color: orange;">'.array_sum(explode("||", $dd[score1])).'</span>:<span style="color: orange;">'.array_sum(explode("||", $dd[score2])).'</span>';
	}
  }
 }else
 $start='<span style="color: green;"><b>live</b></span>';
  echo '<tr > 
                      <td width="32">&nbsp;</td>
                      <td>



<table width="100%" border="0" cellpadding="0" cellspacing="0">
  
    
     <td height="32">
    <a><b><font color="#39669e"><b>'.getclanname($dd[clan1]).' vs. '.getclanname($dd[clan2]).'</b></font></b></a><br>
    <a><font color="#808080">'.$date.'</font></a></td> 
    
    <td style="font-size: 10px;" align="right"><b> '.$ergebnis.'</b></td>    

    </tr>
</table>' ;
	$n++;
  }
echo '</table>';
?>

LG
 
Hi,

was ist das denn für'n Gewusel? Viel (Code) hilft viel? :p

Also diesen Block:

PHP:
 if(!$dd[live_status]){
  if((empty($dd[score1]) || empty($dd[team2_score])) || (preg_match ('/xx/', $dd[score1]) || preg_match('/xx/', $dd[score2]))){
   if(date('d.m.Y', $dd[start_time]) == date('d.m.Y',time()))
     $start=date('H:i', $dd[start_time]);
   else
     $start=date('d.m.', $dd[start_time]);  
  }else{
      if($dd[score1] && $dd[score2]){
     if(array_sum(explode("||", $dd[score1])) > array_sum(explode("||", $dd[score2])))
      $start='<span style="color: green;">'.array_sum(explode("||", $dd[score1])).'</span>:<span style="color: red;">'.array_sum(explode("||", $dd[score2])).'</span>';
     elseif(array_sum(explode("||", $dd[score1])) < array_sum(explode("||", $dd[score2])))
      $start='<span style="color: red;">'.array_sum(explode("||", $dd[score1])).'</span>:<span style="color: green;">'.array_sum(explode("||", $dd[score2])).'</span>';
     elseif(array_sum(explode("||", $dd[score1])) == array_sum(explode("||", $dd[score2])))
      $start='<span style="color: orange;">'.array_sum(explode("||", $dd[score1])).'</span>:<span style="color: orange;">'.array_sum(explode("||", $dd[score2])).'</span>';
    }
  }
 }else
 $start='<span style="color: green;"><b>live</b></span>';

kannst Du eigentlich einstampfen. Dort wird eine Variable $start gefüllt, die ich nirgends sonst verwendet oder ausgegeben sehe.

Dein eigentliches Problem liegt hier:

PHP:
...

// Hier belegst Du $ergebnis ohne farbliche Formatiereung vor
$ergebnis = $dd['score1'].':'.$dd['score2'];
...

// Wozu diese Bedingung? Wenn einer der beiden Punktestände 0 ist,
// liefert die Abfrage natürlich false
if($dd[score1] && $dd[score2]){

   if(array_sum(explode("||", $dd[score1])) > array_sum(explode("||", $dd[score2])))
      $ergebnis='<span style="color: green;">'.array_sum(explode("||", $dd[score1])).'</span>:<span style="color: red;">'.array_sum(explode("||", $dd[score2])).'</span>';
   elseif(array_sum(explode("||", $dd[score1])) < array_sum(explode("||", $dd[score2])))
      $ergebnis='<span style="color: red;">'.array_sum(explode("||", $dd[score1])).'</span>:<span style="color: green;">'.array_sum(explode("||", $dd[score2])).'</span>';
   elseif(array_sum(explode("||", $dd[score1])) == array_sum(explode("||", $dd[score2])))
      $ergebnis='<span style="color: orange;">'.array_sum(explode("||", $dd[score1])).'</span>:<span style="color: orange;">'.array_sum(explode("||", $dd[score2])).'</span>';
   }
}

LG
 
Schau doch zuerst mal direkt in der Datenbank nach wie die Ergebnisse dort gespeichert sind.

Wenn wirklich NULL in den Feldern steht und dadurch der Fehler entsteht, wäre es meiner Meinung nach am einfachsten wenn Du die Feldeigenschaften direkt in der DB so einstellst das in dem entsprechenden Feld der Default = 0 eingetragen ist.

Gruß Thomas
 
Ich habe in der Datenbank in der entsprechenden Tabelle (cup_matches), das Match herrausgesucht, welches zu 0 eingetragen ist. In der Datenbank, steht jedoch die Zahl 0 und nicht das Zahlwort NULL. Also kann es daran auch nicht liegen.

Meine PHP sihet nach der Aufräumaktion von euch so aus:

PHP:
<?php
echo '<table width="100%" cellspacing="0" cellpadding="0">';
$result=safe_query("SELECT * FROM ".PREFIX."cup_matches ORDER BY date DESC LIMIT 0, 10");

$n=1;
  while($dd=mysql_fetch_array($result)){
 
 $date=date("d.m.Y, H:i", $dd[date]);
 $ergebnis = $dd['score1'].':'.$dd['score2'];
 $cupID = $_GET['cupID'];

 
		if($dd['confirmscore']==1)
			$match_status='closed';
		elseif($dd['confirmscore']==0 && $dd['inscribed'] == 0)
			$match_status='open';
		elseif($dd['einspruch']==1)
			$match_status='<font color="red">protest</font>';
		else
			$match_status='open';
		if($dd['confirmscore']=='0'){
						$ergebnis = '<span style="color: green;"><b>live</b></span>';
		}else{
   	if($dd[score1] && $dd[score2]){
   	
   if(array_sum(explode("||", $dd[score1])) > array_sum(explode("||", $dd[score2])))
	  $ergebnis='<span style="color: green;">'.array_sum(explode("||", $dd[score1])).'</span>:<span style="color: red;">'.array_sum(explode("||", $dd[score2])).'</span>';
	 elseif(array_sum(explode("||", $dd[score1])) < array_sum(explode("||", $dd[score2])))
	  $ergebnis='<span style="color: red;">'.array_sum(explode("||", $dd[score1])).'</span>:<span style="color: green;">'.array_sum(explode("||", $dd[score2])).'</span>';
	elseif(array_sum(explode("||", $dd[score1])) == array_sum(explode("||", $dd[score2])))
	  $ergebnis='<span style="color: orange;">'.array_sum(explode("||", $dd[score1])).'</span>:<span style="color: orange;">'.array_sum(explode("||", $dd[score2])).'</span>';
	}
	  }
  echo '<tr > 
       <td width="32">&nbsp;</td>
       <td><table width="100%" border="0" cellpadding="0" cellspacing="0">
       <td height="32">
       <a><b><font color="#39669e"><b>'.getclanname($dd[clan1]).' vs. '.getclanname($dd[clan2]).'</b></font></b></a><br>
       <a><font color="#808080">'.$date.'</font></a></td> 
       <td style="font-size: 10px;" align="right"><b> '.$ergebnis.'</b></td>    
       </tr>
       </table>' ;
	    $n++;
  }
echo '</table>';
?>

Wenn ich folgende Zeile lösche:
PHP:
...
$ergebnis = $dd['score1'].':'.$dd['score2'];
...

dann steht kein Ergebnis mehr in diesem Spiel sondern "Resource id #79" an dessen Stelle. Alle anderen Ergebnisse, bleiben jedoch, sogar farblich markiert, richtig stehen.

LG
 
Zuletzt bearbeitet:
Hi,

Du solltest nicht die Zeile löschen, sondern die markierte Bedingung prüfen.
Und warum da jetzt eine Resource in $ergebnis stehen soll, ist aus Deinem Code auch nicht ersichtlich...

LG
 
So... ich habs nach etwas fummeln dann doch hinbekommen. Danke für eure Mithilfe. Das Ergebnis sieht jetzt so aus:

PHP:
<?php
echo '<table width="100%" cellspacing="0" cellpadding="0">';
$result=safe_query("SELECT * FROM ".PREFIX."cup_matches ORDER BY date DESC LIMIT 0, 10");

$n=1;
  while($dd=mysql_fetch_array($result)){
 
 $date=date("d.m.Y, H:i", $dd[date]);
 $ergebnis = $dd['score1'].':'.$dd['score2']; {
 
 if($dd['score1']=='0')
	  $ergebnis='<span style="color: red;">'.$dd['score1'].'</span>:<span style="color: green;">'.$dd['score2'].'</span>';
 elseif($dd['score2']=='0')
	  $ergebnis='<span style="color: green;">'.$dd['score1'].'</span>:<span style="color: red;">'.$dd['score2'].'</span>';} 
 
		if($dd['confirmscore']=='0'){
						$ergebnis = '<font color="green">live</font>';
		if($dd['einspruch']=='1')
						$ergebnis = '<font color="red">protest</font>';
		}else
  {
   if($dd[score1] && $dd[score2])
   	
  {    	  
	 if($dd['score1'] > $dd['score2'])
	  $ergebnis='<span style="color: green;">'.$dd['score1'].'</span>:<span style="color: red;">'.$dd['score2'].'</span>';
	 elseif($dd['score1'] < $dd['score2'])
	  $ergebnis='<span style="color: red;">'.$dd['score1'].'</span>:<span style="color: green;">'.$dd['score2'].'</span>';
	 elseif($dd['score1'] == $dd['score2'])
	  $ergebnis='<span style="color: orange;">'.$dd['score1'].'</span>:<span style="color: orange;">'.$dd['score2'].'</span>';
  }

	}
  echo '<tr > 
       <td width="32">&nbsp;</td>
       <td><table width="100%" border="0" cellpadding="0" cellspacing="0">
       <td height="32">
       <a><b><font color="#39669e"><b>'.getclanname($dd[clan1]).' vs. '.getclanname($dd[clan2]).'</b></font></b></a><br>
       <a><font color="#808080">'.$date.'</font></a></td> 
       <td style="font-size: 10px;" align="right"><b> '.$ergebnis.'</b></td>    
       </tr>
       </table>' ;
	    $n++;
  }
echo '</table>';
?>
 
Hi,

warum bearbeitest Du denn den "zu Null"-Fall getrennt? Die Logik ist doch die gleiche, ein 14:3 wird genauso dargestellt, wie ein 14:0. Ausserdem würde ein 0:0 jetzt immer noch falsch dargestellt.

Nochmal: überlege Dir den Sinn der if-Abfrage

PHP:
if($dd[score1] && $dd[score2])

LG
 
Zurück