probleme beim rechnen...

Ich hab ein Script, welches oben auf der HP eine von mir definierte Zahl ausgibt. Weiter unten hab ich eine Checkbox. Wenn die Checkbox aktiviert ist, und der user dann auf den submit button klickt, soll die Zahl um eine bestimmte Menge verringert werden. Das erste von den beiden Scripten ist nur ein Ausschnitt aus einem Script, der aber alles was wichtig ist für den Teil enthalten dürfte, ansonsten nachfragen. Hört sich alles komplizierter an als es ist. Ich poste einfach mal, was ich habe:

PHP:
<html>
	<head>
	</head>
	<body>
		<form action = "ausbau.php" method = "post">
		<?php
		mysql_connect(localhost, name, pass);
		mysql_select_db("frankenstein007");
		$result = mysql_query("SELECT `geld` FROM `users` WHERE `username`='frankenstein'");
	    $row = mysql_fetch_array($result);
        $stufe = mysql_query("SELECT `stufeg1` FROM `users` WHERE `username`='frankenstein'");
		$stufeg1 = mysql_fetch_array($stufe);
        $vermögen = $row["geld"] + (time() - $vstamp["tstamp"]) ;
		$sqlab = "update users set geld = $vermögen";
		mysql_query($sqlab);
		echo "aktuelles Vermögen: ".$row["geld"]." $";
		?>
<input type="checkbox" name="ausbauen" value="1">

<?php
		$ausbau = $stufeg1["stufeg1"] + 1;
	                echo "Stufe ".$ausbau;
?>
<?php
		$kosteng1 = 60 * pow(1.5,$stufeg1["stufeg1"] - 1);
	                echo $kosteng1." $";
?>
<input type = "submit" value="ausbauen">
</body>
</html>

Und noch die Datei "ausbau.php" (siehe oben "<form action = "ausbau.php" method = "post">"
PHP:
<?php
		mysql_connect(localhost, name, pass);
		mysql_select_db("frankenstein007"); //war mir nich ganz sicher, muss ich die Verbindung zur DB nochmals herstellen, oder reicht es, wenn ich es im 1. Script habe?
		If ($_POST["bauen"] == "on") 
		{
		mysql_query("update users set geld = $vermögen - $kosteng1");
		mysql_query("update users set stufeg1 = ".$stufeg1["stufeg1"]." + 1");
		}
else 
		{
		}
		header('Location: http://frankenstein007.fr.funpic.de/ress.php', true, 301);
    exit;
?>

Das Problem ist, dass sich an den beiden Werten "geld" und "stufeg1" in der SQL-Tabelle nix ändert, nach der Bestätigung wird einfach unverändert wieder die erste seite angezeigt. Wer das ganze online sehen und ausprobieren will: hier klicken
Falls zusätzliche Infos benötigt werden einfach melden. Ich weiss, dass meine Codes sehr unübersichtlich sind, bitte darum vielmals um Entschuldigung. Hoffe es kann mir jemand helfen. Einigen dürfte das Script bereits bekannt vorkommen^^

mfg frankenstein
 
sehe ich genauso Sven.

Sollte da nicht ne Session oder so sein? oder ein hidden POST?

PS: wenn du das machst pass auf ne SQL Injection auf!
$stufeg1["stufeg1"] soll doch eine Zahl sein dass pack in die SQL-Query: intval($stufeg1["stufeg1"]) dann darfs auch nur noch eine zahl sein
 
PHP:
session_start(); // SESSIONs starten....
<html>
    <head>
    </head>
    <body>
        <form action = "ausbau.php" method = "post">
        <?php
        mysql_connect(localhost, name, pass);
        mysql_select_db("frankenstein007");
        $result = mysql_query("SELECT `geld` FROM `users` WHERE `username`='frankenstein'");
        $row = mysql_fetch_array($result);
        $stufe = mysql_query("SELECT `stufeg1` FROM `users` WHERE `username`='frankenstein'");
        $stufeg1 = mysql_fetch_array($stufe);
        $vermögen = $row["geld"] + (time() - $vstamp["tstamp"]) ;
        $sqlab = "update users set geld = $vermögen";
        mysql_query($sqlab);
        echo "aktuelles Vermögen: ".$row["geld"]." $";
        ?>
<input type="checkbox" name="ausbauen" value="1">

<?php
        $ausbau = $stufeg1["stufeg1"] + 1;
                    echo "Stufe ".$ausbau;

        $kosteng1 = 60 * pow(1.5,$stufeg1["stufeg1"] - 1);
                    echo $kosteng1." $";
       // SESSION HINZUFUEGEN
       $_SESSION['stufeg1'] = $stufeg1["stufeg1"];
       $_SESSION['$vermögen'] = $vermögen;
       $_SESSION['$kosteng1'] = $kosteng1;
?>
<input type = "submit" value="ausbauen">
</body>
</html>

Wenn jetzt nach dem 2. script die SESSIONs nicht mehr benötigt werden:
PHP:
<?php
        session_start(); // SESSIONs wieder aufnehmen von vorherigen script
        mysql_connect(localhost, name, pass);
        mysql_select_db("frankenstein007"); //war mir nich ganz sicher, muss ich die Verbindung zur DB nochmals herstellen, oder reicht es, wenn ich es im 1. Script habe?
        If ($_POST["bauen"] == "on") 
        {
        mysql_query("update users set geld = $vermögen - $kosteng1");
        mysql_query("update users set stufeg1 = ".intval($_SESSION['stufeg1'])." + 1");
        /* intval() ist die funktion um aus der session eine Zahl zu erzwingen (gegen Hacker) 
            $_SESSION['stufeg1'] ist die Zahl vom vorherigen script was übergeben wurde  */
        }
else 
        {
        }
        header('Location: http://frankenstein007.fr.funpic.de/ress.php', true, 301);
    exit;
    session_destroy(); // SESSIONs zerstöhren, wenn sie nichtmehr danach gebraucht wird
?>

andere möglichkeit wäre
HTML:
<form type="hidden" name="stufeg1" value="$stufeg1["stufeg1"]">
Durch die Methode wird $stufeg1 per post übergeben und kann dann wie ein normales post feld weiter verwertet werden.

Für welche Methode du dich entscheidest hängt meiner Meinung nach von 2 Faktoren ab:
1. sensibilität der Daten
2. dauer der verwertung

SESSIONs sind langlebiger also man nutzt sie z.b. auf 3 verschiedenen seiten immer wieder, ähnlich wie COOKIES

FORM HIDDEN würde ich nur bei ungefährlichen daten nutzen die du auch auf jedenfall immer überprüfst ob sie auch das richtige "format" haben. Sonst kannst ärger geben ;)
 
Zuletzt bearbeitet von einem Moderator:
Was mir auffällt:


HTML:
session_start(); // SESSIONs starten....
<html>
    <head>
    </head>
    <body>
....
...

Du hast session_start(); gar nicht in PHP-Tags. Dann würde das einfach so geprintet. Aber da es noch außerhalb des Body Bereiches ist, wirds halt nich angezeigt
 
Erstmal danke für die Hilfe. Funktioniert aber leider noch nicht... Die Zeile mit session_start() hab ich in die PHP Tags genommen. Am besten ist es wohl, ich poste mal mein ganzes Script... Das ist das script, welches hochgeladen wurde und man es hier anschauen kann.

also nochmal ress.php
PHP:
<html>
	<head>
	</head>
	<body>
		<form action = "ausbau.php" method = "post">
		<?php
		session_start(); // SESSIONs starten....
		mysql_connect(localhost, name, pass);
		mysql_select_db("frankenstein007");
		$result = mysql_query("SELECT `geld` FROM `users` WHERE `username`='frankenstein'");
		$row = mysql_fetch_array($result);
		$vortstamp = mysql_query("SELECT `tstamp` FROM `users` WHERE `username`='frankenstein'");
		$vstamp = mysql_fetch_array($vortstamp);
		$stufe = mysql_query("SELECT `stufeg1` FROM `users` WHERE `username`='frankenstein'");
		$stufeg1 = mysql_fetch_array($stufe);
		$menge = $stufeg1["stufeg1"] * $stufeg1["stufeg1"] * 0.1;
		$vermögen = $row["geld"] + ((time() - $vstamp["tstamp"]) * $menge);
		$sqlab = "update users set geld = $vermögen";
		mysql_query($sqlab);
		echo "aktuelles Vermögen: ".$row["geld"]." $";
		?>
		<br>
		<table border>
			<tr>
				<b><td>akt. Stufe</td>
				<td>Ausbau auf</td>
				<td>Kosten</td>
				</tr></b>
					<tr>
						<td>
							<?php
							echo $stufeg1["stufeg1"];
							?>
						</td>
						<td>
							<input type="checkbox" name="ausbauen" value="1">
							<?php
							$ausbau = $stufeg1["stufeg1"] + 1;
							echo "Stufe ".$ausbau;
							?>
						</td>
						<td>
							<?php
							$kosteng1 = 60 * pow(1.5,$stufeg1["stufeg1"] - 1);
							echo $kosteng1." $";
							$_SESSION['stufeg1'] = $stufeg1["stufeg1"];
      				$_SESSION['$vermögen'] = $vermögen;
       				$_SESSION['$kosteng1'] = $kosteng1;
							?>
						</td>
					</tr>
			</table>
			<br>
			
		<input type = "submit" value="ausbauen">
	<?php
    $time = time();
    $timestamp = "update users set tstamp = $time";
    mysql_query($timestamp);
    ?>
    </body>
    </html>

und ausbau.php
PHP:
<?php
        session_start(); // SESSIONs wieder aufnehmen von vorherigen script
        mysql_connect(localhost, name, pass);
        mysql_select_db("frankenstein007"); //war mir nich ganz sicher, muss ich die Verbindung zur DB nochmals herstellen, oder reicht es, wenn ich es im 1. Script habe?
        If ($_POST["bauen"] == "on") 
        {
        mysql_query("update users set geld = $vermögen - $kosteng1");
        mysql_query("update users set stufeg1 = ".intval($_SESSION['stufeg1'])." + 1");
        /* intval() ist die funktion um aus der session eine Zahl zu erzwingen (gegen Hacker) 
            $_SESSION['stufeg1'] ist die Zahl vom vorherigen script was übergeben wurde  */
        }
else 
        {
        }
        header('Location: http://frankenstein007.fr.funpic.de/ress.php', true, 301);
    		exit;
    		session_destroy(); // SESSIONs zerstöhren, wenn sie nichtmehr danach gebraucht wird
?>

Vielleicht noch ein Beispiel, wie das schlussendlich funktionieren soll:

Seite ress.php
aktuelles Vermögen: 100$
akt. Stufe 1,
*checkbox* Ausbau auf Stufe 2,
Kosten: 60$
*submitbutton*

Wenn Checkbox aktiviert und auf submit button geklickt:
aktuelles Vermögen: 40$ /* (Vermögen - Kosten)
akt. Stufe 2
*checkbox*Ausbau auf Stufe 3
Kosten: 90 /* siehe Berechnung von $kosteng1

Das ist so das Ziel... Warum es nich funktioniert weiss ich leider nich... Muss ich in ausbau.php in Zeile sieben("mysql_query("update users set geld = $vermögen - $kosteng1");") nicht auch noch was ändern? Ich denke da ist noch was falsch.. Aber ansonsten hab ich keine Ahnung mehr, warum die Werte nicht steigen, bzw. nicht sinken.

mfg frankenstein
 
also ich will jetzt nicht das "ganze script" machen deshalb mal die theorie:

ress.php stufe holen: 1
SESSION mit stufe +1 übergeben an ausbauen.php
updaten der stufe

ress.php:
PHP:
<?php session_start(); // SOLLTE IMMER GANZ OBEN SEIN ?> 

<form>...</form>

<?php
$stufe = mysql_query("SELECT `stufeg1` FROM `users` WHERE `username`='frankenstein'");
$stufeg1 = mysql_fetch_array($stufe); 

$ausgebaut = $stufeg1 + 1;

$_SESSION['ausgebaut'] = $ausgebaut;
?>

<form type="hidden" value="<? session_id(); ?>">
<!-- SESSION ID PER HIDDEN ÜBERGEBEN KEINE AHNUNG EIGENTLICH GAR NICHT NÖTIG -->

ausbauen.php
PHP:
<?php
        session_start(); // SESSIONs wieder aufnehmen von vorherigen script
        mysql_connect(localhost, name, pass);
        mysql_select_db("frankenstein007"); //war mir nich ganz sicher, muss ich die Verbindung zur DB nochmals herstellen, oder reicht es, wenn ich es im 1. Script habe?
        If ($_POST["bauen"] == "on") 
        {
        mysql_query("update users set geld = '$vermögen - $kosteng1'");
        mysql_query("update users set stufeg1 = '".intval($_SESSION['ausgebaut'])."'"); // geändert:  ' is dazu gekommen
?>
 
Zurück