Jquery Pagereload nur bei geänderten MySQL Ergebnis

Purdey

Erfahrenes Mitglied
Hallo ich habe ein php Script welches aktuell mittels MySQL
aus einer Datenbank Datensätze ermittelt und die Inhalte dann
in einer Schleife für alle Datensätze in ein vorhandenes DIV schreibt.
Dies funktioniert alles ganz gut, doch leider wird das Div nicht mit neuem Inhalt gefüllt,
wenn nun in der Abfrage ein Datensatz mehr ermittelt wird?

Ist es möglich, das ich via SQL prüfe wie viel DS existieren (bspw. 8)
und wenn es dann mehr als 8 DS sind soll ein Reload ausführe.

Und zwar nur dann, super wäre also eine Überprüfung der Anzahl der DS alle 30 Sekunden,
Sind es mehr als 8 DS dann neuladen ansonsten soll alles so bleiben.

Wie gehe ich hier vor und wie realisiere ich die Prüfung vor dem Reload?

Ich hoffe meine Darstellung war verständlich?
 
Du müsstest mittels Javascript-Timeout alle 30 Sekunden eine Ajax-Ansage losschicken, die ein PHP-Skript das gleiche Query (also mit allen Where's usw.) als Count abfragen lässt. Wenn das Ergebnis größer 8 ist lädst du neu (kam jetzt nicht ganz rüber, ob die gesamte Seite neugeladen werden oder nur der Div-Inhalt erneuert werden soll), für Letzteres also grob:

Code:
setTimeout(refreshDiv, 30000);
Code:
function refreshDiv(){
  $.ajax({
    url: "count.php",
    success: function(content){
      if(content != "none") $('#divid').html(content);
    }
  });
}
  • im angesprochenen PHP-Skript
PHP:
"SELECT COUNT(*) AS 'Anzahl' FROM ..."

/* Verarbeitung Count-Abfrage */

if($res['Anzahl'] > 8){

  /* Daten über zweite Abfrage holen */

  echo $daten;

}else{

  echo "none";

}


Ich merk grade dass die 8 wohl nur ne Hausnummer war - in dem Fall könntest du die Anzahl beim ersten Aufruf in die Session schreiben und die im angesprochenen Skript entsprechend statt der 8 abfragen.

Wenn das irgendwo zu ungenau war frag ruhig, is schon spät ;)
 
Vielen Dank für diesen Beitrag, ich habe es so gebaut nur wie realisiere ich jetzt das ich möglichst mit nur einem Script arbeite, was die Datensätze raussucht. Stand jetzt habe ich index-datei in der ich mir datei1 anzeigen lasse und welche datei2 aufruft und datei2 nun antwortet mit none oder mit dem Inhalt aus dem SQL welcher entsprechend verarbeitet wurde. Schön wäre ja wenn ich nun in Datei eins sagen könnte, wenn du das erste mal lädst dann lade auch Ergebnisse aus Datei2 ansonsten prüfe immer schön ob es differenzen gibt und gebe mir selbige zurück. Ist der Ansatz umsetzbar?
 
Du kannst Datei2 includen und innerhalb Datei2 das normale Query einmal ausführen lassen.

Grob nach dem Schema:
PHP:
/* innerhalb von datei1.php */

$nocount = true;
include 'datei2.php';
echo getData();

/* innerhalb von datei2.php */

if(!isset($nocount)){
  "SELECT COUNT(*) AS 'Anzahl' FROM ..."

  /* Verarbeitung Count-Abfrage */

  if($res['Anzahl'] > 8){

    /* Funktion aufrufen */
    echo getData();

  }else{

    echo "none";

  }

}

function getData(){

  /* Daten über zweite Abfrage holen */ 

  return $datenVonDBAbfrage;
}

So wird beim ersten Aufruf datei2.php inkludiert und die darin enthaltene Funktion getData aufgerufen, in der du die normale DB-Abfrage hast.
Da vorher $nocount gesetzt wurde, wird die Zählung nicht durchgeführt.

Danach wird ja alle 30 Sekunden die datei2.php erneut angesprochen. Dazu wird sie quasi einzeln aufgerufen, und in dem Zusammenhang ist $nocount nicht gesetzt, also wird die Zählung durchgeführt und bei Erfolg dieselbe Funktion getData aufgerufen.
 

Neue Beiträge

Zurück