Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] array_search erwischt nicht alle ?

Einklappen

Neue Werbung 2019

Einklappen
Dieses Thema ist geschlossen.
X
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] array_search erwischt nicht alle ?

    Hi Leute,
    ich habe einen Urlaubskalender, in den ich alle timestamps zwischen zwei validen Daten und die user_id in die DB eintrage.
    Auf Urlaubskalenderseite selbst habe ich mehrere Schleifen und möchte die URLAUBSTage mit einer anderen class versehen, als die anderen.

    Ich suche mit array_search in dem Array aus der DB. Leider habe ich das Problem, daß wenn ich Daten von jetzt bis 31.12.2004 eintrage, er mir nicht alle anzeigt, obwohl er alle aus der DB holt. Wenn ich den Dezember Urlaub eintrage, stellt er ihn dar.
    Ich tippe, daß meine Schleife, ach ich weiß auch nicht, ich brauche dringend Schlaf.

    Hier kommt Kurt: (In abgespeckter Form)
    Code:
    <?php
    for ($i=0; $i<count($Data); $i++) {
    	$content.='
    	
    	<table border="0" cellpadding="0" cellspacing="0" class="tddblue">
    		<tr><td valign="top">'.$Data[$i]['vorname'].''.$Data[$i]['nachname'].'</td>
    		</tr>'."\n";
    	if ($Data[$i]['id']==$curr_user_id) {
    		for ($j=0; $j<count($Month); $j++) {
    			$trClass = ($j%2)? 'tdlblue':'tdwhite';
    			$tdClass = ($j%2)? 'tdwhite':'tdlblue';
    			$content.= '
    		<tr class="tddblue">
    			<td valign="top">
    				<table border="0" cellpadding="0" cellspacing="1">
    					<tr>
    						<td valign="top" width="100"><font class="copy">'.$Month[$j]['name'].'</font>
    						</td>'."\n";
    			// aktueller Timestamp u. Anzahl d. Tage d. Monats
    			$currMonthTS = mktime(0,0,0,$Month[$j]['number'],1,$curr_year);
    			$daysInCurrMonth = date('t', $currMonthTS);
    			for ($k=1; $k<=$daysInCurrMonth; $k++) {
    				$currDayTS = mktime(0,0,0,$Month[$j]['number'],$k,$curr_year);
    				
    				// hier erwischt er nicht alle Tage aus der DB !!!!!!!!!!!!!!!!!!
    				$bool = (array_search(strval($currDayTS), $Vacancy))? true:false;
    				
    				$currTDClass = ($bool)? 'red':$tdClass;
    				$currFClass = ($bool)? 'copywhite':'copy';
    				$content.= '
    						<td class="'.$currTDClass.'">'.$k.'</a></td>'."\n";
    			}
    			$content.= '
    					</tr>
    				</table>
    			</td>
    		</tr>'."\n";
    		}
    	}
    	$content.= '
    	</table>
    	'."\n";
    }
    ?>
    Hat jemand ne Idee oder schneller Durchblick?
    Kaffee reicht nicht mehr.

    Andre


  • #2
    Re: array_search erwischt nicht alle ?

    @android
    >Hat jemand ne Idee oder schneller Durchblick?

    Nur 'ne Idee. Du speicherst offenbar den Timestamp von 0:00:00 ab. Und damit kann es bezüglich der Sommerzeit Probleme geben, wenn Du das bei mktime() nicht beachtest. Es wäre wesentlich günstiger, wenn Du in der Tabelle die Urlaubstage im DATE Format (YYYY-MM-DD) ablegen würdest.

    >Kaffee reicht nicht mehr.

    Wann reicht der je... <ggg>

    Kommentar


    • #3
      hm .. warum gestaltest du nicht einfach deine SQL-abfragen anders?
      privater Blog

      Kommentar


      • #4
        Was heißt anders? Du meinst, nicht für jeden Tag einen TS eintragen?
        Oder die Tabelle eh anders denken?

        Was meinst Du denn mit anders?

        Andre

        Kommentar


        • #5
          ich meinte das jetzt so, dass du schon in der SQL-abfrage nur die daten ausliest, die du benötigst.

          über effizienz denke ich gerade nicht nach
          privater Blog

          Kommentar


          • #6
            Zitat von android51
            Was heißt anders? Du meinst, nicht für jeden Tag einen TS eintragen?
            Oder die Tabelle eh anders denken?
            Da müßte man raten, weil man nicht weiß, wie Dein Konzept aussieht. Dient die Tabelle als Terminkalender für mehrere Teilnehmer oder beinhaltet sie nur die Termine einer einzelnen Person?

            Kommentar


            • #7
              Die Tabelle hat die Felder user_id und date, beide als int().
              D.h. für jeden User schreibe ich da für jeden Tag einen TS rein.

              Ich probier gerade
              Code:
              for ($k=1; $k<=$daysInCurrMonth; $k++) {
              				$currDayTS = mktime(0,0,0,$Month[$j]['number'],$k,$curr_year);
              				$altText = $Day[date('w', $currDayTS)].', '.date('d.m.Y', $currDayTS);
              				$kOUT = ($k<10)? '0'.$k:$k;
              				$kOUT = ($k>$daysInCurrMonth)? '':$kOUT;
              				
              				//
              				$sql = "SELECT date FROM vacancy WHERE user_id=".$curr_user_id." AND date=".$currDayTS;
              				echo $sql."
              ";
              				$RS = mysql($dbName, $sql);
              				//
              				$bool = (mysql_num_rows($RS))? true:false;
              				
              				$currTDClass = ($bool)? 'red':$tdClass;
              				$currFClass = ($bool)? 'copywhite':'copy';
              aber es ist genau dasselbe Problem...
              er schreibt mir alle bis Ende Oktober raus, obwohl ich bis 31.12 eingetragen habe...

              Kommentar


              • #8
                Zitat von android51
                Die Tabelle hat die Felder user_id und date, beide als int().
                Du hättest ein Problem weniger, wenn Du DATE verwenden würdest.

                aber es ist genau dasselbe Problem...
                er schreibt mir alle bis Ende Oktober raus, obwohl ich bis 31.12 eingetragen habe...
                Nochmal:
                Zitat von Handbuch
                is_dst kann bei Sommerzeit auf 1 gesetzt werden. 0 bedeutet Winter-/Normalzeit, -1 (Vorgabewert) heißt, dass nicht bekannt ist, ob Sommer- oder Winterzeit herrscht. Falls nicht bekannt ist, ob Sommer- oder Winterzeit herrscht, versucht PHP selbst dies herauszufinden. Das kann zu unerwarteten (aber dennoch korrekten) Ergebnissen führen.
                Der "Mitternachts"-Timestamp ist ungeeignet.

                Kommentar


                • #9
                  Jetzt ist der Kaffee fertig und die Lösung parat. Hätt' ich auch früher kochen können
                  Danke für den Tipp mit dem DATE-Typ in der DB.
                  Ich habe die Tabelle in die Felder user_id, date_1, date_2 geändert und mache folgendes:
                  Code:
                  $currMonthTS = mktime(1,1,1,$Month[$j]['number'],1,$curr_year);
                  $daysInCurrMonth = date('t', $currMonthTS);
                  for ($k=1; $k<=$daysInCurrMonth; $k++) {
                  	$kOUT = ($k<10)? '0'.$k:$k;
                  	$currMonthOUT = ($Month[$j]['number']<10)? '0'.$Month[$j]['number']:$Month[$j]['number'];
                  	$currDate = $curr_year."-".$currMonthOUT."-".$kOUT;
                  	$currDayTS = mktime(1,1,1,$Month[$i]['number'],$j,$currYear);
                  	$altText = $Day[date('w', $currDayTS)].', '.date('d.m.Y', $currDayTS);
                  	
                  	$bool = (in_array($currDate, $Vacancy_1))? true:$bool;
                  	$bool = ($bool==true&&$sec_bool)? false:$bool;
                  	$currTDClass = ($bool)? 'red':$tdClass;
                  	$currFClass = ($bool)? 'copywhite':'copy';
                  	$content.= '
                  			<td width="18" valign="middle" align="center" class="'.$currTDClass.'">'.$kOUT.'</td>'."\n";
                  	$sec_bool = (in_array($currDate, $Vacancy_2))? true:$sec_bool;
                  }

                  Mannomann, watt für'n Dreck.
                  Jetzt bin ich urlaubsreif.
                  Gleich mal eintragen :wink:

                  Kommentar


                  • #10
                    Zitat von android51
                    Jetzt bin ich urlaubsreif.
                    Gleich mal eintragen :wink:
                    Jou, jetzt wird der ja hoffentlich angezeigt. <ggg>

                    -> closed

                    Kommentar

                    Lädt...
                    X