Arne Kemen: Habe einen Fehler

Hi,

ich habe diesen Script von einer Seite kopiert und für mich angepasst, nur irgendiwe, lässt er mich nicht einloggen, obwohl die daten richti in der Datenbank sind wo ist den der Fehler?

<?php
// Session starten
session_start ();

// Datenbankverbindung aufbauen
$connectionid = mysql_connect ("localhost", "root", "");
if (!mysql_select_db ("ghostsoldier", $connectionid))
{
  die ("Keine Verbindung zur Datenbank");
}

$sql = "SELECT ".
    "id, username,offizier, password ".
  "FROM ".
    "register ".
  "WHERE ".
    "(username like '".$_REQUEST["username"]."') AND ".
    "(password = '".md5 ($_REQUEST["password"])."')";
$result = mysql_query ($sql);

if (mysql_num_rows ($result) > 0)
{
  // Benutzerdaten in ein Array auslesen.
  $data = mysql_fetch_array ($result);

// Sessionvariablen erstellen und registrieren
  $_SESSION["user_id"] = $data["id"];
  $_SESSION["user_username"] = $data["username"];
  $_SESSION["user_offizier"] = $data["offizier"];
  $_SESSION["user_password"] = $data["password"];

header ("Location: intern.php");
}
else
{
  header ("Location: formular.php?fehler=1");
}
?>

  1. Hallo Malte, Hasenzahl, oder wie auch immer ;-),

    $sql = "SELECT ".
        "id, username,offizier, password ".
      "FROM ".
        "register ".
      "WHERE ".
        "(username like '".$_REQUEST["username"]."') AND ".
        "(password = '".md5 ($_REQUEST["password"])."')";

    Warum benutzt du für username ein LIKE?
    Warum sicherst du die Daten nicht zumindest mit myslq_real_escape() oder Ähnlichem ab.
    Warum lässt du dir Fehlermeldungen nicht von deiner Datenbank zurückliefern?
    Dann laß dir die Variable $sql doch wenigstens mal per echo ausgeben und kopiere die Ausgabe in dein MySQL-Admin-Tool und schau, was die Datenbank dann zurück gibt.

    Schönen Gruß aus München

    die knappschaft

    --

    sh:(  fo:|  ch:?  rl:°  br:$,<,>  n4:&  ie:|  mo:|  va:)  de:]  zu:)  fl:|  ss:|  ls:[,#
    1. Hallo,

      könnetst du für mich vielleicht den Code richtig schreiben?

      Weil ich kann diesen Fehler irgendwie imme rnoch nicht beheben...

      Dnake

      Malte

      1. Hallo Arne oder Malte oder Hasenzahn,

        was hast du denn von meinen Tipps schon umgesetzt und was passiert, wenn du das Script dann ausführst.
        Da ich nicht weiß, was nicht funktioniert, fange ich mal an zu raten

        liegt es vielleicht an dieser Zeile?

        "WHERE ".
            "(username like '".$_REQUEST["username"]."') AND ".
            "(password = '".md5 ($_REQUEST["password"])."')";

        Probiere mal:
        "WHERE ".
            "(username like '".$_REQUEST["username"]."') AND ".
            "(password = '".$_REQUEST["password"]."')";

        aus.
        Was sagt MySQL dann?

        Schönen Gruß aus München

        die knappschaft

        --

        sh:(  fo:|  ch:?  rl:°  br:$,<,>  n4:&  ie:|  mo:|  va:)  de:]  zu:)  fl:|  ss:|  ls:[,#
  2. Hi Also, ich habe es so verändert wie du es gesagt hast, ich bekomme keinen MYSQL Fehler zurück sondern ich kann mich nicht einloggen. ich schreibe euch jetzt mal alle seiten hin die ich schon geschrieben habe:

    hiermit fängt es an:

    forumlar.php:

    <?php session_start (); ?>
    <html>
    <head>
      <title>Login</title>
    </head>

    <body>
    <?php
    if (isset ($_REQUEST["fehler"]))
    {
      echo "Die Zugangsdaten waren ungültig.";
    }
    ?>
    <form action="login.php" method="post">
      Name: <input type="text" name="name" size="20"><br>
      Kennwort: <input type="password" name="pwd" size="20"><br>
      <input type="submit" value="Login">
    </form>
    </body>
    </html>

    login.php überprüft:

    <?php
    // Session starten
    session_start ();

    // Datenbankverbindung aufbauen
    $connectionid = mysql_connect ("localhost", "root", "");
    if (!mysql_select_db ("ghostsoldier", $connectionid))
    {
      die ("Keine Verbindung zur Datenbank");
    }

    $sql = "SELECT ".
        "id, username,offizier, password ".
      "FROM ".
        "register ".
      "WHERE ".
        "(username like '".$_REQUEST["username"]."') AND ".
        "(password = '".$_REQUEST["password"]."')";
    $result = mysql_query ($sql);

    if (mysql_num_rows ($result) > 0)
    {
      // Benutzerdaten in ein Array auslesen.
      $data = mysql_fetch_array ($result);

    // Sessionvariablen erstellen und registrieren
      $_SESSION["user_id"] = $data["id"];
      $_SESSION["user_username"] = $data["username"];
      $_SESSION["user_offizier"] = $data["offizier"];
      $_SESSION["user_password"] = $data["password"];

    header ("Location: intern.php");
    }
    else
    {
      header ("Location: formular.php?fehler=1");
    }
    ?>

    und hier ist die intern.php seite:

    <?php
    include ("checkuser.php");
    ?>
    <html>
    <head>
      <title>Interne Seite</title>
    </head>
    <body>
      BenutzerId: <?php echo $_SESSION["user_id"]; ?><br>
      Nickname: <?php echo $_SESSION["user_usernmae"]; ?><br>
      Nachname: <?php echo $_SESSION["user_offizier"]; ?><br>
      Vorname: <?php echo $_SESSION["user_password"]; ?>
      <hr>
      <a href="logout.php">Ausloggen</a>
    </body>
    </html>

    das ist die include datein checkuser.php:

    <?php
    session_start ();
    if (!isset ($_SESSION["user_id"]))
    {
      header ("Location: formular.php");
    }
    ?>

    und das hier ist logout.php:

    <?php
    // Wird ausgeführt um mit der Ausgabe des Headers zu warten.
    ob_start ();

    session_start ();
    session_unset ();
    session_destroy ();

    header ("Location: formular.php");
    ob_end_flush ();
    ?>

    und hier isnd mal die daten meiner datenbank:

    -- phpMyAdmin SQL Dump
    -- version 2.6.1
    -- http://www.phpmyadmin.net

    -- -- Host: localhost
    -- Erstellungszeit: 14. April 2005 um 17:27
    -- Server Version: 4.1.10
    -- PHP-Version: 5.0.3

    -- Datenbank: ghostsoldier

    -- --------------------------------------------------------

    -- -- Tabellenstruktur für Tabelle register

    CREATE TABLE register (
      id int(25) NOT NULL auto_increment,
      username varchar(15) collate latin1_general_ci NOT NULL default '',
      offizier varchar(15) collate latin1_general_ci NOT NULL default '',
      password varchar(15) collate latin1_general_ci NOT NULL default '',
      email varchar(150) collate latin1_general_ci NOT NULL default '',
      aktiv smallint(1) NOT NULL default '0',
      PRIMARY KEY  (id)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=14 ;

    -- -- Daten für Tabelle register

    INSERT INTO register VALUES (13, 'ff', 'ff', 'ff', 'kiefer-malte@web.de', 0);

    vielelicht könnt ihr ja jetztden fehler finden, weil ich weiß echt nciht mehr weiter...

    1. Hallo Arne,

      lass dir mal bitte in der login.php ausgeben, was in $_REQUEST steht.
      Kannst auch $_POST nehmen.

      codeschnipsel:
      echo '<pre>';
      print_r($_POST);
      echo '</pre>';

      und dann vergleiche mal, was du deiner Datenbank im Query übergibst.
      Siehst du es?

      Rest liegt dann bei dir.

      Schönen Gruß aus München

      die knappschaft

      --

      sh:(  fo:|  ch:?  rl:°  br:$,<,>  n4:&  ie:|  mo:|  va:)  de:]  zu:)  fl:|  ss:|  ls:[,#
      1. Hallo Sascha,

        ich habe den Fehler endlich gefunden. Ich danke dir.

        Gruß Arne

        1. Hallo Arne,

          und bitte sichere die Daten, die aus deinem Login-Formlar kommen, entsprechend ab. Habe dir im ersten Post ja schon was dazu geschrieben.
          Denn immer daran denken, die gegnerischen Clans sind in PHP vielleicht schon viel weiter als ihr - nicht, dass sie heuch "hacken" ;-))

          Schönen Gruß aus München

          die knappschaft

          --

          sh:(  fo:|  ch:?  rl:°  br:$,<,>  n4:&  ie:|  mo:|  va:)  de:]  zu:)  fl:|  ss:|  ls:[,#