Strings vergleichen // If Anweisung "will nicht"?

ImDoomed

Mitglied
Hallo, ich bin grade dabei ein kalender zu programmieren, ansich weis ich zwar wie es gehn sollte aber es will noch nicht ganz so wie ich will.

Theorie:
Code:
for (Monatsgesamttage i++ usw..) {
  if ( datum(aus der DB) == tagesdatum) {
      echo <td> kurztext, feldfrabe usw..;
  }
}

Mein Prob ist, dass die If-Anweisung nicht funktioniert, obwohl beide Variablen jeweils Strings sind kann ich keinen Abgleich bekommen. Ich habe Test-Daten in der DB, die sich mit dem Datum überschneiden müssen. Und wenn ich $tagabgleich einzeln ausgebe habe ich theoretisch mehrere Treffer.
Ich habe das Gefühl, dass sich meine Variable in der If-Anweisung in "NULL" ändert, aber keine Ahnung warum.

PHP:
//Auszug
			for($i = 1; $i <= $gesamt_tage; $i++){
				$sqlarray = mysql_fetch_array($sqlquery);
				
				if ($i <= 9){
					$tagabgleich = $datum_year.'-'.$datum_month.'-0'.$i;
				} else {
					$tagabgleich = $datum_year.'-'.$datum_month.'-'.$i;
				}

				var_dump($sqlarray['datum_anfang']);//string(10) "2010-06-18
				echo ' = $sqlarray'.'<br>';//geht

				var_dump($tagabgleich);//string(10) "2010-06-01
				echo ' = $tagabgleich'.'<br>';//geht
				
				if ($sqlarray['datum_anfang'] == $tagabgleich){//nur funktioniert es hier nicht
					echo "--HIT--";
					echo '<br>';
				}
 
Mal als ganz unscheinbare Vermutung. Liegt es unter Umständen, möglicherweise und auch nur ganz vielleicht daran, dass "18" ungleich "01" ist? :rolleyes:
 
lol der war gut.. sagte ich nedd dass tagesabgleich in einer for schleife durch läuft.. 01 bis 30.. da wird doch evtl eine 18 vor kommen oder?

Bei Teste und herumspielen, bin ich zu folgendem gekommen und könnte mir da wer erklären warum ich nach der if-anweisung NULL in meinem SQL-Array habe?
PHP:
for ($i = 0; $i <= $sqlarray = mysql_fetch_array($sqlquery); $i++){
						
					var_dump($sqlarray['datum_anfang']);
					echo ' = $sqlarray'.'<br>';//geht
					if ($sqlarray['datum_anfang'] == $tagabgleiche){
						var_dump($sqlarray['datum_anfang']);
						echo ' = $sqlarray'.'<br>';//nichts
						var_dump($tagabgleich);
						echo ' = $tagabgleich'.'<br>';//geht
					}			
				}
 
Zuletzt bearbeitet:
lol der war gut.. sagte ich nedd dass tagesabgleich in einer for schleife durch läuft..

Das sah in deinem Beispiel allerdings anders aus.

Warum das var_dump beim zweiten mal NULL ausgibt kann ich dir nicht beantworten. Aber was ist das denn für eine For-Schleife? Mich würde es da wundern wenn diese mehr als 1 mal durchläuft da du als Bedingung übergibts, dass $i <= ARRAY sein muss.
 
Du machst ein var_dump auf $tagabgleich. Prüfen tutst du aber auf $tagabgleiche
Also, was denn nun?
 
Für jeden Datensatz einmal durch laufen..

PHP:
for ($i = 0; $i <= $sqlarray = mysql_fetch_array($sqlquery); $i++){
								
					var_dump($sqlarray['datum_anfang']);
					echo ' = $sqlarray'.'<br>';//nichts		
				}

Ergibt in der Ausgabe:
Code:
string(10) "2010-06-01" = $sqlarray
string(10) "2010-06-18" = $sqlarray
string(10) "2010-06-22" = $sqlarray
string(10) "2010-06-20" = $sqlarray
string(10) "2010-06-02" = $sqlarray

Dennoch beantwortet es die Frage nicht warum beides jeweils Strings sind, aber der abgleich nicht funktioniert?!
 
Um für jeden Datensatz einen Schleifendurchlauf zu machen, gibt es deutlich schönere Methoden:
PHP:
while( $row = mysql_fetch_array($result) ){
}
 
PHP:
echo ' = $sqlarray'.'<br/>';
// ist eh falsch

// wenn Ausgabe einer Variablen in quotes geschehen soll dann doppelte quotes
echo " = $sqlarray".'<br/>';
mfg chmee
 
und um alle Tage des Monats zu prüfen solltest du mit Timestamps arbeiten und nicht mit Strings

PHP:
<?php
//Connection zur DB herstellen
include_once('connect.php');
 
//Testdaten
$month = 3;
$year = 2010;

//erster und letzter Tag des Monats ermitteln
$firstDayOfMonth = 1;
$lastDayOfMonth = date('j', mktime(0, 0, 0, $month+1, 0, $year));

//Abfrage auf DB
$sql = 'SELECT UNIX_TIMESTAMP(DATE(datetime)) AS myDate FROM date';
$result = mysql_query($sql);
$row = mysql_fetch_array($result);

for ($i = $firstDayOfMonth; $i <= $lastDayOfMonth; $i++){
    $day = mktime(0, 0, 0, $month, $i, $year);

    if($day == $row['myDate']){
        //TODO anithing
        echo date('d M Y', $row['myDate']);
    }   
}
?>
 
des mit der if Anweisung war wohl ein streibfehler.. *ups*

nun komm ich rein.


habe aber nun ein anderes prob und zwar wenn ich: in die Gesamttages -Schleife, den Sqlquery (for oder while) aus gebe erzeug ich irgendwie einen loop. Kennt ihr zufällig ne gute idee wie man des lösen könnte?

Ich will je "Tag" einmal die SQL-Array durch forsten und wenn das Datum stimmt soll er die <td> mit Kurztext und der jeweiligen Farbe schreiben. Oder ist diese vorgehensweise ungeschickt und falls ja gibt es eine bessere Lösung?
 
Zurück