Beste PHPers,

Ik heb een klein stukje script gemaakt om mijzelf te kunnen laten kiezen tussen verschillende databases van een cms systeem. Dit is de code:


<?php
// Gegevens voor inloggen in database
$host = 'localhost';

//Verbinding met de database maken
$ConnectDatabase = mysql_connect($host, $_SESSION['username'], $_SESSION['password']);
//
$DatabaseLijst = mysql_list_dbs($ConnectDatabase);
$Databases = mysql_num_rows($DatabaseLijst);
$Teller = 0;

while($Teller<$Databases){
	$row = mysql_fetch_row($DatabaseLijst);
	$DatabaseKeuze.= "<option value=\"".$row[0]."\">".$row[0]."</option>";
	$Teller++;
}
if(!isset($_SESSION['DB'])){
	$_SESSION['DB'] = "cms";
}
else if(isset($_POST['SubmitDB'])){
	$_SESSION['DB'] = $_POST['Database_lijst'];
}
//
print_r($_SESSION);
$SelectDatabase = mysql_select_db($_SESSION['DB']);
if($ConnectDatabase){
	if(!$SelectDatabase){
		echo 'Sorry, ik kon helaas geen verbinding maken met de databasetabel!';
	}
}else{
    echo 'Sorry, ik kon helaas geen verbinding maken met de databaseserver!';
}
?>


Dit werkt wel naar behoren, alleen het probleem is dat het laden van de pagina's in het cms ineens heel erg traag gaan. Heeft iemand van jullie daar een antwoord op, waarom dat gebeurt of hoe het op te lossen is?
Hm, waarom zou je laten switchen? Waarom niet alles in één database?
Wat doe je trouwens ingewikkeld bij het fetchen van je resultaat?

<?php

$DatabaseLijst = mysql_list_dbs($ConnectDatabase);
while($row = mysql_fetch_row($DatabaseLijst)) {
$DatabaseKeuze.= "<option value=\"".$row[0]."\">".$row[0]."</option>";
}

?>
@Jezpur
Hoe bedoel je alles in één database? Ik maak graag nieuwe databases voor verschillende klanten aan, en ik wilde graag maar 1 centrale versie van het cms laten draaien.

Daarop wordt dan ingelogd door de klant en via die inloggegevens worden dan de databases van die klant opgesomt.

@Martijn Versluis
Je hebt helemaal gelijk en heb het meteen aangepast!

Maar weten jullie toevallig ook waarom het laden van de pagina's ineens zo langzaam gaat als ik die sessions gebruik voor de database gegevens?
Ik snap niet echt hoe je script werkt.

Maar hoe groot is je database lijst?

=> $_SESSION['DB'] = $_POST['Database_lijst'];

Moet die session niet 1 bepaalde database zijn inplaats van een hele lijst?
$_POST['Database_lijst'] is maar 1 gegeven die wordt verstuurd via een select in een formulier. Dus die session is steeds maar 1 database die geselecteerd is.

Mijn database lijst is op dit moment niet zo groot, 5 in totaal.

Dit hoort er eigenlijk nog bij en sit staat in de header van elke pagina:


<form name="DBFormulier" id="DBFormulier" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<table cellpadding="0" cellspacing="0" border="0">
    <tr>
        <td>Gebruiker: <strong><?php echo $naam; ?>/strong>&nbsp;&nbsp;|&nbsp;&nbsp;Website: <strong><a href="<?php echo $Siteurl; ?>" target="_blank" title="<?php echo $Sitenaam; ?>"><?php echo $Siteurl; ?></a></strong>&nbsp;&nbsp;|&nbsp;&nbsp;</td>
        <td><select name="Database_lijst" id="Database_lijst">
            <?php echo $DatabaseKeuze; ?>
        </select></td>
        <td><input type="submit" name="SubmitDB" id="SubmitDB" value="Selecteer" /></td>
    </tr>
</table>
</form>
@ Michel

Wat je zou kunnen doen is even die code je hebt gepost stukje voor stukje uitvoeren. Dan zal je snel zien waarom het zolang duurt.
@ ark

Ik heb net even snel alles stap voor stap doorgelopen en hij gaat langzaam laden op het moment dat ik de lijst van databases ga opvragen met:


<?php
$DatabaseLijst = mysql_list_dbs($ConnectDatabase);
while($row = mysql_fetch_row($DatabaseLijst)) {
    $DatabaseKeuze.= "<option value=\"".$row[0]."\">".str_replace("miezznl_", "", $row[0])."</option>";
}
?>

Reageren