AJAX - Dauerhafte Datenbank abfrage

Hallo zusammen,
ich bau mir grade eine kleines Überwachungsfenster und möchte gerne das bei einem neuen Eintrag in der DB ein Signal ausgegeben wird.

Bisher habe ich es mit gelöst… aber verständlicherweiße keine gute umsetzung.

In AJAX blick ich nicht ganz durch, ich möchte, dass an einer Stelle, im BODY jede Sekunder nach einem Wert gesucht wird „SELECT * FROM auflistung WHERE Check = 1“.
Wenn was gefunden wird, Ton ausgeben, Datensatz löschen und weiter suchen.

Eher Simpel, die IF-Anweisung hab ich auch soweit, ich brauch nur diese Funktion oder sonst was, damit ich die DB dauerhaft pfrüfe ohne ein „event“.

Kann mir jemand helfen?

Hallo,

‚setInterval‘ dürfte das sein, was du suchst:

http://de.selfhtml.org/javascript/objekte/window.htm…

Gruß
Heavy

Erstmal Danke für die Antwort, nur leider funktioniert es nicht -.-

Wo ist denn der Fehler? Der macht einmal einen DB-Zugriff und löscht dann den Eintrag, wie gewollt. Wenn dann aber ein weitere Wert in der DB hinzugefügt wird, wird dieser nicht mehr berücksichtigt…

Ereignis Fenster<?php / *************************
** Mit Server verbinden **
*************************/
$mysqlhost=„localhost“; // MySQL-Host angeben
$mysqluser=„root“; // MySQL-User angeben
$mysqlpwd=""; // Passwort angeben
$connection=mysql_connect($mysqlhost, $mysqluser, $mysqlpwd) or
die(„Verbindungsversuch fehlgeschlagen“);

/****************************
** Mit Datenbank verbinden **
****************************/
$mysqldb=„alarm“; // Gewuenschte Datenbank angeben
mysql_select_db($mysqldb, $connection) or die(„Konnte die Datenbank nicht finden.“);
?>
var aktiv = window.setInterval(„Farbe()“, 1000);
var i = 0, farbe = 1;
function Farbe () {
<?PHP
/***************
** DB_Abfrage **
***************/
$sql = „SELECT * FROM auflistung“;
$daten = mysql_query($sql) or die(„Anfrage nicht erfolgreich“);
$db_erg = mysql_query( $sql );
if ( ! $db_erg )
{
die('Ungültige Abfrage: ’ . mysql_error());
}
/**********
** Check **
**********/
while($pruefen = mysql_fetch_array( $db_erg, MYSQL_ASSOC))
{
if ($pruefen[‚Check‘] == 1)
{
$delete = $pruefen[‚AnfrageID‘];
$sql_delete = „DELETE FROM auflistung WHERE AnfrageID = $delete;“;
$daten = mysql_query($sql_delete) or die(„Anfrage nicht erfolgreich“);
}
}
?>
}

Habe das ganze jetzt mit window.setTimeout(„location.reload()“, 1000); gelöst:

Ereignis Fenster<?php / *************************
** Mit Server verbinden **
*************************/
$mysqlhost=„localhost“; // MySQL-Host angeben
$mysqluser=„root“; // MySQL-User angeben
$mysqlpwd=""; // Passwort angeben
$connection=mysql_connect($mysqlhost, $mysqluser, $mysqlpwd) or
die(„Verbindungsversuch fehlgeschlagen“);

/****************************
** Mit Datenbank verbinden **
****************************/
$mysqldb=„alarm“; // Gewuenschte Datenbank angeben
mysql_select_db($mysqldb, $connection) or die(„Konnte die Datenbank nicht finden.“);

/***************±
** DB_Abfrage **
***************/
$sql = „SELECT * FROM auflistung“;
$daten = mysql_query($sql) or die(„Anfrage nicht erfolgreich“);

/****************************************
** überprüfung der Anweisung **
****************************************/
$db_erg = mysql_query( $sql );
if ( ! $db_erg )
{
die('Ungültige Abfrage: ’ . mysql_error());
}
/************
** Ausgabe **
************/
$i = 2;
while($pruefen = mysql_fetch_array( $db_erg, MYSQL_ASSOC))
{
echo "mind. ein Datensatz gefunden
";
echo „“;

$delete = $pruefen[‚AnfrageID‘];
$sql_delete = „DELETE FROM auflistung WHERE AnfrageID = $delete;“;
$daten = mysql_query($sql_delete) or die(„Anfrage nicht erfolgreich“);

echo "
delet = ".$delete;

$i = 1;

continue;
}
if ($i == 1)
{
$stop = 4000; // Zeit für die Dauer des Signals
$i = 2;
}
else
{
echo „Keine Datenbankeintrag vorhanden!“;
$stop = 1000; // Aktualisierungszeit
}

?>

window.setTimeout(„location.reload()“, <?PHP echo $stop; ?&gt:wink:;

Habe das ganze jetzt mit
window.setTimeout(„location.reload()“, 1000); gelöst:

aua
wirklich aua

also warum dein kram nicht geht ist klar, du mixt JavaScript mit PHP
Javascript bleibt javascript und wird im browser ausgewertet
php bleibt php und wird vom server erzeugt und zum browser geschickt, und das einmal pro anfrage.

wenn du also eine funktion haben willst in JavaScript
die eine Function in php aufruft, dann ist das ein
htttp request den du im hintergrund via Javascript machen kannst.

die ausgabe die dein ajax-php dann erzeugt musst du im javascript dann noch verarbeiten .

Also

observer.php

  • Javascript httprequest to dbnow.php
  • Javascript antwort von dbnow.php auswerten

siehe
http://www.admin-wissen.de/tutorials/ajax_tutorial/a…

, das was du machst ist eine milde gesagt sauerei , der ganze fokus verschwindet , gegebenenfalls ist man gerade am srollen etc …

Also mach es richtig, die browser können das alles :smile:

ach noch was, du musst das rad nicht neu erfinden ,
ajax etc kann man super mit jquery machen oder mootools .

beides sehr einfach zu nutzen .

hab mit einer schlimmeren Antwort gerechnet ^^
Das was ich gestern probiert hatte kann natürlich nicht klappen, weil php ja schon ausgeführt… Der Denkfehler ist mir heute morgen dann aufgefallen.

daher lasse ich jetzt mit js die ganze seite immer neuladen, damit php immer wieder neu generiert werden kann. Das klappt auch erstmal in der 1. Version ^^ jetzt muss ich AJAX verstehen und lernen, damit ich auch einen ordentliche Lösung hinkriege.

Das ganze dient eigentlich nur dazu, einen sond abzuspielen, wenn was in der DB steht. die seite läuft einfach nur so nebenbei in irgendeinem Tab

wenn du es fertig hast,
im JavaScript nimmst du dann aber immer ein
setTimeout um dann immer wieder abzufragen , aber eben auf eine funnktion die im javascript den http-request macht.

die rückgabe erfolgt dann asyncron , also genug zeit lassen sonst überscheiden sich calls.

btw. geht auch mit asynchron auf „false“ setzen
und die nächste „hürde“ bei AJAX, damit der browser sich nicht aus dem cache bedient … hänge nen timestamp an die URL …

und … paar zeilen AJAX finde ich immer noch besser, als so ne javascript-UI-kanone zu laden :smile: