# MYSQL Wert erhöhen



## koronyl (2. April 2009)

Hallo Leute in meiner Datenbank möchte ich einen Wert erhöhen aber irgendwie geht das nicht er macht es einfacht nicht 

Hier mal der code



```
<?php
$host = "localhost";
$user = "###";
$pass = "###";
$dbase = "###";
$db = mysql_connect($host, $user, $pass) or die ("Verbindung fehlgeschlagen");
      mysql_select_db($dbase, $db) or die ("Verbindung zur datenbank fehlgeschlagen");


      function updateKaserne()
      {

     $update = "UPDATE Kaserne from Gebaeude set Kaserne = Kaserne + 1 where id = 1";
     echo mysql_error();
      }


if($Kaserne="yes")
         {
         updateKaserne();
         }

       $select = "select * from Gebaeude";
    $result = mysql_query($select,$db);

 while($row = mysql_fetch_array($result)){
 {


}
 echo "Die Kaserne ist auf Stufe ".$row['Kaserne']."";
  }

       ?>
      <p><a href="<?echo $PHP_SELF."?Kaserne=yes"; ?>">Kaserne ausbauen</a></p>
```


----------



## ZodiacXP (2. April 2009)

PC ist von Natur aus faul und macht nur was man ihm explizit sagt. 
Sieh dir deine Funktion mal an und sag mir was fehlt:

```
function updateKaserne()
{
  // Anweisung als String speichern
  $update = "UPDATE Gebaeude set Kaserne = Kaserne + 1 where id = 1";
  // mysql-Fehler ausgeben
  echo mysql_error();
}
```

Kommentare helfen bei der Übersicht von Code für einen selbst und für fremde zur Widerverwendung.


----------



## kuddeldaddeldu (2. April 2009)

Und dann schaust Du Dir erstmal die UPDATE-Syntax an.

LG


----------



## koronyl (3. April 2009)

Anweisung auszuführen....

Aber wie kann ich das was in 

```
$update
```
steht ausführen?


----------



## Steusi (3. April 2009)

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


----------



## koronyl (3. April 2009)

Super funktioniert alles!
Eine Frage noch:
Kann man in der Datenbank irgendetwas anlegen was diesen Prozess Stoppt wenn der Wert 20 ist?


----------



## kuddeldaddeldu (3. April 2009)

Ich weiß zwar nicht, welchen Wert Du meinst, aber man legt nicht "irgendwas in der Datenbank an", man baut entsprechende Bedingungen in die Abfrage ein.

LG


----------



## koronyl (3. April 2009)

Der Wert Kaserne
aber du hast recht mit if würd das gehen danke 

Kann man einen Wert  sich automatisch nach jeder MInute erhöhen lassen?
Und kann man Werte aus anderen Datenbanken zb. user id dort mit einbeziehen?


----------



## ZodiacXP (3. April 2009)

Ah, ich hoffe ich habe dein Problem verstanden, weil ein ähnliches hatte ich auch mal.
Dies lässt sich natürlich über sogennante  CronJobs lösen, sofern dein Hoster das Unterstützt.
Allerdings habe ich es damals nur über das Script gelöst, dass wenn man sich wieder einloggt die Rohstoffe, Gebäude und alles aktualisiert werden.
Und zwar erst mal eine SQL-Tabelle hier für die Produktion von Einheiten:
BenutzerID, Ereigniszeit, EinheitID, Anzahl (Unterstrichene sind Primärschlüssel - sollte der schon vorhanden sein einfach eine Sekunde zur Zeit hinzufügen).

Und jedesmal wenn der Benutzer sich einloggte, angegriffen wurde oder man einfach aktuelle Werte brauchte, hat ein Script alle Ereignisse abgearbeitet:

```
$result = mysql_query("SELECT * FROM `ereignis_einheiten` WHERE `BenutzerID` = " . $besnutzerID . " && `ereigniszeit` <= " . time());

while ($row = mysql_fetch_row($result))
{
  // Ereignisse auffangen, abarbeiten
}

// Bedingung der Anweisung von oben nochmal mit DELETE-Anweisung
// damit die Ereignisse gelöscht werden, weil: soeben abgearbeitet
```


----------



## Steusi (3. April 2009)

Wenn der User bereits auf der Seite ist, kann ich doch mittels JavaScript sagen, lade die Seite alle 60 Sekunden neu, beim neuladen der Seite wird dann doch auch wieder der PHP Code abgearbeitet.
Cronjobs laufen auf Linux ohne Probleme, für Windows gibt es aber auch genug Programme. Jedoch, denke ich nicht das es in dieses Fall notwendig ist, oder irre ich mich?


----------



## koronyl (3. April 2009)

Okay habe mich jetzt bei Cronjob.de angemeldet...
Aber ich verstehe nicht wie ihr das meint?
Welchen code zur Aktualisierung?

Irgendwie funktioniert das nicht mehr....


```
<?php
$host = "localhost";
$user = "clonewars_01";
$pass = "kakabumschika";
$dbase = "clonewars_01";
$db = mysql_connect($host, $user, $pass) or die ("Verbindung fehlgeschlagen");
      mysql_select_db($dbase, $db) or die ("Verbindung zur datenbank fehlgeschlagen");


         function updateKaserne()
      {

     $update = "UPDATE Gebaeude set Kaserne = Kaserne + 1 where id = 1";
     $eintragen = mysql_query($update) or die("Update: ". mysql_error());
     echo mysql_error();
      }


if($Kaserne="yes")
         {
         updateKaserne();
         }

       $select = "select * from Gebaeude";
    $result = mysql_query($select,$db);

 while($row = mysql_fetch_array($result))
 {




 echo "Die Kaserne ist auf Stufe ".$row['Kaserne']."";
  }

       ?>
      <p><a href="<?echo $PHP_SELF."?Kaserne=yes"; ?>">Kaserne ausbauen</a></p>
```


----------



## ZodiacXP (3. April 2009)

Steusi hat gesagt.:


> Jedoch, denke ich nicht das es in dieses Fall notwendig ist, oder irre ich mich?



Kann ich nicht sagen, weil ich noch nicht weis, was er vor hat.



koronyl hat gesagt.:


> Welchen code zur Aktualisierung?



Zunächst was zu lesen: http://de.wikipedia.org/wiki/Cron

Bei Cronjob .de kannst du eine URL angeben die aufgerufen werden soll.
Das wäre dann eine URL zu einer PHP auf deinem Server.
Und diese PHP ist dein Script, dass das macht was du jede Minute machen möchtest:

```
<?PHP
mysql_query("UPDATE aber SOFORT!");
?>
```

Wenn jemand die URL zu dieser PHP rauskriegt ist dein Vorhaben natürlich für Popo also kannst du folgende Prüfung am Anfang machen:

```
if ($_GET["ausgedachter_get"] != "ausgedachter_wert")
{
  exit();
}
```

Das macht es nicht absolut sicher, aber etwas sicherer 

Was genau hast du denn vor?
Was ist der Sinn dieser minütlichen Aktualisierung?

EDIT: Und bitte lass mal diese Doppelposts. Das war glaub ich schon der zweite in diesem Thread.
kuddeldaddeldu hat dir vorhin gesagt, du sollst dir die UPDATE-Syntax ansehen. Blätter mal zurück und schau es dir an.


----------



## koronyl (3. April 2009)

Es soll in der MYSQL Tabelle eine Spalte Credits geben...
Diese Credits sollen sich nach der Planetenanzahl vom Spieler richten zB. nimmt ein Spieler einen Planeten ein erhält er zB. 1000 Credits mehr die automatisch auf der Datenbank gespeichert werden sollen...Dieser Vorgang soll möglichst jede Minute passieren also bekommt der Spieler jede Minute 1000:60 also 16,66666...
Credits jede Minute gerundet dan 17


----------



## Steusi (3. April 2009)

Ich würde sogar $_SERVER[REQUEST_URI] empfehlen.
Das alles jede Minute für X-User wird ne Belastung ohne ENDE


----------



## ZodiacXP (3. April 2009)

koronyl hat gesagt.:


> Dieser Vorgang soll möglichst jede Minute passieren also bekommt der Spieler jede Minute 1000:60 also 16,66666...
> Credits jede Minute gerundet dan 17



Du kannst in SQL-Anweisungen andere Felder zur Berechnung durchaus einbeziehen:

```
UPDATE `tabelle` SET `feld` = `anderes_feld` * 1000 / 60
```
Womit du, wie schon erwähnt, SQL quälst. Die Rangliste einmal am Tag oder einmal pro Stunde zu aktualisieren reicht völlig. Damit der User denkt, es wäre immer aktuell wird er beim Anzeigen einfach an die richtige Position mit seinen aktuellen Punkten eingefügt, die es ja sicherlich in der Session gibt.

Dabei hoffe ich aber auch, dass man bei deinem Spiel Planeten abnehmen / einnehmen kann. Weil die Rangliste sonst sehr eintönig wird je weiter das Spiel / die Runde schon ist.


----------



## koronyl (4. April 2009)

Und was ist mit meinem Problem?
Es funktioniert nicht mehr...
Also er zeigt ja die echo angabe nicht an und erhöht nicht den Wert


----------



## ZodiacXP (4. April 2009)

Funktioniert die SQL-Anweisung für das aktualisieren denn so in phpMyAdmin oder ähnlichem?

Wird ein anderes echo (z.B. "echo PHP_VERISON;" ) denn ausgegeben?
Es ist verständlich, dass echo *_error nichts ausgibt wenn kein Fehler vorliegt. Daher denke ich da passt was mit dem Query nicht.

Ist die Verbindung hergestellt? Die Datenbank ausgewählt?

Einfach mal Schritt für Schritt nachschauen, testen, prüfen um den Fehler einzugrenzen.


----------



## koronyl (5. April 2009)

An der Verbindung liegts nicht.
Hier mal die MYSQL TAbelle:


und mein momentaner code:


```
<?php
$host = "localhost";
$user = "###";
$pass = "###";
$dbase = "###";
$db = mysql_connect($host, $user, $pass) or die ("Verbindung fehlgeschlagen");
      mysql_select_db($dbase, $db) or die ("Verbindung zur datenbank fehlgeschlagen");

          function updateKaserne()
{
  // Anweisung als String speichern
  $update = "UPDATE Gebaeude set Kaserne = Kaserne + 1 where id = 1";
  // mysql-Fehler ausgeben
$eintragen = mysql_query($update) or die("Update: ". mysql_error());
}


if($Kaserne="yes")
         {
         updateKaserne();
         }

       $select = "select * from Gebaeude";
    $result = mysql_query($select,$db);

 while($row = mysql_fetch_array($result)){
 {


}
 echo "Die Kaserne ist auf Stufe ".$row['Kaserne']."";
  }

       ?>
      <p><a href="<?echo $PHP_SELF."?Kaserne=yes"; ?>">Kaserne ausbauen</a></p>
```


----------



## Dark Ranger (6. April 2009)

Du könntest bei deiner "mysql_query" Anweisung auch noch ein "or die("Fehler") " einfügen um zu schauen ob dort irgendein Fehler auftritt


----------



## koronyl (6. April 2009)

Okay jetzt funktioniert es wieder...
ICh habe aber keine Ahnung warum....egal 
Danke für eure Hilfe


----------



## koronyl (6. April 2009)

*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?


----------



## ZodiacXP (6. April 2009)

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?


----------



## koronyl (6. April 2009)

php etwas
html perfekt
css mittel


----------



## Maik (6. April 2009)

ZodiacXP hat gesagt.:


> OT: Hast du mit anderen Programmiersprachen schon "Kontakt" gehabt? VB.net oder ähnlichem?





koronyl hat gesagt.:


> html perfekt
> css mittel


Dies sind keine Programmiersprachen.

HTML = *H*yper*t*ext *M*arkup *L*anguage = Auszeichnungssprache
CSS = *C*ascading *S*tyle*s*heets = Formatierungssprache

mfg Maik


----------



## koronyl (6. April 2009)

Ja ich weiß aber ich denke das man das auch mal erwähnen kann


----------



## koronyl (6. April 2009)

Ich habe bisher (zur Zeit) das:


```
$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


----------



## ZodiacXP (7. April 2009)

Wird echt mal Zeit:

http://tut.php-quake.net/de/
http://books.google.de/books?id=Z8H...cover&dq=php+in+a+nutshell&lr=lang_de#PPR3,M1
http://www.selfphp.de/funktionsreferenz/index.php (Minimum für deine Favoriten im Browser)
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.


----------



## koronyl (7. April 2009)

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:


```
$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

```
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

```
$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());   
}
```


----------



## Dark Ranger (7. April 2009)

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

```
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.


----------



## koronyl (8. April 2009)

So besser?

```
$update = "UPDATE usersU1 set Kaserne = Kaserne + 1 WHERE $_SESSION['user'];";
```

Danke für deine Hilfe 

Ich habe das Script jetzt etwas umgeschrieben...


```
$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


----------



## Dark Ranger (8. April 2009)

> $update = "UPDATE usersU1 set Kaserne = Kaserne + 1 WHERE *'user_id'=*$_SESSION['user'];";


Du musst deinen Wert auch auf irgendwas abfragen.

Die Werte musst du halt per Select abfragen, am besten schreibst du dir dafür auch eine Funktion wenn du keine Klasse verwenden willst.

Deine Errechnung der Bauzeit würde ich auch nochmal überdenken. Am besten findest du eine Formel der du einfach die aktuelle Stufe übergibst und danach dann die Bauzeit ausrechnet.


----------



## koronyl (8. April 2009)

Dark Ranger hat gesagt.:


> Du musst deinen Wert auch auf irgendwas abfragen.



Ja hab ich auch so im Editor stehen habs erst danach gemerkt


----------



## koronyl (8. April 2009)

Ich habe ein weiteres Problem...
Wenn ich die Seite öffne wird die Funktion natürlich ausgeführt wie änder ich das also das die FUnktion nur ausgeführt wird wenn Kaserne=yes ist?

Hier mein Script


```
function produce()
         {
         if($Wert == 0)
         {
                 $update = "UPDATE usersU1 set $Wert = $Wert + 1 WHERE full_name=$_SESSION['user'];";
                $eintragen = mysql_query($update) or die("Update: ". 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!");
         }

                 }



          $select = "select * from usersU1 WHERE full_name = $_SESSION['user']";
    $result = mysql_query($select,$db) or die("Update: ". mysql_error());
      while($row = mysql_fetch_array($result))
 {




 echo "Die Kaserne ist auf Stufe ".$row['Kaserne']."";
  }

if($Kaserne="yes")
         {
         $Wert = mysql_query(select Kaserne from usersU1 WHERE full_name = $_SESSION['user']") or die(mysqlerror());
         $Eintrag = mysql_query(select Kasernenbauzeit from usersU1 WHERE full_name = $_SESSION['user']") or die(mysqlerror());






    }
```

Also im Allgemeinem Sinne hier gehts ja nicht wegen $Wert usw.


----------



## Dark Ranger (8. April 2009)

```
function update($Wert) {
    echo $Wert
}
$Kaserne = "yes"

if($Kaserne=="yes") {
    update(5);
    update(6);
}
```

Ausgabe:
5
6

So kannst du halt den Funktionen Werte übergeben und abfragen. Bei deiner if Abfrage fehlt ein = , du musst == einsetzen. = ist eine Zuweisung und in der if weist du "yes" $Kaserne zu und wenn dies erfolgreich ist, wird alles in der If Anweisung ausgeführt.


----------



## koronyl (8. April 2009)

Danke 
Andere Frage:
Ist es Möglich zB. die Planetennamen in eine Spalte in MYSQL zu speichern und dann einzeln aus zu lesen?


----------



## Parantatatam (9. April 2009)

Nein, weißt du, man kann immer nur die ganze Tabelle auslesen :suspekt: Natürlich kannst du die Planeten in eine Tabelle schreiben und dann einzeln auslesen. Mehr dazu findest du in der MySQL-Dokumentation unter den Suchbegriffen *INSERT* und *SELECT*.


----------



## koronyl (9. April 2009)

Also geht es nicht so einach 
Ich bin jetzt bis Sonntag im Urlaub  ;-)
also ihr könnt ruhig schreiben nur werde ich leider erst Sonntag antworten



einfach nur crack hat gesagt.:


> Nein, weißt du, man kann immer nur die ganze Tabelle auslesen :suspekt: Natürlich kannst du die Planeten in eine Tabelle schreiben und dann einzeln auslesen. Mehr dazu findest du in der MySQL-Dokumentation unter den Suchbegriffen *INSERT* und *SELECT*.




ich meinte ja auch einzeln aus der 2ten Spalte zB. Zeile drei  auslesen
Spalte 1: Thomas
Spalte2:
Zeile 1: Hallo
Zeile2: Ich
Zeile3: Du
Spalte3: Hannover
Ausgabe:
Du


----------



## Dark Ranger (9. April 2009)

Ich glaube du solltest dir erstmal viele Gedanken um den Aufbau deiner Datenbank machen bevor du anfängst zu programmieren.

Folgende Tabellen finde ich zum Beispiel sinnvoll (um Gebäude abzuspeichern)


```
User
    ID
    Username
    Password
    ...

Building
    ID
    Name
    Description
    Basiccost
    Factor
    ...

CrossUserBuilding
    ID
    UserID
    BuildingID
    Level
    ...
```

Und damit kannst du dann zum Beispiel eine Klasse füttern:

```
<?php
    class Building {
        private $userid;
        private $buildingid;
        private $name;
        private $description;
        private $basiccosts;
        private $factor;
        private $level;

        public function Building($userid,$buildingid) {
            //Datenbankverbindung besteht schon
            $this->userid = $userid;
            $this->buildingid = $buildingid;
            $this->readData();
        }

        private function readData() {
            //Vorher eventuell überprüfen ob Daten überhaupt vorhanden sind
            $result = mysql_query("SELECT * FROM Building INNER JOIN CrossUserBuilding ON Building.ID = CrossUserBuilding.BuildingID WHERE Building.ID='".$this->buildingid."' AND CrossUserBuilding.UserID='".$this->userid."' LIMIT 1");
            $row = mysql_fetch_array($result);
            $this->name = $row['name'];
            $this->description = $row['description'];
            $this->basiccosts = $row['Basiscost'];
            $this->level = $row['Level'];
        }

        public function getCostsForNextLevel() {
            return $this->level*$this->basiccosts*$this->factor;
        }

        public function IncreaseLevel() {
            //SQL Update um es in der Datenbank zu speichern.
            //Danach dann entweder
            $this->level++;
            //Oder einfach
            $this->readData();
        }
    }
?>
```

So wenn wir nun in der Building Tabelle die Kaserne mit der ID 1 haben und auch schon in der Cross Tabelle ein Eintrag vorhanden ist (zum Beispiel mit einem Level von 3), dann können wir das ganze wie folgt aufrufen: (Wir gehen jetzt mal von User 3 aus)


```
//PHP Datei mit der Building Klasse einbinden
require_once('classes/building.class.php');

$kaserne = new Building(3,1);
if($currentRessources>=$kaserne->getCostsForNextLevel()) {
    $kaserne->IncreaseLevel();
    //Dem Spieler/User noch die Rohstoffe abziehen die gebraucht werden.
}
```

Dies ist nur ein kleines Beispiel wie du die einzelnen Funktionen in Klassen unterbringen kannst. Dieses Beispiel ist aber dynamischer als wenn ich für jedes Gebäude eine einzelne Funktion schreibe.

Überlege dir einfach vorher was deine Gebäude oder auch andere Dinge gemeinsam haben und wie du diese Sachen am Besten kombinierst, dadurch hast du es später einfacher.

Natürlich kann man die Klasse oben noch erweitern, weil man vielleicht Funktionen braucht die nur eine Kaserne hat:

```
<?php
    class Kaserne extends Building {
        public function Kaserne($userid, $buildingid) {
            parent::Building($userid,$buildingid);
        }

        public function produceSoldat($anzahl) {
            //Überprüfung ob Genug Ressourcen da sind und nur die Anzahl produzieren, für die auch Ressourcen da sind
        }
    }
?>
```

Nun musst du den Aufruf ein bisschen verändern:

```
//PHP Datei mit der Building Klasse einbinden und natürlich auch die Kaserne Klasse
require_once('classes/building.class.php');
require_once('classes/kaserne.class.php');

$kaserne = new Kaserne(3,1);
if($currentRessources>=$kaserne->getCostsForNextLevel()) {
    $kaserne->IncreaseLevel();
    //Dem Spieler/User noch die Rohstoffe abziehen die gebraucht werden.
}
$kaserne->produceSoldat(5);
```

Grüße
Ranger

P.S.: Der Gesamte Code ist aus dem Kopf geschrieben und nicht getestet.


----------

