Daten in Mysql einspielen dabei Statusfenster anzeigen?

papabaerchen

Mitglied
Hi,

Ich habe ein Teile-Such-Programm in php geschrieben. Jetzt ist es so das ich regelmässig die Teile in der Mysql Datenbank updaten muss. Das sind etwa 300000 verschiedene Teile. Die neu hochzuspielen dauert etwa 1 Minute aber in dieser Minute ist der Bildschirm leer.
Am liebsten wäre es mir das, sobald das update-script startet ein neues Fenster sich öffnet das mir enhand eines Zahlenwertes (muss nicht in % sein, kann auch die echte Anzahl sein) zeigt wieviele Teile ich schon eingespielt habe. Ich habe schon versucht das anhand einer Variable zu machen, die ich einfach hochzählen lasse, aber das klappt auch nicht so richtig.

Kann mir da jemand helfen

Danke.
 
Hi,

das wirst du mit php allein wohl nicht hinbekommen. Es wäre günstig, wenn du eine echte Programmiersprache beherrschst und zu deiner Datenbank auch Zugriff von außen her bekommst, z.B. wenn diese zu einem Webserver gehört. Dann solltest du am besten ein Programm schreiben, dass diesen Updatevorgang übernimmt und anzeigt, da php in der Hinsicht relativ "statisch" ist. Ich habe etwas ähnliches bisher nur mit JavaScript verwirklicht gesehen, z.B. beim Vorladen("Preloading") von Bildern.

MfG Erik
 
Wie läuft das Update denn?
Mit einer for-Schleife oder wird eine Datei mit den geupten Werten in die DB eingespielt?
 
Naja...es geht irgendwie schon...wenn der Browser mitspielt.
Das mit dem neuen Fenster wird eher problematisch....dazu würdest du Javascript benötigen.

Aber im selben Fenster...das ginge schon.
Du könntest bspw. nach jedem 1000. Update eine entsprechende Meldung ausgeben und dann die Ausgabe an den Browser senden...der müsste dann halt mitspielen(macht leider nicht jeder)

Mal ein Beispiel, wie so eine "dynamsiche Ausgabe" mit PHP funktionieren kann:
PHP:
<html>
<head>
<title>Test</title>
<style type="text/css">
<!--
div{width:100%;background-color:#fff;position:absolute;top:0;left:0;text-align:center;}
-->
</style>
</head>
<body>
<?php
$i=0;
$n=13;
while($i<$n)
{
  
  $i++;
  echo '<div>'.$i.' Update(s) fertig von '.$n.'</div>' ;
  flush();
  sleep(2);
}

?>
<div>fertitsch</div>
</body>
</html>
Es werden absolute platzierte Layer in die Seite geschrieben...alle an der selben Position, so ist der neueste immer sichtbar und überdeckt die vorangegangenen...

Test:http://tmp.doktormolle.de/flushe.php

Obs funktioniert, hängt dabei halt vom Browser ab.
 
Erstmal danke für die antworten.

Genau das mit der dynamischen ausgabe in php will ich.

Das Teile-Suchprogramm läuft nicht auf einem Webserver sondern unter Localhost. Um die Teile neu einzuspielen lass ich eine txt datei öffnen, mittels explode zerlege ich sie und lasse sie Zeile für Zeile mittels einer while-schleife in die Datenbank eintragen. Den ganzen Code jetzt hier zu posten wäre etwas zu lang weil halt doch ein paar mehr faktoren drin sind aber so der grundaufbau.
Wie genau muss ich jetzt den php-Code einbinden? Was die Whileschleife macht ist mir schon klar aber ich will ja das es in "echtzeit" abläuft und nicht mit sekunden arbeitet. Sonst ist das Zählscript fertig aber die Teile sind noch nicht drin, oder umgekehrt.
 
Guten Morgen allerseits,

das ist eben das Problem: nicht jeder Browser macht das mit. Außerdem ist denke ich mal ein eigenes Updateprogramm ein wenig schneller, grade bei 300'000 verschiedenen Einträgen. Wenn du es allerdings eh bloß privat für dich komplett auf deinem eigenen Rechner ausführst, reicht die Methode mit den Layern schon.

MfG
 
Naja, wenn eine while-Schleife dabei ist, kannst du einen zähler mitlaufen lassen.

Ist der Zähler bei 25% angenkommen (also bei 75.000 zeile), echo "25% abgearbeitet" usw..
ist eigentl. die einfachste variante. zuvor teilen durch 4, falls sich die zeilenanzahl erhöht. So erhällst du zwar 4 ausgaben. Ist Borwserschonend :D

Oder du machst statt der Ausgaben per echo den aufruf eines Popup-Fenster mittels Javascript.

Was ich nicht tun würde bei der Menge - jeden Prozentpunkt anzeigen lassen. Ausgenommen du nimmst Flash mit dazu.
 
Bspw. so:

PHP:
$i=0;//Zähler
$fp = fopen ("irgendwas.txt", "r");
while (!feof($fp)) 
{
    $buffer = fgets($fp, 4096);
    //Hier dein Code zum UPDATEN
    
    $i++;
    if($i%1000===0)
      {
        echo '<div style="width:100%;background-color:#fff;position:absolute;top:0;left:0;text-align:center;">'.
              $i.' Update(s) fertig </div>' ; 
        flush();
      }
    
}
fclose ($fd);

...Aktualisiert die Anzeige jeweils nach 1000 Zeilen.

Den Browser schonen brauch man da ...glaub ich, nicht sonderlich,... und viel Traffic erzeugt es auf dem Localhost auch nicht :-)
 
Also wen ich den Code so einbinde wie du das schreibst geht es nicht. Er zeigt dann nix an.
Wenn ich die IF-abfrage raus nehme und nur das echo drin lasse zählt er jedes neu eingespielte teil an.....und wird mit zunehmender Zahl extrem langsam.

Aber genauso soll es aussehen.....nur nicht mit der verlangsamung.
 
Svens Beispiel setzt voraus, dass die Datei mindestens 1000 Zeilen hat. Sonst gibt es auch keine Ausgabe.
 
Zurück