PHP OOP - Rendert Seite zu schnell vor Datenbankupdate

Noeden

Erfahrenes Mitglied
Hallo Leute,
ich hab ein Problem, was ich damals in der prozeduralen Programmierung wahrscheinlich nicht gehabt hätte. Ich schicke einen AJAX-Request zu meinem Server, woraufhin er einige Datenbankupdates machen soll, und die Seite neu rendern soll, damit die Aktualisierungen sichtbar werden. Um flexibel zu bleiben (Damit ich auch nur Datenbanken updaten kann oder mir nur die Seite neu Rendern lassen kann) habe ich mir zwei switchschleifen gebaut: (auszugsweise)

PHP:
if( $ajax ){
			switch(true){
				case $get['edit'] == 'ref' && $get['refID']:
					$this->updateRef(); //Datenbankupdates
					break;
			}
			
			switch(true){
				case $get['screen'] == 'yes':
					$content = $this->renderContent(); //Siterendering
					break;
			}
		}else{
			$content = $this->renderContent();
		}

Sind jetzt nur die rel. Cases und etwas vereinfacht. In dem array $get sind die Get-Parameter. Naja auf jeden Fall bekomme ich per Ajax noch die alte Version geladen, nach einem Reload kommt erst die neue.

Danke schonmal
Noeden
 
Switchschleife........ ist mMn hier ein falscher Ansatz. ein Einfacher if() sollte reichen

Deine Logik wertet bei $ajax aus, ob $get['edit'] auf ^ref' steht und macht dann den Update.
Der Content wird nur neu geladen, wenn $get['screen'] == 'yes'. Ansonsten wird kein neuer Content geladen. Ist diese Bedinung bei deinem Ajax-Aufruf erfüllt? Wenn nicht, wird $content nicht neu geladen
 
Hmm, ich finde es so eleganter, sollte aber ja auf jeden Fall auf das gleiche hinauslaufen. Ich sehe auch in der Antwort die alte Version. Er führt die renderfunktion definitiv erneut aus und er updated auch auf jeden Fall die Datenbank.
 
PHP:
if( $ajax ){
			switch(true){
				case $get['edit'] == 'ref' && $get['refID']:
					$this->updateRef(); //Datenbankupdates
					break;
			}
			
			switch(true){
				case $get['screen'] == 'yes':
					$content = $this->renderContent(); //Siterendering
					break;
			}
		}else{
			$content = $this->renderContent();
		}

Im Prinzip das selbe wie:
PHP:
if($ajax && $get['edit'] == 'ref' && $get['refID'])
	$this->updateRef();
else
	$content = $this->renderContent();

Wenn der Rest von deinen Code auch so aufgebaut ist glaub ich das mit dem zu schnell eher weniger.
 
Nope Napofis
Es ist kein else. Sondern
PHP:
if($ajax){
    if($get['edit'] == 'ref' && $get['refID'])     $this->updateRef();
    if($get['screen'] == 'yes')    $content = $this->renderContent();
}else{
    $content = $this->renderContent();
}
 
Ja, das weiß ich :) Ich habe den Code der Übersichtlichkeit halber nur gekürzt. Ich habe viel mehr Cases in den Switch-Schleifen. Ich bekomme aber keinen Fehler, und der Content wird neu gerendert, wenn ich nämlich nach Seitenaufbau und vor AJAX-Request eine Debugausgabe einfüge, bekomme ich die per AJAX. Aber wie gesagt, die alte Version von vor dem Datenbankupdate.

PS: Ich gehe davon aus, dass das unerheblich ist, aber ich aktualisiere die Datenbank mit Funktionen aus Typo3 ( $GLOBALS['TYPO3_DB']->exec_UPDATEquery() ).
 
Zuletzt bearbeitet:
Im Prinzip schon aber wenn ich mir die Variablen so ansehe, lässt sich das bestimmt noch weiter verkürzen und der redundante Aufruf auslagern.

Aber egal ich glaube der eigentliche Fehler liegt in den Operationen:
$this->updateRef()
$content = $this->renderContent()

Eventuell ist es auch ein Caching Fehler?
 
Danke Napofis, ich bin schon selber drauf gekommen, ganz doofe Geschichte :D
Das OOP verleitet dazu nur noch über das Interface nachzudenken. Wenn ich dem sage 'gib mir das', dann gibt er mir das. Naja. Ich hab am Anfang ein Array geschrieben, aus dem der Content kam, um die Datenbankabfragen zu minimieren. Da stand natürlich nicht das Update drin :D.

Danke an Euch!

Mann ist mir das peinlich :( :D
 
Zurück