webForumDet fria alternativet

Lång tid vid sidladdning

PHP

4 svar · 564 visningar · startad av JaktJanne

Medlem sedan feb. 20001 507 inlägg
Frågan#1

Loopia har haft problem med anslutning till servern vår databas legat på, nu är den flyttad till en mindre belastad server men vissa sidor går fruktansvärt sega fortfarande om de överhuvudtaget laddas alls. Misstänker att det blir timeout.
Skickar med hela koden till sidan som strular mest.
Säkert är det så att jag gör alldeles för många anrop men det är i olika steg.
Ja, ta en titt och är det koden som slöar ner hämtningen??

<?php
// Startar session
session_start();
//Tidräkning för laddning av sidan
function Getmicrotime() {
		list($usec, $sec) = explode(" ",microtime());
		return ((float)$usec + (float)$sec); }
		
$time_start = Getmicrotime(); 

// Dagens datum
$today = date('Y-m-d');
//$today = '2009-09-25';

include('../dbmanager.php');
	// Tömmer gamla variabler
	$do_add = "";
	$par_id = "";
	$tomt = "";
	
// Kollar om man skall lägga till i databasen.
	
	if (!empty($_POST['at_id']) && !empty($_POST['password'])){
		if( !isset($_GET['do_add']) )
		{
			$do_add =="no";
			//$do_add = $_POST['do_add'];
		}
		else
		{
			$do_add = $_GET['do_add'];
		}
	}
?>
<HTML>
<HEAD>
<TITLE>Anmäld till träning</TITLE>
<link rel="stylesheet" href="../../stylesheets/spirStyle.css" type="text/css">
<style type="text/css">
<!--
#tform {
	background-color: #99CCCC;
}
-->
</style>
</HEAD>
<BODY class="yellowTable">
<h2>Anm&auml;lan till tr&auml;ning f&ouml;r alla inhyrda tr&auml;nare</h2>
<p>Samma anv&auml;ndarnam och l&ouml;senord som ni har till t&auml;vlingsanm&auml;lan.<br>
  Har ni ingen registrerat anv&auml;ndarnamn s&aring; fixar ni en h&auml;r &gt;&gt; <a href="../tavlingar/par_reg.html">[Registrera par]</a><br>
  <span class="small_red">*Nytt*</span> Beh&ouml;ver ni &auml;ndra er n&auml;rvaro s&aring; &auml;r det bara att anm&auml;la er igen med de nya uppgifterna.</p>
<p>Vilka tider som g&auml;ller ser du vid anm&auml;lning.<span class="normal_red"><br>
  </span></p>
<form  method="POST" name="tform" id="tform">
  <tr>
    <td colspan="4">      
      <div align="left">
        <blockquote>
          </br>
            <?php 	
			
		// Hämtar tränare
		$sql = "SELECT * FROM `admin_training` a LEFT JOIN `add_tranare` t ON a.at_tranare = t.Tran_id  WHERE '$today' <= a.at_datum   GROUP BY a.at_tranare ASC"; 
		$result = mysql_query($sql) or die(mysql_error());
		
		

		//Lägg namnen i en rull-list
		echo "<select name=\"tranare\" onchange=\"this.form.submit();\">\n";
		echo "<option value=\"\"> Välj tränare </option>\n";
		while ($row = mysql_fetch_array($result)) {
			//Aktivera förvald person om den har blivit vald tidigare
			if ($_POST['tranare'] == $row['at_tranare']) {
				echo "<option value=\"".$row['Tran_id']."\" selected=\"true\">".mysql_real_escape_string($row['tranare'])." </option>\n";
			} else {
				echo "<option value=\"".$row['Tran_id']."\">&nbsp;&nbsp;".$row['tranare']."&nbsp;&nbsp;</option>\n";
			}
		}
		echo "</select>\n";
		
	
 		// Hämtar träningsdatum för tränarna ovan	
	 	if (isset($_POST['tranare'])){
	 		$tranare = $_POST['tranare'];
			$datum = "SELECT * FROM admin_training WHERE at_tranare = '$tranare' AND '$today' <= at_datum ORDER BY at_datum, at_time ASC";
			$result1 = mysql_query($datum) or die(mysql_error());
			
			
		//Lägg datumen i en rull-list
		echo "&nbsp;&nbsp;&nbsp;<select name=\"at_id\">\n";
		while ($row = mysql_fetch_array($result1)) {
			//Aktivera förvald person om den har blivit vald tidigare 
				$at_time = substr($row['at_time'], 0, 5);

				echo "<option value=\"".$row['at_id']."\">&nbsp;&nbsp;".$row['at_datum']."  --  ".$at_time."&nbsp;&nbsp;--  ".$row['at_grupp']."</option>\n";
				
			} 
			echo "</select>\n";			       
			echo " &nbsp;&nbsp;&nbsp;<label>
						<select name=\"narvaro\">
						<option value=\"2\">Kommer</option>
						<option value=\"1\">Kommer ej</option>
						</select>
						</label>
					  </p>"; 
	  		} ?>
         </p>
        </blockquote>
      </div>
      <table width="645" border="0" cellpadding="2" cellspacing="2" id="anmalning">
        <tr>
          <td width="96">Anv&auml;ndarnamn: </td>
          <td width="134"><input type="text" name="username" maxlength="20" size="20"></td>
          <td width="72">L&ouml;senord: </td>
          <td width="151"><input type="password" name="password" maxlength="20" size="20" id="password"></td>
          <td width="160" rowspan="2">
            <input type="submit" name="Submit" value="Anm&auml;l" onClick="this.form.action='anm_traning_multi.php?do_add=yes';this.form.submit();">
          </td>
        </tr>
        <tr> </tr>
      </table>
      <hr>
</form>
<?php
			if($do_add == "yes" && isset($_POST['username']) && isset($_POST['password']))
				{
				$username 	= $_POST['username'];
				$password 	= $_POST['password'];
				$at_id		= intval($_POST['at_id']);
				$narvaro	= $_POST['narvaro'];
				$t_grupp	= $_POST['t_grupp'];
			
				// kollar om användarnamnet finns 
				$check_nam 	= "SELECT tpar_id FROM tavlings_par WHERE username='$username' AND password='$password'"; 
				$result_nam = mysql_query($check_nam) or die(mysql_error()); 
				$rows 	= mysql_num_rows($result_nam);
				$rad 	= mysql_fetch_array($result_nam);
				
				// Finns användarnamnet så lägg till i databasen 
					if($rows)
					{
						$par_id = $rad['tpar_id'];
						
		
					// Kollar så det inte blir dubletter i databasen
						$check_dub = "SELECT * FROM anm_training_multi WHERE par_id='$par_id' AND atm_id= '$at_id' ";
						$result_check = mysql_query($check_dub) or die(mysql_error());
						$num_rows = mysql_num_rows($result_check);
					
					// Om man redan är anmäld körs If-satsen nedan	
						if ($num_rows) {
						//echo "Du kan ej anmäla dig till denna tid!<br>";
						//echo "<a href=\"anm_traning_multi.php\" target=\"_self\">->&nbsp;OK&nbsp;<-</a>";
						
						
						$update = "UPDATE anm_training_multi SET 
						par_id = '$par_id',
						atm_id = '$at_id',
						narvaro = '$narvaro',
						t_grupp = '$t_grupp'  WHERE par_id = '$par_id' and atm_id = '$at_id' LIMIT 1";
						
						mysql_query($update);
						
						// Ladda om sidan för att rensa POST-data
						echo "<meta http-equiv=\"refresh\" content=\"0;URL=anm_traning_multi.php\">";
						}
						else {
			
						// Gör en Insert i databasen om man ej är anmäld
							$add_tran = "INSERT INTO anm_training_multi(par_id,narvaro,atm_id,t_grupp) VALUES ('$par_id','$narvaro','$at_id','$t_grupp')";
							mysql_query($add_tran) or die("Något gick fel, försök igen eller ta kontakt med Janne A");
							$_POST['tranare'] = "";
						// Ladda om sidan för att rensa POST-data
							//echo "<meta http-equiv=\"refresh\" content=\"0;URL=anm_traning_multi.php\">";
							header ('Location: anm_traning_multi.php?');
						 }
				 	}
						else {
						// Fel inloggningsuppgifter
						 echo "Användarnamnet eller lösenordet stämmer inte<br>";
						 echo "<a href=\"anm_traning_multi.php\" target=\"_self\">->&nbsp;OK&nbsp;<-</a><br>";
						 echo "<a href=\"../tavlingar/password_reminder.php\" target=\"_self\">-Jag har glömt min inloggning!</a>";
						 return; 
						 }
			}

	echo  "</table>";
	echo  "</table>";

	//**************************************
	// Hämtar de som anmält sig till träning
	//**************************************
	
	$dagens_datum  =  date ("Y-m-d", mktime(0, 0, 0, date("m"), date("d"), date("Y")));
	//$dagens_datum  = "2009-09-23";
	$p_datum = "";
	$M_traning = "";
	$query = "Select * from anm_training_multi, admin_training 
	WHERE  admin_training.at_id = anm_training_multi.atm_id AND admin_training.at_datum >= curdate() 
	ORDER BY admin_training.at_datum, admin_training.at_tranare, admin_training.at_time, anm_training_multi.par_id asc, anm_training_multi.narvaro desc";
	//$query1 = "Select * from anm_training_multi WHERE m_time != ' ' order by m_time asc";
		

	$cursor = mysql_query($query) or die(mysql_error());

		if ($cursor < 1){
			
			echo "Ännu har inga anmält sig<br>";
			return;
			}
	//Loopa ut inlagda par Ej mentalträning.
	while ($row = mysql_fetch_array($cursor)) {
	
			$par_id 	= $row['par_id'];
			$datum		= $row['tr_datum'];
			$t_grupp	= $row['t_grupp'];
			$at_id		= $row['atm_id'];
			
		// Hämtar tränare, datum och tid
		$query1		= "Select * FROM admin_training, add_tranare WHERE at_id = '$at_id' AND admin_training.at_tranare = add_tranare.Tran_id ORDER BY admin_training.at_time";

		$resultat1 	= mysql_query($query1) or die(mysql_error());
		while ($rad1 = mysql_fetch_array($resultat1)){

				$at_tranare 	= $rad1['tranare'];
				$at_datum		= $rad1['at_datum'];
				$at_time		= $rad1['at_time'];
				$mental		= $rad1['at_tranare'];
				}
	

			// ta bort :00 här för snyggare utskrift
			$at_time = substr($at_time, 0, 5);
			
				
   		if  ( $p_datum != $at_datum or $p_tranare != $at_tranare) {
			
			$p_datum 	= $at_datum;
			$p_tranare	= $at_tranare;
			$p_time 	= "";

			
			// utskrift av träningsdatum
			echo "<table width=\"600\" cellpadding=\"0\">";	
			echo "<tr>"; 
			echo "<th colspan=\"4\"><div align=\"left\"><p>&nbsp;</p><h5>Anmälda inför träningen den $p_datum för $p_tranare</h5></div></th>";
			echo "</tr>";

				}	
   		if  ( $p_time != $at_time) {
			
			$p_time 	= $at_time;
						
			echo "<tr>"; 
			echo "<th colspan=\"4\"><div align=\"left\"><b>&nbsp;&nbsp;&nbsp;$p_time</b></div></th>";
			echo "</tr>";
				}			
						
						
			if ($mental =="6"){
				$row['narvaro'] = "0";	}
		
		
		//Skriver rätt text för närvaro
			switch ($row['narvaro']) {
      			case '0':
        			$a_narvaro = "";
      			break;
      			case '1':
        			$a_narvaro = "<span class=\"normal_red\">Kommer ej </span>";
      			break;
      			case '2':
         			$a_narvaro = "Kommer";
   				break;
   				}
			

											
		// Hämtar ut info om paret
			$query_		= "Select * from tavlings_par WHERE tpar_id = '$par_id'";
			$resultat_ 	= mysql_query($query_) or die(mysql_error());
			$rad_		= mysql_fetch_array($resultat_);
				
			$k_namn  	= $rad_['k_namn'];
			$t_namn 	= $rad_['t_namn'];
			$klass		= $rad_['klass'];
			

		//Skriver ut tabellen
		?>
<tr>
  			<td width="15">&nbsp;</td>
  			<td width="290"><?php echo $k_namn ?>&nbsp;-&nbsp;<?php echo $t_namn ?> </td>
            <td width="113"><?php echo $klass = str_replace("BS", "B35",$klass ); ?> </td>
  			<td width="105"><?php echo $a_narvaro?></td>
			</tr>

		<?php
			}	
	echo  "</table>";
	
		if ($row == 1){
			
			echo "Inga par finns att hitta<br>";
			//return;
			}	
	// ------------------	
	// Stänger anslutningen till vår databas
	// ------------------
	mysql_close($databas_link);
	//Skriv ut tiden det tog att ladda sidan
	$time_end = Getmicrotime();
	$time = $time_end - $time_start;
	$time = round($time,6);
	echo "<p class=\"style1\">";
	echo '<br><br>Sidan laddades på ' . $time . ' sekunder</p>'; 
	?>

</BODY>
</HTML>
Medlem sedan feb. 20001 507 inlägg
#2

Vi ligger också för närvarande på en windows-server. Vi funderar att gå över till UNIX om det nu skulle spinna snabbare.

Medlem sedan juni 200032 967 inlägg
#3

Om jag vore du skulle jag lägga ut lite tidsutskrifter mellan de olika kodblocken så kan du se hur mycket tid varje kodklutt tar.

Mvh

Medlem sedan juli 20041 183 inlägg
#4

Hmm, om inte jag ser fel så är din sida känslig för sql-injections. Nu var itne det frågan, men i alla fall.

Det rekommenderade sättet är väl att stänga anslutningen så snart man är klar med något. Du öppnar en högst upp och stänger den längst ner. Detta borde dock inte påverka laddtiderna så som du beskriver det.

En annan sak du bör tänka på är att aldrig göra "select *" utan skriva ut kolumnnamnen istället. Detta kanske minskar datat som behöver hämtas?

Jag har bara kollat lite snabbt men ser inte nåt konstigt. Gör som marsvinet säger så kanske du enklare hittar nåt problem.

Medlem sedan feb. 20001 507 inlägg
#5

Min räknare visar på långt under 1 s så det måste vara nåt innan tidräkningen börjar.
Eftersom jag inte använder session på sidan så tog jag bort session_start() och vips så går det acceptabelt snabbt.

ps Fixat lite skydd mot sql-injuction också.

273 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
130 ms — deklarationer (db)
0 ms — hämta statistik (cache)
141 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)