• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Geld auf MySQL Bank einzahlen

the_real_at_m

Neues Mitglied
Moin!

Ich hab mal ne Frage, ich bin grade dabei für meinen Minecraftserver ein Webinterface zu schreiben und stehe da nun vor einem Problem..

Ich lese aus einer datenbank dashier aus:


PHP:
SELECT balance FROM bank1 WHERE username = '$Lname'

(lname ist der username der jeweiligen session)


nun möchte ich sowas realisieren (das vorhandene geld oben wird von einem anderen script ausgelesen):

j1V8G.png


nun sollen diese 5 Lirin von dem konto auf die jeweilige bank bezahlen, nur irgendwie will meine idee nicht richtig



Nach dem Submit:
PHP:
mysql_query("UPDATE mineconomy_usernames SET balance='$newmoney' WHERE username = '$Lname' ");
mysql_query("UPDATE bank1 SET balance='$transfer' WHERE username = '$Lname' ");

newmoney ist in diesem falle balance - transfer, also 5349.34 - 5 = 5344.34




was mach ich falsch?




grüße
 
Werbung:
Ohne zu wissen was passiert, tippe ich darauf, dass der Fehler darin liegt, dass $newmoney in Hochkommas eingefasst ist. Mach da die Hochkammas weg und es sollte passen.

Achja, das Thema ist dann eigentlich keine PHP-Frage, sondern eine MySQL-Frage.
 
arg, ich seh grade ich hab den post (wohl aus müdigkeit) nicht fertig geschrieben


abziehen tut er mir das geld, nur wird das geld (5Lirin, $transfer) nicht auf die "bank" überwiesen


@thuemmy

wenn ich doe hochkommas bei newmoney wegnehme funktioniert das nicht D:

& erbitte verschieben ins MySQL subforum :)



PHP:
<?
// Made by At-M do not copy or distribute
session_start();
$host = "XX"; //Host
$user = "XX"; //User
$pass = "XX"; //Password
$dbase = "XX"; //Dbase
$name = $_SESSION["username"]; //Session-Name
$Lname = strtolower($name);//Session-Name lowercased damit iconomy damit klarkommt

$newmoney = $_POST['moneybutton'] - $_POST['Einzahlvalue'];
$oldmoney = $newmoney + $_POST['Einzahlvalue'];
$transfer = $_POST['Einzahlvalue'] + $postit;
$postit = mysql_query("SELECT balance FROM bank1 WHERE username = '$Lname'");

$db = mysql_connect($host, $user, $pass) or die ("Verbindung fehlgeschlagen");
mysql_select_db($dbase, $db) or die ("Verbindung zur Datenbank fehlgeschlagen"); 



mysql_query("UPDATE iConomy SET balance='$newmoney' WHERE username = '$Lname' ");
mysql_query("UPDATE bank1 SET balance='$transfer' WHERE username = '$Lname' ");

echo 'Überweisung erfolgreich!<br />'; 

// zur überprüfung ob alles richtig übergeben wird

echo $_POST['Einzahlvalue'];
echo '<-einzahlvalue<br />';
echo $newmoney;
echo '<-newmoney<br />';
echo $oldmoney;
echo '<-oldmoney<br />';
print $Lname;
echo '<-name<br />';
echo $_POST['moneybutton'];
echo '<-moneybutton<br />';
echo $transfer;
echo '<-bank1 neu<br />';

// hier wird keine value ausgegeben
echo $postit;
echo '<-bank1 old?';

?>
 
Zuletzt bearbeitet:
Werbung:
Was wäre noch interessant zu wissen ..
.. was moneybutton im HTML-Code ist?
.. was Einzahlvalue im HTML-Code ist?
.. was die Spalten in MySQL für einen Datentyp haben?

Und mit MySQL hat das hier wenig zu tun, wenn dein PHP-Code bereits nicht passt.
 
Der HTML code

Code:
<form class="example" action="pages/bankzahlung.php" method="post">
    <fieldset>
    <legend><h2>Einzahlen</h2></legend>
    <div class="formular">
    Geldb&ouml;rse: <? include 'getmoney.php'; ?><br /><br />
        Es sollen <input type="int" maxlength="20" id="einzahlen" size="25" name="Einzahlvalue" value="5" /> Lirin zur
        
        <select name="bankname">
            <option value="bank1">Bank 1</option>
              <option value="bank2">Bank 2</option>
              <option value="bank3">Bank 3</option>
        </select> eingezahlt werden.
    </div><br />
    <br />
            <input type="submit" value="Submit"> 
            <input type="hidden" name="moneybutton" value="<? include 'getmoney.php'; ?>" />
    </fieldset>
</form>

account hat "text" und balance hat "int" (in der bank1 tabelle)
bei der iConomytabelle hat account "varchar" und balance "double"
 
Werbung:
Es scheint sich alles um Variable $postit zu drehen.
PHP:
$transfer = $_POST['Einzahlvalue'] + $postit;
$postit = mysql_query("SELECT balance FROM bank1 WHERE username = '$Lname'");
In der ersten Zeile nutzt Du die Variable $postit, ohne dass sie in dem geposteten Code irgendwie initialisiert wird. In der zweiten Zeile wird die Variable belegt, allerdings mit der Resourcen-Id des Queries, und nicht, wie Du vermutlich an der Stelle erwartest, mit dem Wert aus der Spalte "balance" der Tabelle "bank1" (*[SUP]1[/SUP]). Achja, das Query wird an dieser Stelle übrigens nicht ausgeführt, da die Verbindung zur Datenbank erst später im Code hergestellt wird.

*[SUP]1 [/SUP]http://php.net/manual/de/function.mysql-fetch-assoc.php
 
Und jetzt die Ratschläge, die hier wie immer fehlen:
Dein Script ist eine Sicherheitslücke. SQL-Injections sind möglich und du überprüfst eingehende Daten nicht.
Seit mittlerweile mehr als 2 Jahren rät PHP offiziell davon ab, die mysql_*-Extension zu benutzen, weil sie in naher Zukunft wohl als veraltet eingestuft sein wird und in den nächsten Monaten möglicherweise gar komplett verschwinden wird.
Benutze stattdessen besser mysqli oder PDO.
 
Danke :)

Ich bin jetz auch schon weitergekommen, er trägt nun die variable in die datenbank ein, allerdings nicht so, wie ichs mir erhofft hatte.

im beispiel oben von ..fetch_assoc steht ja die value im echo, ich hab mir das jetz so gebastelt:


PHP:
<?
session_start();
$host = "XX"; //Host
$user = "XX"; //User
$pass = "XX"; //Password
$dbase = "XX"; //Dbase

$db = mysql_connect($host, $user, $pass) or die ("Verbindung fehlgeschlagen");
mysql_select_db($dbase, $db) or die ("Verbindung zur Datenbank fehlgeschlagen"); 

$name = $_SESSION["username"];
$Lname = strtolower($name);
$newmoney = $_POST['moneybutton'] - $_POST['Einzahlvalue'];
$oldmoney = $newmoney + $_POST['Einzahlvalue'];


$getbank = "SELECT balance FROM bank1 WHERE account = '$Lname' LIMIT 0, 30 ";

$bkquery = mysql_query($getbank);
$stackbk = array();
while($bk = mysql_fetch_assoc($Bkquery))
$stackbk[] = $bk;
foreach($stackbk as $bk) {
    $postit = $bk['balance'];
}

$transfer = $_POST['Einzahlvalue'] + $postit;

mysql_query("UPDATE iConomy SET balance='$newmoney' WHERE username = '$Lname' ");
mysql_query("UPDATE bank1 SET balance='$transfer' WHERE account = '$Lname' ");

// stuff 
echo 'Überweisung erfolgreich!<br />'; 

echo $newmoney;
echo '<-newmoney<br />';
echo $oldmoney;
echo '<-oldmoney<br />';
print $Lname;
echo '<-name<br />';
echo $_POST['moneybutton'];
echo '<-moneybutton<br />';
echo $bk['balance'];
echo 'wasauchimmerfürneneuebalance<br /><br /><br /><br />';
echo $transfer;
echo '<-bank1 neu<br />';
echo $postit;
echo '<-bank1 old?<br />';
echo $_POST['Einzahlvalue'];
echo '<-einzahlvalue<br />';

?>

eingetragen wird jetzt $transfer aber $postit wird komplett ignoriert, wie krieg ich das nun hin?



nebenbei: sorry für doofe fragen, bin anfänger :D // wenn man minuswerte eingibt kann man sich geld "ercheaten" das wird auchnoch gemacht, erstmal muss der grundaufbau stehen
 
Werbung:
Mit der mySQLi Version ging es sogar einfacher als erwartet, funktionieren tut nun alles, ich muss nurnoch das mit den SQL Injections verhindern.


edit: sind mit einem is numeric() check auchnoch eine SQL-Injection drin?

PHP:
if (is_numeric($einzahlkurz) ){    goto normal;}
else{ 
echo 'Überweisung abgebrochen!<br/>';
echo 'Der Einzahlwert muss eine Zahl sein!<br/>';
goto finish;
};
 
Zuletzt bearbeitet:
goto?

Bild, das man auf php.net/goto finden kann:
0baa1b9fae6aec55bbb73037f3016001-xkcd-goto.png


Dieses Comic ist wohl so ziemlich die beste Karikatur, die ich je zu goto gefunden habe.

Ich würde für positive Ganzzahlen nicht is_numeric sondern ctype_digit benutzen und danach noch Typecasting anwenden.
 
Werbung:
Zurück
Oben