PHP und MySql Formular wird bei jedem Neuaufruf langsamer...

Spelmann

Erfahrenes Mitglied
...und zwar um ungefähr das doppelte.
Bei den ersten 15 klicks macht das noch nichts, aber dann geht's natürlich mit den Werten stramm nach oben bis zum Stillstand.
Das Script ist recht fett. Deswegen lässt es sich hier schlecht posten. Es liest Daten aus mehreren Tabellen einer MySql Datenbank. Bei jedem Button Klick für Einträge ändern, löschen u.s.w. ruft es sich selbst auf. Dabei summiert sich dann die Ladezeit. Verlasse ich die Seite und rufe sie erneut auf ist zwar erst einmal wieder ok, aber das ist nicht befriedigend.

Gibt's da allgemeine Anfänger-Fehler?
Gibt es eine Möglichkeit die sql Abfragen beim Seitenaufruf zu resetten so daß sich die Seite verhält als würde sie zum ersten Mal aufgerufen werden?

Vielen Dank.
 
Du müsstest mal analysieren, was die Ursache dieses Verhalten ist. Wenn du beispielsweise mit Sitzungen arbeitest, solltest du prüfen, ob diese nicht immer wieder mit neuen Daten aufgefüllt werden. Dasselbe gilt auch für Datenbanken.
Lass dir beispielsweise einfach mal die Summe aller Variablen ausgaben, etwa mit Folgendem:
PHP:
var_dump(strlen(serialize($GLOBALS)));
 
Hallo Gumbo
Der Wert von
Code:
var_dump(strlen(serialize($GLOBALS)));
steigt exponential an.
Was meinst Du mit immer wieder auffüllen von Datenbanken und Sessions?

Ich habe jetzt mal die Seite von einem provisorischen neuen Formular aufgerufen. Von dort aus kann ich das problematische Script plötzlich so oft aufrufen wie ich möchte, ohne das der Fehler auftritt.
 
Dann lass dir mal sämtliche Variablen ausgeben (var_dump($GLOBALS);) und prüfe selbst was dort wächst.
 
Wow, also mit dem Ergebnis kann ich nix anfangen. Da sehe ich nicht durch.
Ich habe jetzt mal das Script auf den problematischen Teil reduziert.
PHP:
<?php
if(!$verbindung) include "../mysql/db_connect.php"; //Das hier eingebundene Script stellt die Verbindung zur Datenbank her


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////// erster Aufruf///////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(isset($_POST['edit_kultur_start'])){
?>

    <form action="edit_kultur.php" method="post" enctype="multipart/form-data">
        <?php
        $sql = "SELECT id, rubrik FROM `rubriken_".$_POST['key_termin']."`";
        if (!@mysql_query($sql))	echo "<br>SQL-Anweisung fehlgeschlagen";
        $ergebnis = mysql_query($sql);
        $count = 0;
        while($row = mysql_fetch_object($ergebnis))
            {
            ?>
            <input name="<?php echo "rubrik_".$row->id; ?>" type="text" size="40" maxlength="40" value="<?php echo $row->rubrik; ?>" />
            <?php
            }
            ?>
            <input name="rubrik_neu" type="text" size="40" maxlength="40" style="margin-bottom:10px" />
            <input name="speichern_rubrik" type="submit" value="Speichern" style="cursor:pointer" />
            <input name="index" type="hidden" value="<?php echo $_POST['index'] ?>" />
            <input name="key_termin" type="hidden" value="<?php echo $_POST['key_termin'] ?>" />
            <input name="navi" type="hidden" value="<?php echo $navi ?>" />
    </form>
    
    <form action="edit_kultur.php" method="post" enctype="multipart/form-data">
        <input name="index" type="hidden" value="<?php echo $_POST['index'] ?>" />
        <input name="key_termin" type="hidden" value="<?php echo $_POST['key_termin'] ?>" />
        <input name="navi" type="hidden" value="<?php echo $navi ?>" />
        <input name="edit_kultur" type="submit" value="WEITER" style="cursor:pointer" />
	</form>

<?php
mysql_close($verbindung);
die;
}// Ende isset edit_kultur_neu

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////// zweiter Aufruf///////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(isset($_POST['edit_kultur'])){

	//Eintrag ändern
	if(!empty($_POST['titel'])){ // Die Abfrage verhindert, daß mysql verzweifelt versucht Variablen zu schreiben obwohl gar keine übergeben wurden.
		$aendern = "UPDATE `kultur_".$_POST['key_termin']."` Set id_rubrik = '".$_POST['rubrik']."', titel = '".$_POST['titel']."', untertitel = '".$_POST['untertitel']."', text = '".$_POST['text']."'  WHERE `id` = '".$_POST['id_eintrag']."'" ;
		$update = mysql_query($aendern) or die ("Ung&uuml;ltige Abfrage: " . mysql_error());
	}
	//Auslesen der Rubrikenbezeichnungen
        $sql = "SELECT id, rubrik FROM `rubriken_".$_POST['key_termin']."`";
        if (!@mysql_query($sql))	echo "<br>SQL-Anweisung fehlgeschlagen";
        $ergebnis = mysql_query($sql);
		$count_rubrik = 1;
        while($row = mysql_fetch_object($ergebnis))
            {
			$rubrik_text[$row->id] = $row->rubrik;
			$id_rubrik[$row->id] = $row->id;
			$count_rubrik++; //Anzahl der Einträge wird ermittelt
            }
	

            $sql = "SELECT * FROM `kultur_".$_POST['key_termin']."` ORDER BY `id_rubrik`";
            if (!@mysql_query($sql))	echo "<br>SQL-Anweisung fehlgeschlagen";
            $ergebnis = mysql_query($sql);
            $count = 0;
            while($row = mysql_fetch_object($ergebnis))
                {
				if($_POST['id'] == $row->id){ // Abbfrage, welcher der Einträge zum Bearbeiten ausgewählt wurde
					//In dieser Klammer werden die Einträge als Formular ausgegeben, und somit bearbeitbar gemacht
					?>
                    <form action="edit_kultur.php" method="post" enctype="multipart/form-data">
                        <label style="margin-top:50px">Rubrik</label><br />
                        <select name="rubrik" style="margin-left:10px; margin-bottom:5px; clear:both">
                            <?php
                            //Auslesen der Rubrikenbezeichnungen
                                $sql_2 = "SELECT id, rubrik FROM `rubriken_".$_POST['key_termin']."`";
                                if (!@mysql_query($sql_2))	echo "<br>SQL-Anweisung fehlgeschlagen";
                                $ergebnis_2 = mysql_query($sql_2);
                                while($row_2 = mysql_fetch_object($ergebnis_2))
                                    {
                                    ?>
                                    <option value="<?php echo $row_2->id ?>" <?php if($row_2->id == $row->id_rubrik){ ?> selected="selected" <?php } ?> ><?php echo $row_2->rubrik ?></option>
                                    <?php
                                    }
                                    ?>
                        </select><br />
                        <label>Titel</label><br />
                        <input name="titel" type="text" size="30" maxlength="30" value="<?php echo $row->titel ?>" style="margin-bottom:5px" />
                        <label>Untertitel</label><br />
                        <input name="untertitel" type="text" size="60" maxlength="60" value="<?php echo $row->untertitel ?>" style="margin-bottom:5px" />
                        <label>Text</label><br />
                        <textarea name="text" cols="80" rows="10" class="text-norm" style="color:#555555"><?php echo $row->text ?></textarea>
                        <input name="edit_kultur" type="submit" value="speichern" style="cursor:pointer" />
                        <input name="index" type="hidden" value="<?php echo $_POST['index'] ?>" />
                        <input name="key_termin" type="hidden" value="<?php echo $_POST['key_termin'] ?>" />
                        <input name="navi" type="hidden" value="<?php echo $_POST['navi'] ?>" />
                        <input name="id_eintrag" type="hidden" value="<?php echo $row->id; ?>" />
                    </form>
					<?php
					}else{
					//In dieser Klammer werden die Einträge als Text ausgegeben.
					?>
                        <form action="edit_kultur.php#anker" method="post" enctype="multipart/form-data">
                            <div id="schalter-klein" style="float:left">
                                <input name="edit_kultur" type="submit" value="bearbeiten" style="cursor:pointer" />
                                <input name="erase_kultur" type="submit" value="l&ouml;schen" style="cursor:pointer; margin-left:-10px; margin-right:10px" />
                                <input name="id" type="hidden" value="<?php echo $row->id ?>" />
                                <input name="index" type="hidden" value="<?php echo $_POST['index'] ?>" />
                                <input name="key_termin" type="hidden" value="<?php echo $_POST['key_termin'] ?>" />
                                <input name="navi" type="hidden" value="<?php echo $_POST['navi'] ?>" />
                            </div>
                        </form>
                        <p class="text-norm" style="margin-top:10px"><?php echo $row->untertitel ?></p>
                        <p style="margin-top:-10px"><?php echo nl2br($row->text)."<br />"; ?></p>
					<?php
					} // Ende if($_POST['id'] == $row->id)
                }// Ende while
				?>

    <form action="edit_kultur.php" method="post" enctype="multipart/form-data">
        <input name="index" type="hidden" value="<?php echo $_POST['index'] ?>" />
        <input name="key_termin" type="hidden" value="<?php echo $_POST['key_termin'] ?>" />
        <input name="navi" type="hidden" value="<?php echo $navi ?>" />
        <div id="schalter" style="margin-bottom:10px; text-align:left">
            <input name="edit_kultur_start" type="submit" value="Rubriken" style="cursor:pointer" />
        </div>
	</form>
    
<?php
mysql_close($verbindung);
die;
}// ende isset edit_kultur
Mir ist klar, daß man da einiges sicher professioneller schreiben könnte. Aber für mehr reichen vorerst meine Kenntnisse nicht aus. Über Hilfe würde ich mich echt freuen.
 
Danke Gumbo.
Problem gelöst. Ich habe statt des umständlichen Procederes, wichtige Werte immer wieder mit hidden-fields zu übertragen, diese jetzt einfach jeweils in eine Session geschrieben. Jetzt funktionierts. Ich wusste nicht, daß die wiederholte Weitergabe von ein und dem selben Wert über hidden-fields solche Probleme bereiten kann.
 
Zurück