MYSQL Wert erhöhen

  • Themenstarter Themenstarter koronyl
  • Beginndatum Beginndatum
$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.
 
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

PHP:
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.
 
PHP:
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.
 
Danke :)
Andere Frage:
Ist es Möglich zB. die Planetennamen in eine Spalte in MYSQL zu speichern und dann einzeln aus zu lesen?
 
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.
 
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

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

Code:
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:
<?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:
//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:
<?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:
//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.
 
Zurück