MYSQL Wert erhöhen

  • Themenstarter Themenstarter koronyl
  • Beginndatum Beginndatum
Countdown für Browsergame

Hi ich habe noch eine Frage,,,
Ich habe jetzt ein Script das ja die Gebäudestufe um 1 erhöht...
Ich habe jetzt das Problem, das ich einen Timer brauche der startet wenn der User auf einen Link klickt und auf Wunsch wieder abgebrochen werden kann...
Dies soll funktionieren indem man wenn der User den Bauauftrag startet ein Eintrag in die Datenbank gemacht werden soll, also die aktuelle Urzeit Jetzt soll wenn es geht der Countdown im Sekundentakt weiter laufen und wenn der User sich abmeldet das er weiterläuft....
In der Datenbank werde ich dann 2 Felder anlegen wenn eins davon schon eine Countdownzeit enthält soll das andere genommen werden wenn beide voll sind soll ein Fehler ausgegeben werden...
Probleme:
Wie bekomme ich das hin das der Countdown im Sekundentakt weiterläuft?
Und wie überprüfe ich das ein Feld noch belegt ist und das es sich automatisch löscht wenn der Countdown abgelaufen ist?
 
The answer my friend, is in your hand:

http://www.tutorials.de/forum/php/338137-mysql-wert-erhoehen.html#post1747656

Wenn du diese Ereignistabelle anlegst, kannst du die Endzeit bestimmen. Theoretisch kann die Endzeit auch über 100 Jahre hinaus gehen, was hierfür genügen würde.

Beim einloggen, wird geschaut ob dieser "Timer" wie du ihn nennst noch läuft / das Ende größer der aktuellen Zeit (time()) ist und es wird die noch verbleibende Zeit dem Besucher angezeigt. Das sekündliche runterzählen ist eine Sache von JavaScript. Leider kenne ich den Code nicht auswendig, aber man findet ihn oft unter den Suchbegriffen: "javascript countdown"

OT: Hast du mit anderen Programmiersprachen schon "Kontakt" gehabt? VB.net oder ähnlichem?
 
Zuletzt bearbeitet:
Ich habe bisher (zur Zeit) das:

PHP:
$datum = date("d-m-Y H:i:s");
// Speicherfunktion


Wie kann man denn die jetzige zeit addieren?
Und wie bekomme ich das hin das sie sich automatisch wieder löschen
 
Zuletzt bearbeitet von einem Moderator:
Wird echt mal Zeit:
  1. http://tut.php-quake.net/de/
  2. http://books.google.de/books?id=Z8H...cover&dq=php+in+a+nutshell&lr=lang_de#PPR3,M1
  3. http://www.selfphp.de/funktionsreferenz/index.php (Minimum für deine Favoriten im Browser)
  4. http://www.php.net (Gut für später wenn du PHP-Anfänger bist)

Dort steht dein Problem:
zu 1) http://tut.php-quake.net/de/cookies.html (Ja, hat nichts mit Cookies zu tun aber da wird das mit der Zeit erklärt)
zu 2) date()
zu 3) Datums- und Zeitfunktionen - time()
zu 4) Datum/Uhrzeit Funktionen

Sorry aber ein bisschen Eigeninitiative fände ich in diesem Fall gut.
Die Funktion, die du suchst heißt time(). Da kannst du Zeit ohne Umstände hinzuaddieren oder abziehen. Aber immer in Sekunden.
 
Zuletzt bearbeitet:
Okay ich hab es mir nochmal überlegt und habe beschlossen für jedes Gebäude ein eigenes Feld zum Bauen zu errichten habe im Moment das hier:

PHP:
$Zeit = time();  

$select = "select Kaserne from Tabelle";

    $Kasernenstufe = Kaserne * 742;
    $ErrechnungBauzeit = $Zeit + $Kasernenstufe;
    $Endzeit = $Zeit - §ErrechnungBauzeit 
// Speicherfunktion..

1.Irgendwelche Fehler?
2.Wie bekomme ich das jetzt in Javascript also die $Endzeit

Okay mein Script sieht jetzt so aus...

Teil von Bau.php
PHP:
if($Kaserne="yes")
         {
          function updateKaserne()
      {


      $update = "UPDATE usersU1 set Kaserne = Kaserne + 1";


         $eintragen = mysql_query($update) or die("Update: ". mysql_error());



       $select = "select Kaserne from usersU1";
        if(Kaserne <= 5)
        {

    $Kasernenstufe = Kaserne * 742;
    $ErrechnungBauzeit = $Zeit + $Kasernenstufe;
   $Kaserne_eintragen = "INSERT INTO usersU1 (`Kasernenbauzeit`) VALUES('$ErrechnungBauzeit'')";
   $Kaserne_speichern = mysql_query($Kaserne_eintagen) or die(mysql_error());


         }
         else
         {
           $Kasernenstufe = Kaserne * 1274;
    $ErrechnungBauzeit = $Zeit + $Kasernenstufe;
   $Kaserne_eintragen = "INSERT INTO usersU1 (`Kasernenbauzeit`) VALUES('$ErrechnungBauzeit'')";
   $Kaserne_speichern = mysql_query($Kaserne_eintagen) or die(mysql_error());
         }
         }

Teil von Bauaufträge.php
PHP:
$Zeit = time();
$select = "select Kasernenbauzeit from usersU1";
 if(Kasernenbauzeit <= $Zeit)
 {
 $Kaserne_löschen = "DELETE Kasernenbauzeit FROM usersU1";
$Kaserne_löschen_ausführen = mysql_query($Kaserne_löschen) or die(mysql_error());   
}
 
Zuletzt bearbeitet von einem Moderator:
Du solltest dir vielleicht überlegen die Gebäude in eine eigene Tabelle auszulagern, also nicht als Spalten in einer Tabelle aufführen.

Willst du nämlich irgendwann mal ein Gebäude hinzufügen oder ein Gebäudenamen ändern wird es schon schwierig.

$Endzeit = $Zeit - §ErrechnungBauzeit
Das wird nicht funktionieren, muss ein $ sein.

$update = "UPDATE usersU1 set Kaserne = Kaserne + 1";
Sollen wirklich alle Kasernen um 1 hochgezählt werden ohne irgendwelche Einschränkungen?

Ich würde mir wahrscheinlich eine allgemeine Gebäude Klasse schreiben die für mich das updaten usw. übernimmt. Die Daten für ein Gebäude kann ich dann an einer ID festmachen die ich dem Konstruktor übergebe oder so.

Sollte die Kaserne spezielle Funktionen haben, so schreibe ich diese auch in eine Klasse und lasse danach dann die Kasernen Klasse von der Gebäude Klasse erben.

So kann ich dann zum Beispiel im Quellcode einfach aufrufen
PHP:
if($Kaserne="yes") {
$kaserne = New Kaserne(1); //Oder halt new Gebaeude('kaserne') das ist dir überlassen
$kaserne->update();
$kaserne->produce(); //sowas in der art halt
}

Dadurch kann ich dann auch die Berechnung der Zeit usw. in die Klasse packen.

Ich mache es so, dass ich für das Bauen von Gebäuden eine extra Tabelle habe, dort speichere ich eine ID, die Endzeit, die Gebäude ID und die User ID. Nun frage ich dann einfach per SQL ab ob eine Endzeit unter der aktuellen Zeit liegt und lasse mir die IDs zurückgeben und kann anhand dieser IDs alle benötigten Informationen rauspicken und dadurch dem entsprechenden Spieler die Stufe erhöhen.

Man kann das ganze nun auf Events allgemein ausweiten, also zum Beispiel "Fertigstellung von Einheiten", "Angreifende Einheiten die eine Weile laufen müssen", "Fertigstellung von Forschungen", "Fertigstellung von Gebäuden" usw. Da würdestdu dann noch ein paar Infos mehr speichern um zu wissen was zu tun ist.
 
So besser?
PHP:
  $update = "UPDATE usersU1 set Kaserne = Kaserne + 1 WHERE $_SESSION['user'];";

Danke für deine Hilfe :)

Ich habe das Script jetzt etwas umgeschrieben...

PHP:
$Grund = 0.5;
function produce()
         {
         if($Wert == 0)
         {
                 $update = "UPDATE usersU1 set $Wert = $Wert + 1 WHERE $_SESSION['user'];";
                $eintragen = mysql_query($update) or die("Update: ". mysql_error());
 $Baustufe = $Grund * 742;
    $ErrechnungBauzeit = $Zeit + $Baustufe;
   $Bauzeit_eintragen = "INSERT INTO usersU1 (`$Eintag`) VALUES('$ErrechnungBauzeit'')";
   $Bauzeit_speichern = mysql_query($Bauzeit_eintagen) or die(mysql_error());

         }
                 }
                 function update()
         {
         if($Wert >= 1)
         {
                 $update = "UPDATE usersU1 set $Wert = $Wert + 1 WHERE $_SESSION['user'];";
                $eintragen = mysql_query($update) or die("Update: ". mysql_error());

                $Baustufe = $Wert * 742;
    $ErrechnungBauzeit = $Zeit + $Baustufe;
   $Bauzeit_eintragen = "INSERT INTO usersU1 (`$Eintag`) VALUES('$ErrechnungBauzeit'')";
   $Bauzeit_speichern = mysql_query($Bauzeit_eintagen) or die(mysql_error());


         }
         else
         {
           $Baustufe = $Wert * 1274;
    $ErrechnungBauzeit = $Zeit + $Baustufe;
   $Bauzeit_eintragen = "INSERT INTO usersU1 (`$Eintrag`) VALUES('$ErrechnungBauzeit'')";
   $Bauzeit_speichern = mysql_query($Bauzeit_eintagen) or die(mysql_error());


         }
         if($Wert >= 20)
         {
         header("Location: Bau.php?msg=Die Höhststufe ist ereicht!");
         }

                 }

Wie bekomme ich es jetzt hin das er bei jedem if (für zB. Kaserne) den Wert für Kaserne ausliest
 
Zurück