03. oktober 2008 - 12:26Der er
11 kommentarer og 1 løsning
Udtræk, kan vist gøres bedre?
Hej eksperter
Jeg er igang med at lave et vagt-planlægningssystem i PHP. Jeg bruger følg. kode til at trække vagterne ud fra en MySQL db, og smide dem ind i en tabel på en hjemmeside.
Umiddelbart tror jeg dog at det kan gøres en del smartere/bedre end den måde jeg har gjort det på.
Er der nogen af Jer som kan hjælpe mig med at optimere koden?
Hvorfor? Der er højest 10 brugere på systemet, hvoraf der sjældent logger mere end én på ad gangen, så serveren bliver ikke overbelastet ... Dog vil jeg gerne optimere min "crappy" code lidt, så jeg også selv lærer noget mere af det. :)
Her er koden jeg pt. bruger:
$DayCounter = 1; // Tæller uge-dag, og starter forfra med ny uge. $OddRow = 0; // Skifter farve på hver 2. række $uge = 1; // Hvis den overskrider 10 uger, begynd forfra fra uge 1 i vagt-rotationen $weekStart = date(W, date(U)); $firstMonth= 1; $temp = date(U); $calcTime = date('U');
$dag = 1; while ($dag <= 7) { if ($calcTime == mktime(0,0,0,date(m),date(j),date(Y))) { // Hvis det er dagen derpå, lav baggrundsfarven grøn $isToday = "hourtoday"; $OddRow = "today"; } else { $isToday = "hour"; }
if ( $OddRow == "odd") { // Skift farve på hver anden række $OddRow = ""; } else { $OddRow = "odd"; } echo "\n <tr class=". $OddRow .">\n <td class=". $isToday .">". date("D, j. M",$calcTime) ."</td>\n "; // Indsæt række $vagt = 1; // Vagt nr. 1...2...3...4...5
while ($vagt <= 5){ $myquery = mysql_query("SELECT intOwner FROM fasteuger WHERE intShift = ". $vagt ." AND Dato = '". date('Y-m-d', $calcTime)."'"); $recordcount = mysql_num_rows($myquery);
$minVagt = 0; $i = 0;
while ($i < $recordcount) { $findEjer = mysql_query("SELECT intOwner FROM fasteuger WHERE intShift = ". $vagt ." AND Dato = '". date('Y-m-d', $calcTime)."'"); $temp = mysql_result($findEjer,$i); if ($temp['intOwner'] == $_SESSION['MyId']) { $minVagt = 1; } $i++; } echo "<td>";
$i = 0; while($i < $recordcount){ $findEjer = mysql_query("SELECT intOwner, Id FROM fasteuger WHERE intShift = ". $vagt ." AND Dato = '". date('Y-m-d', $calcTime)."'"); $temp = mysql_result($findEjer,$i);
$query2 = "SELECT * FROM users WHERE Id = ". $temp['intOwner']; $result2 = mysql_query($query2) or die('Query failed: ' . mysql_error()); $temp2 = mysql_fetch_array($result2, MYSQL_ASSOC); echo $temp2['navn'] ." (". $temp[IntOwner] .")<br>"; ++$i; } echo "</td>\n "; $vagt++; }
while ($i < $recordcount) { $findEjer = mysql_query("SELECT intOwner FROM fasteuger WHERE intShift = ". $vagt ." AND Dato = '". date('Y-m-d', $calcTime)."'"); $temp = mysql_result($findEjer,$i); if ($temp['intOwner'] == $_SESSION['MyId']) { $minVagt = 1; } $i++; }
kan vel bare skrives noget i retning af:
$findEjer = mysql_query("SELECT id FROM fasteuger WHERE intShift = ". $vagt ." AND Dato = '". date('Y-m-d', $calcTime)."' AND intOwner = '".$_SESSION['MyId']."'"); if (mysql_num_rows($myquery)) { $minVagt = 1; }
if (mysql_num_rows(mysql_query("SELECT id FROM fasteuger WHERE intShift = ". $vagt ." AND Dato = '". date('Y-m-d', $calcTime)."' AND intOwner = '".$_SESSION['MyId']."'"))) { $minVagt = 1; }
while ($curMonth == date(F, strtotime($curDate))) {
if ( $OddRow == "odd") { // Skift farve på hver anden række $OddRow = ""; } else { $OddRow = "odd"; }
if ($curDate == date('Y-m-d')) { // Hvis det er dagen derpå, lav baggrundsfarven grøn $isToday = "hourtoday"; $OddRow = "today"; } else { $isToday = "hour"; }
echo "\n <tr class=". $OddRow .">\n <td class=". $isToday .">". date("D, j. M",strtotime($curDate)) ."</td>\n "; // Indsæt række $vagt = 1; // Vagt nr. 1...2...3...4...5
while ($vagt <= 5){
$EchoString = NULL;
$myquery = mysql_query("SELECT intOwner FROM fasteuger WHERE intShift = ". $vagt ." AND Dato = '". date('Y-m-d', strtotime($curDate))."'"); $recordcount = mysql_num_rows($myquery);
if (mysql_num_rows(mysql_query("SELECT intOwner FROM fasteuger WHERE intShift = ". $vagt ." AND Dato = '". date('Y-m-d', strtotime($curDate))."' AND intOwner = '".$_SESSION['MyId'] ."'"))) { $EchoString = $EchoString . "<td class='EgenVagt'>". $result['intOwner']; } else { $EchoString = $EchoString . "<td>"; }
$i = 0; while($i < $recordcount){ // Hvis der er flere personer på samme vagt, kører den loop flere gange $findEjer = mysql_query("SELECT intOwner FROM fasteuger WHERE intShift = ". $vagt ." AND Dato = '". date('Y-m-d', strtotime($curDate))."'"); $temp = mysql_result($findEjer,$i);
$query2 = "SELECT * FROM users WHERE Id = ". $temp['intOwner']; $result2 = mysql_query($query2) or die('Query failed: ' . mysql_error()); $temp2 = mysql_fetch_array($result2, MYSQL_ASSOC); $EchoString = $EchoString . $temp2['navn'];
if ($_SESSION['Debug']) { // Debug information $EchoString = $EchoString ." (". $temp['IntOwner'] .")"; }
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.