1. Dashboard
  2. Artikel
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  1. HTML - Webmaster Forum
  2. Programmierung - Entwickler Forum
  3. PHP Forum - Apache - CGI - Perl - JavaScript und Co.

Datenbankfehler?

  • Inuyasha2008
  • 5. Juni 2010 um 12:44
  • Inuyasha2008
    Teeny
    Beiträge
    25
    • 5. Juni 2010 um 12:44
    • #1

    Gutan Tag.
    Also mein Problem ist folgendes:
    Ich habe einmal in mysql alle user. Und diese haben einen charakter wo ich alle Werte rein speicher. Ich will jetzt das die Daten vom char dem jeweiligen User angezeigt werden. D.h. ich hab bei user ein Feld UserID und bei chara hab ich CharaUser. Jetzt soll die UserId mit CharaUser übereinstimmen. Bei UserID stehen auch die Zahlen 1, 2, 3, ... aber bei CharaUser kommt immer 0.
    Hoffe es ist verständlich was ich meine. Ich zeige mal wie ich es aufgebaut hab. Also das Problem entsteht bei Login:

    PHP
    <?php 
    session_start();
    ?>
    <html>
    <head>
    </head>
    <body background="http://img8.imageshack.us/img8/3394/farbverlauf.jpg">
    <?php
    error_reporting(E_ALL);
    ini_set("display_errors", true);
    
    
    include('datenverbindung.php');
    
    
    $username = $_POST['username'];
    $passwort = md5($_POST['password']);
    
    
    $abfrage = "SELECT * FROM user WHERE Username = '" . $username . "' and passwort = '" .$passwort. "'";
    $ergebnis = mysql_query($abfrage);
    
    
    
    
    if ($row = mysql_fetch_object($ergebnis))
        {
        $_SESSION['username'] = $username;
        echo "Login erfolgreich. <br> <a href=\"http://localhost/security/inuyashagame.php\" target=\"_parent\">weiter</a>";
        echo '<script language="javascript">window.location="inuyashagame.php";</script>';
        }
    else
        {
        echo "Benutzername und/oder Passwort waren falsch. <a href=\"login.html\">Login</a>";
        }
    if(!empty($_SESSION['username']))
    {
      $sql = "  UPDATE `user`
                  SET `last_hit`  = NOW()
                  WHERE `Username` = '".$_SESSION['username'] . "'";
    
      mysql_query($sql) or die(mysql_error());
    }
    $sql = "  SELECT `Username` FROM `user`
                WHERE `last_hit` > DATE_SUB(NOW(), INTERVAL 10 MINUTE)";
    $res = mysql_query($sql); // $res in gewohnter Weise auswerten
    
    
    $chara = "SELECT * FROM user WHERE Username = '".$_SESSION['username']."'";
        $chara2 = mysql_query($chara) OR die(mysql_error());
        $chara3 = mysql_fetch_assoc($chara2);
    
    
    if(!mysql_fetch_array(mysql_query("SELECT CharaID FROM chara WHERE CharaName = '".$username."'"))) {
                    mysql_query("INSERT INTO chara (CharaName, CharaUser) VALUES('".$username."', '".$chara3['UserID']."')") or die(mysql_error());
    
    ?> 
    </form>
    </body>
    </html>
    Alles anzeigen


    Ach ja als Fehler bekomme ich dann das:
    Parse error: parse error in C:\xampp\security\htdocs\login.php on line 54

    und Zeile 54 ist </html> das kanns nicht sein xD

    Einmal editiert, zuletzt von Inuyasha2008 (5. Juni 2010 um 12:47)

  • Gimminy
    Schüler
    Beiträge
    52
    • 5. Juni 2010 um 12:53
    • #2

    Hast glaub ich beim letzten IF die geschweifet klammer zu vergessen also die hier }

    btw. Wenn man irgendwo eine geschlossen klammer vergisst, dann zeigt er den Fehler immer in der letzten Zeile an.

  • Inuyasha2008
    Teeny
    Beiträge
    25
    • 5. Juni 2010 um 12:57
    • #3

    ach so wusste ich noch nicht. Vielen Dank für die schnelle Hilfe :)

  • Pion
    Gast
    • 5. Juni 2010 um 12:59
    • #4
    Zitat von Gimminy

    Hast glaub ich beim letzten IF die geschweifet klammer zu vergessen also die hier }

    btw. Wenn man irgendwo eine geschlossen klammer vergisst, dann zeigt er den Fehler immer in der letzten Zeile an.


    Dito, ansonsten MYSQLINJECTION durchlesen und auch mal Datebankdesigns von anderen Projekten anschauen

  • Inuyasha2008
    Teeny
    Beiträge
    25
    • 5. Juni 2010 um 13:12
    • #5

    also hab noch was rumversucht aber ich hab immer noch das Problem, dass bei mir UserID und CharaUser nicht gleich sind.
    Wenn ein User mit der ID 5 ertsellt wurd soll bei CharaUser auc 5 stehen...
    Also habs in die Registrierung getan:

    PHP
    <html>
    <head>
    </head>
    <body background="http://img8.imageshack.us/img8/3394/farbverlauf.jpg">
    <?php
    error_reporting(E_ALL);
    ini_set("display_errors", true);
    
    
    include('datenverbindung.php');
    
    
    $username = $_POST['username'];
    $passwort = $_POST['passwort'];
    $passwort2 = $_POST['passwort2'];
    $email = $_POST['email'];
    $rasse = $_POST['rasse'];
    $str = 5;
    $vert = 5;
    $speed = 5;
    $splitter = 0;
    $geld = 1000;
    $lp = 50;
    $gk = 50;
    
    
    if($passwort != $passwort2 OR $username == "" OR $passwort == "" OR $email == "")
        {
        echo "Eingabefehler. Bitte alle Felder korekt ausfüllen. <a href=\"registrierung.html\">Zurück</a>";
        exit;
        }
    $passwort = md5($passwort);
    
    
    $result = mysql_query("SELECT UserID FROM user WHERE Username LIKE '$username'");
    $menge = mysql_num_rows($result);
    
    
    
    
    
    
    if($menge == 0)
        {
        $eintrag =  "INSERT INTO user  (username, passwort, email, rasse) VALUES ('$username', '$passwort', '$email', '$rasse')";
        $eintrag2 = "INSERT INTO chara (CharaName, CharaStr, CharaVert, CharaSpeed, CharaSplitter, CharaGeld, CharaLP, CharaGK)                 VALUES ('$username', '$str', '$vert', '$speed', '$splitter', '$geld', '$lp', '$gk')";
        $eintragen = mysql_query($eintrag);
        $eintragen2 = mysql_query($eintrag2);
    
    
        if($eintragen == true)
            {
            echo "Benutzername <b>$username</b> wurde erstellt. <a href=\"login.html\">Login</a>";
            }
        else
            {
            echo "Fehler beim Speichern des Benutzernames. <a href=\"registrierung.html\">Zurück</a>";
            }
    
    
    
    
        }
    
    
    else
        {
        echo "Benutzername schon vorhanden. <a href=\"registrierung.html\">Zurück</a>";
        }
    
    $chara = "SELECT * FROM user WHERE Username LIKE '$username'";
        $chara2 = mysql_query($chara) OR die(mysql_error());
        $chara3 = mysql_fetch_assoc($chara2);
    
    
    if(!mysql_fetch_array(mysql_query("SELECT CharaID FROM chara WHERE CharaName = '".$username."'"))) {
                    mysql_query("INSERT INTO chara (CharaName, CharaUser) VALUES('".$username."', '".$chara3['UserID']."')") or die(mysql_error());
                    }
    ?> 
    </body>
    </html>
    Alles anzeigen
  • Pion
    Gast
    • 5. Juni 2010 um 13:26
    • #6

    Also debugge halt mal, dann siehst du woran es liegt

    Mit "die()" kannst du gut debuggen einfach mal die($var) an den stellen schreiben dann siehst welche Variable welchen Wert hat

  • Inuyasha2008
    Teeny
    Beiträge
    25
    • 5. Juni 2010 um 13:42
    • #7

    habs versucht aber finde irgendwie keinen Fehler...
    theoretisch müsste doch UserID und CharaUser die gleiche ID haben...

  • Pion
    Gast
    • 5. Juni 2010 um 14:21
    • #8

    Ja und was hat den $chara3['UserID'] für einen Wert ?

  • Tobse
    Kaiser(in)
    Reaktionen
    4
    Beiträge
    2.439
    • 5. Juni 2010 um 14:33
    • #9

    Mal zur info: Wenn man eine Tabelle erstellt on mit PMY oder SQL, kommt folgende Fehlermeldung wenn man 2 Spalten mit auto-increment will:
    "There can be only 1 auto column and it has to be primary key"
    Was schluiessen wir daraus? -> Es ist sinnfrei, 2 Geliche spalten zu haben, die sowieso immer den gelichen wert haben.
    Was heist das für deine Tabelle? -> "DROP chara.CharaUser ".
    Du solltest jedem character ne id verpassen und die dann zum benutzer eintragen. Wenn das was ich da gesagt habe murks ist, dann tuts mir leid, aber dann hab ich dein Problem nicht verstaden

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Inuyasha2008
    Teeny
    Beiträge
    25
    • 5. Juni 2010 um 20:31
    • #10

    @Pion wie meinst du das jetzt was für einen Wert die hat? Wie genau soll ich das machen

    Tobse: Nun ja der Sinn davon ist das ich später Loginname und char nicht gleichzeitig machen will. Man registriert sich logt sich ein und kann dann erst seinen char erstellen und dieser erstellte char soll mit dem login übereinstimmen. Also wird CharID verschieden von UserId sein aber CharUser sollte den gleichen Wert die UserId haben. Wüsste nicht wie man es sonst machen sollte.

  • Tobse
    Kaiser(in)
    Reaktionen
    4
    Beiträge
    2.439
    • 5. Juni 2010 um 20:49
    • #11

    Du sagst die lösung doch schon!
    Du erstellst den nutzer, mit LEEREM UserChar, dann loggt sich der zum ersten mal ein und dann estellt er den char. Wenner das getan hat, bekommt der Char die userid (worin ich keinen sinn sehe, doppelte datenmenge) und der User die Char id.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Inuyasha2008
    Teeny
    Beiträge
    25
    • 5. Juni 2010 um 21:15
    • #12

    naja ok hast schon Recht das es i-wie sinnlos ist... nur krieg ich es i-wie nicht hin das die Werte des eingeloggten users angezeigt werden. Ich krieg die Werte angezeigt aber dann von einem bestimmten also in der Art wie:

    PHP
    $chara = "SELECT * FROM user WHERE id = 3";

    hab schon andere sachen ausprobiert aber ich bekomm nie das angezeigt vom eingeloggten user...

  • Tobse
    Kaiser(in)
    Reaktionen
    4
    Beiträge
    2.439
    • 5. Juni 2010 um 21:59
    • #13

    wo ist denn die ID des eingeloggten users gespeichert?

    PHP
    // Userdaten
    $sql="SELECT * FROM user WHERE id=".$_SESSION['id'];
    /7 Charadaten
    $sql="SELECT * FROM chara WHERE userId=".$_SESSIOn['id'];

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Inuyasha2008
    Teeny
    Beiträge
    25
    • 5. Juni 2010 um 22:06
    • #14

    Nun ja das hier is mein Login:

    PHP
    <?php 
    session_start();
    ?>
    <html>
    <head>
    </head>
    <body background="http://img8.imageshack.us/img8/3394/farbverlauf.jpg">
    <?php
    error_reporting(E_ALL);
    ini_set("display_errors", true);
    
    
    include(db.php);
    
    
    $username = $_POST['username'];
    $passwort = md5($_POST['password']);
    
    
    $abfrage = "SELECT * FROM user WHERE Username = '" . $username . "' and passwort = '" .$passwort. "'";
    $ergebnis = mysql_query($abfrage);
    
    
    
    
    if ($row = mysql_fetch_object($ergebnis))
        {
        $_SESSION['username'] = $username;
        echo "Login erfolgreich. <br> <a href=\"http://localhost/security/inuyashagame.php\" target=\"_parent\">weiter</a>";
        }
    else
        {
        echo "Benutzername und/oder Passwort waren falsch. <a href=\"login.html\">Login</a>";
        }
    if(!empty($_SESSION['username']))
    {
      $sql = "  UPDATE `user`
                  SET `last_hit`  = NOW()
                  WHERE `Username` = '".$_SESSION['username'] . "'";
    
      mysql_query($sql) or die(mysql_error());
    }
    $sql = "  SELECT `Username` FROM `user`
                WHERE `last_hit` > DATE_SUB(NOW(), INTERVAL 10 MINUTE)";
    $res = mysql_query($sql); 
    
    ?> 
    </form>
    </body>
    </html>
    Alles anzeigen

    Also ich hab immer alles mit $_SESSION['username'] gemacht und da ist jetzt nicht wirklich ne ID gespeichert oder lieg ich da falsch?

  • Tobse
    Kaiser(in)
    Reaktionen
    4
    Beiträge
    2.439
    • 5. Juni 2010 um 22:26
    • #15

    da is der username, aber wenn du den chara per id verifizieren willst, brauchst du ne id in der session

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Inuyasha2008
    Teeny
    Beiträge
    25
    • 5. Juni 2010 um 22:41
    • #16

    ok das pass ich jetzt an aber was ich nicht versteh beim registrieren soll die der CharaUser ja die ID vom User haben und da brauch man ja noch keine Session. Bei der registrierung wird ja alles in die datenbank eingetragen. Deswegen ist es komisch das da 0 steht oder? Ist an dem Script denn etwas falsch?

  • Tobse
    Kaiser(in)
    Reaktionen
    4
    Beiträge
    2.439
    • 5. Juni 2010 um 22:48
    • #17

    nene, falscher ansatz. Bei der registreirung machst du nur den eitnrag in die usertabelle und erst wenn der character erstellt wird, machst du den eintrag in die chara tabelle und updatest die usertabelle.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Inuyasha2008
    Teeny
    Beiträge
    25
    • 6. Juni 2010 um 00:28
    • #18

    ok danke dann versuch ich das mal aber kannst du mir sagen wieso man dafür die Usertabelle updaten muss?

  • Tobse
    Kaiser(in)
    Reaktionen
    4
    Beiträge
    2.439
    • 6. Juni 2010 um 09:18
    • #19

    Sowie ich dich verstanden habe willst du, dass in der Usertabelle der Char steht und in der Char Tabelle immer der user. Der User hat in der Char Tabellle wenig sinn, aber es kann einem Das leben minimal erleichtern.
    Also Registreirgun:

    PHP
    $SQL="INSERT INTO user (Foo, bar) VALUES ($a, $b)";


    Beim ersten login erstellt dieser seinen Char, dann machst du

    PHP
    $SQL1="INSERT INTO char (foo, bar, userId) VALUES ($c, $d, ".$_SESSION['id'].")";
    $SQL2="SELECT id FROM char WHERE userId=".$_SESSION['id'];
    $SQL3="UPDATE user SET userChara=".$SQL1[0]." WHERE id=".$_SESSION['id'];

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Pion
    Gast
    • 6. Juni 2010 um 10:46
    • #20

    Du kannst auch beide bei der anmeldung eintragen nachdem der user eingetragen wurde kannst mit lastinsertid die ID im nächsten query verwenden

Tags

  • color
  • update
  • problem
  • php
  • fehler
  • tabelle
  • auto
  • benutzer
  • session
  • info
  • wert
  • spalte
  • variable
  • sql
  • login
  • select
  • insert
  • insert into
  • drop
  • key
  • datenbankfehler
  1. Datenschutzerklärung
  2. Impressum
Community-Software: WoltLab Suite™
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
Zitat speichern