[PHP & MySQL] Überweisungsscript funktioniert nicht

Verena1993
HalliHallo,
ich habe folgendes Problem:

Bin gerade dabei ein Banksystem aufzubauen und scheitere gerade an den Überweisungen.
E gibt eine Tabelle transaktionen in der alles Transaktionen gespeichert werden... Wenn ich also des Formular der Überweisung ausfülle werden die eingetragenen Daten in transaktionen gespeichert. Da nicht jeder auf jedem sien Konto zugreifen kann soll das ganze natürlich im internen Bereich statt finden, sprich die absenderid aus der Session verwendet werden... Aber irgendwie funktioniert es nicht xD

hier die Codes:
Überweisungsformular
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
<?php
session_start();
include 'sessionhelpers.inc.php';
echo '
Du bist ';
if (!logged_in())
    echo 'nicht ';
echo 'eingeloggt.<p />';
echo '<a href="login.php">Start</a>';
?>
<html>
<head>


<title>Überweisungen tätigen</title>
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body>
<h3>Überweisungen tätigen</h3>
<form action='ueberweisung_send.php' method='post'>
<table>
 <tr>
  <td><b>Empfänger-ID</b><br><small>Falls du die Überweisungen an ein externes Konto richten willst wähle bitte die ID 1</small></td>
  <td><input type='text' name='empfaengerid'></td>
 </tr>
 <tr>
 <td><b>Betrag</b><br><small>Bitte keine Vorzeichen verwenden.</small></td>
 <td><input type='text' name='betrag'></td>
 </tr>
 <tr>
 <tr>
 <td><b>Grund</b></td>
 <td><input type='text' name='grund'></td>
 </tr>
</table><br>
 <input class='button' type='submit' value='Ändern'> <input class='button' type='reset' value='Zurücksetzen'>
</form>
</body>
</html>




ueberweisung_send
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
<?php
session_start();
include ('sessionhelpers.inc.php');


   include('db.php');



   $empfaengerid = $_POST['empfaengerid'];

   $betrag = $_POST['betrag'];

   $grund = $_POST['grund'];

   $absenderid = $_SESSION['user'];






    {

      $eintrag = "INSERT INTO `transaktionen` ( `id`, `empfaengerid`, `betrag`, `absenderid`, `grund` )

     VALUES (``, `$empfaengerid`, `$betrag`, `$absenderid`, `$grund`)";



      $eintragen = mysql_query($eintrag) ;



   if($eintragen=='true') {

         echo "Deine Überweisung war erfolgreich!<br>

         Noch eine Überweisung tätigen?<br>

         <a href="javascript:%20history.back(-2)" target="_self">Zurück</a>";

      } else {

         echo "Fehler!<br /><hr><br />";

         echo mysql_error;

      }

    }



?>


sessionhelpers.inc.php
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
<?php
function connect()
{
    $con=mysql_connect('localhost','costantinstables','Nauiboy2') or die(mysql_error());
    mysql_select_db('costantinstables',$con) or die(mysql_error());
}

function check_user($name, $pass)
{
    $sql="SELECT UserID
    FROM users
    WHERE UserName='".$name."' AND UserPass=MD5('".$pass."')
    LIMIT 1";
    $result=mysql_query($sql) or die(mysql_error());
    if (mysql_num_rows($result)==1)
    {
        $user=mysql_fetch_assoc($result);
        return $user['UserID'];
    }
    else
        return false;
}

function login($userid)
{
    $sql="UPDATE users
    SET UserSession='".session_id()."'
    WHERE UserID=".$userid;
    mysql_query($sql);
}

function logged_in()
{
    $sql="SELECT UserID
    FROM users
    WHERE UserSession='".session_id()."'
    LIMIT 1";
    $result=mysql_query($sql);
      return (mysql_num_rows($result)==1);
}

function logout()
{
    $sql="UPDATE users
    SET UserSession=NULL
    WHERE UserSession='".session_id()."'";
    mysql_query($sql);
}

connect();
?>


Ich vermute ja fast dass mein Fehler bei der estlegung der Variable &absenderid liegt, aber ich finde einfach keine Lösung...

LG Verena
Stelo
Und wie immer erst einmal die Frage. Was genau funktioniert nicht?
Verena1993
Die Eintragung in transaktionen

edit..
öhm... der benutzer der sich einloggt wird doch in der Session gespeichert? und den will ihc da haben..
Oli
Hi,

zunächst: poste PHP-Code in Zukunft bitte mit [php] statt [code], dann wird er farblich hervorgehoben.

Um dir helfen zu können, müsste ich wissen, wo $_SESSION['user'] her kommt. (Edit: ) Poste mal bitte das Loginscript (Passwörter entfernen, falls welche drin stehen)?

Ein paar mögliche Probleme sind mir trotzdem aufgefallen, die haben damit jedoch wenig zutun:

Überweisungsformular
Sieht soweit ganz gut aus, das Einzige, das mir aufgefallen ist, ist, dass dein "Du bist (nicht) eingeloggt" nicht im <body> ausgegeben wird, somit ist dein HTML nicht valide. Sollte an der Funktion jedoch nichts ändern.

ueberweisung_send.php
Mögliches Problem mit SQL Injection, die Formulareingaben werden ausgewertet, egal, was sie beinhalten. Man könnte z.B. "Apfel" überweisen.

true ist eine Konstante, kein String. Daher keine Anführungszeichen drum herum.
php:
1:
if($eintragen==true)


Außerdem würde ich empfehlen, den Link statt auf java script:history.back(-2) auf eine "echte" Adresse zu leiten, also den Link auf das Formular.


LG,
Oli
Verena1993
Login.php
php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
<?php
session_start();
include 'sessionhelpers.inc.php';
if (isset($_POST['login']))
{
    $userid=check_user($_POST['username'], $_POST['userpass']);
    if ($userid!=false)
        login($userid);
    else
        echo 'Ihre Anmeldedaten waren nicht korrekt!';
}
if (!logged_in())
    echo '<form method="post" action="login.php">
        <label>Benutzername:</label><input name="username" type="text"><br>
        <label>Passwort: </label><input name="userpass" type="password" id="userpass"><br>
        <input name="login" type="submit" id="login" value="Einloggen">
    </form>';
else
    echo '<a href="logout.php">Ausloggen</a>';
echo '<p /><a href="logged_in.php">Check</a>';
?>


@ Vroni, ich weiß wohl dass von alleine nichts geht, aber wenn ichs wüsste müsste ich hier nciht fragen
Verena1993
Das weiß ich wohl, aber Oli wollts sehen...
Oli
Du könntest den Wert für $_SESSION['user'] gleich mit setzen - im Loginscript. Ansonsten beinhaltet $_SESSION['user'] nämlich nichts.

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
if (isset($_POST['login']))
{
    $userid=check_user($_POST['username'], $_POST['userpass']);
    if ($userid!=false) { //Klammer beachten!
        login($userid);
        $_SESSION["user"]=$userid//diese Zeile ist neu
    //Klammer beachten!
    else
        echo 'Ihre Anmeldedaten waren nicht korrekt!';
}


Die Klammern werden notwendig, weil jetzt nicht nur 1 Befehl zu dem if gehört.
Verena1993
jetzt bringts mir einen Fehler in ueberweisung.php zeile 7, des is da wo

session_start();

steht..

@ Vroni, ich sagte ja ich weiß nciht wo
Oli
Zitat:
Original von Vroni
Zitat:
Original von Verena1993
Das weiß ich wohl, aber Oli wollts sehen...

Und ich wollte wissen wo dus definierst (anscheinend ja gar nicht). Wie dus machen musst, hat Oli ja schon gesagt.

Ich hatte schon vermutet, dass es nirgends definiert ist. Da fand ich es einfacher, direkt nach dem Code zu fragen Augenzwinkern .


Zitat:
jetzt bringts mir einen Fehler in ueberweisung.php zeile 7, des is da wo

session_start();

steht..


Poste bitte die genaue Fehlermeldung und nochmal die ganze Datei, der Fehler muss nicht zwangsläufig in der angegebenen Zeile auftreten. In 95% der Fälle ist er eine Zeile höher.
Oli
Zitat:
Original von Vroni
Oli, ich versuche immer ein bisschen zum selber Denken anzuregen, aber das scheint (hier) ja nicht zu funktionieren.


Bei mir kommt das immer auf den Fall an. Hier fand ich es einfacher, direkt nach dem Code zu fragen, weil eine sprachliche Formulierung meist nicht eindeutig ist. Ein Bild.. äh.. Code sagt mehr als 1000 Worte.
Verena1993
Fehlermeldung auf ueberweisung.php


Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /users/costantinstables/www/ueberweisung.php:6) in /users/costantinstables/www/ueberweisung.php on line 7

Fehlermeldung bei ueberweisung_send.php ist einfach mysql_error, also das was bei else ausgegeben werden soll

Vroni, ich bin hier weil ich Hilfe brauche, wenn ich durch Denken selbst drauf kommen könnte, dann hätte ich diesen Thread, nach 4 Stunden denken bestimmt nciht eröffnet, sondern nach kurzer Zeit die Lösung gefunden...
Oli
Zitat:
Original von Verena1993
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /users/costantinstables/www/ueberweisung.php:6) in /users/costantinstables/www/ueberweisung.php on line 7
session_start() muss am Anfang der Datei stehen. Es darf nichts vorher an den Browser gesendet werden.

Zitat:
Fehlermeldung bei ueberweisung_send.php ist einfach mysql_error, also das was bei else ausgegeben werden soll
Logisch, schließlich existiert die Session nicht und dadurch fehlt in der SQL-Abfrage $absenderid.

Zitat:
Vroni, ich bin hier weil ich Hilfe brauche, wenn ich durch Denken selbst drauf kommen könnte, dann hätte ich diesen Thread, nach 4 Stunden denken bestimmt nciht eröffnet, sondern nach kurzer Zeit die Lösung gefunden...
Das mag für dich stimmen, allerdings gibt es auch Leute, die nicht nachdenken und meinen, dass Andere die Arbeit für sie tun würden. Daher ist das "zum Denken anregen" gar nicht so verkehrt - etwas Eigeninitiative gehört schließlich auch dazu. Augenzwinkern
Verena1993
okay, habs jetzt an Anfang von der Datei gesetzt, des einzigste was noch davor ist ist <?php

funktioniert leider auch nciht kommt immernoch die meldung dass ich der zeile wo session_start ist der fehöer sitzt
Oli
Befinden sich vor <?php noch irgendwelche Leerzeichen oder leere Zeilen? Diese gelten nämlich auch als Ausgabe.

So gehts:
php:
1:
2:
3:
<?php
session_start();
...


So nicht (leere Zeilen):
php:
1:
2:
3:
4:

<?php
session_start();
...


So auch nicht (Leerzeichen):
php:
1:
2:
3:
  <?php
session_start();
...
Verena1993
okay, also des funktioniert jetzt schonmal großes Grinsen danke smile

und jetzt kommt immernoch die Fehlermeldung von der ueberweisung_send... du sagtest ja es wurde keine session gestartet, das müsste ja jetzt gelöst sein, oder?
Verena1993
gute frage, nächste frage xD

Habe die eben mal rausgebaut, verändert aber am ergebnis nichts..
Verena1993
nach wievor das echo beim else
Oli
Zitat:
Original von Vroni
Und was gibt mysql_error() aus?


Würde mich auch mal interessieren. Es muss übrigens mysql_error() heißen, also mit Klammer dahinter:
php:
1:
echo mysql_error();

Dann bitte Fehlermeldung posten.
Verena1993
Unknown column '' in 'field list'
Thorim
was mir grad in ueberweisung_send aufgefallen ist
code:
1:
VALUES (``, `$empfaengerid`, `$betrag`, `$absenderid`, `$grund`)";


nur Feldnamen werden in `...` gesetzt, die Werte in '...', dementsprechend:
code:
1:
VALUES ('', '$empfaengerid', '$betrag', '$absenderid', '$grund')";