kostenloser Webspace werbefrei: lima-city


Datenbank füllt Variable nicht

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    mpsftp

    mpsftp hat kostenlosen Webspace.

    Hallo zusammen,

    ich finde zur Zeit einfach meinen Fehler nicht. Ich will, dass ein User ein Benutzername und Passwort eingeben kann. Dann soll überprüft werden, ob das Passwort in der Datenbank zum jeweiligen Benutzer passt. Das ganze dann mit ner If-Abfrage. So sieht mein Code aus:

    include ('config.php'); # In der config sind alle Variablen benannt (host,username,passwort,datenbank)
    
    $link = mysqli_connect("$datenbank_host", "$datenbank_username", "$datenbank_passwort");
    
        if (!$link)
            {
            die("Es ist ein schwerwiegender Fehler bei der Verbindung mit der Datenbank aufgetreten. Fehlerbeschreibung: " .
                mysqli_error());
            }
    
    mysqli_select_db($datenbank_datenbank, $link);
    
    
    
     # Zuerst wird kontrolliert, ob der User beide Felder ausgefüllt hat oder nicht.
    if ($username == "" || $password == "") {
    
     # ist das nicht der Fall, wird folgendes festgelegt:
        $ausfuellen = "false";
        $re = "0";
        $re_url = "index.php?ausfuellen=false";
    }
    else { #ist es doch der Fall, passiert folgendes:
    
    $sql = "SELECT * FROM fins_user WHERE nickname= '".$username."'";
        $result = mysqli_query($sql, $link);
    
        $daten = mysqli_fetch_array($result, MYSQL_ASSOC);
    
        print_r($daten);
    
        $user_passwort = $daten["passwort"];
    
        if ($password == $user_passwort) { #hier soll kontrolliert werden, ob Passwort und Benutzer zusammen passen
          $ausfuellen = "true";
        $re = "0";
        $re_url = "main.php";
        }
        else {
        $ausfuellen = "false";
        $re = "3";
        $re_url = "index.php?ausfuellen=$user_passwort";
        }
    }


    Aktuell ist es immer so, dass die Variable $user_passwort leer ist (trotz Datenbankeintrag und richtigem Nickname)

    Vielen Dank schon einmal für eure Hilfe.

    Beitrag zuletzt geändert: 14.2.2015 20:11:01 von mpsftp
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. hallo mpsftp ,


    überprüfe doch mal ob du vielleicht deine variablennamen fürs passwort unterschiedlich schreibst (einmal mit d und einmal mit t am ende?)

    ansonsten wäre noch anzumerken das man (wenn es sich um passwörter von anderen personen handelt) diese nicht direkt in der datenbank speichert sondern lieber nur den md5-hash (und diesen dann vergleicht) - schließlich muss man ja nicht alles wissen...


    lg hechma
  4. Autor dieses Themas

    mpsftp

    mpsftp hat kostenlosen Webspace.

    Alles durchsucht und keinen Fehler gefunden.

    Zu der Verschlüsselung: Keine Sorge. Das Passwort dient nur dazu, dass ich mich und einige Personen meiner Familie auf meine Webseite zu greifen können.
  5. Hi,

    lass Dir doch mal eventuelle Fehler ausgeben, falls noch nicht getan.
    Ich habe so schon oft meine kleinen Tippfehler gefunden.

    Nach Deinem
    $result
    einfach mal folgende Zeile ausführen.

    echo $mysqli->errno.'-'.$mysqli->error;


    LG Marco
  6. Autor dieses Themas

    mpsftp

    mpsftp hat kostenlosen Webspace.

    Bis auf den "-" zeigt er mir leider nichts an.
  7. mhh ok, das mal nur ein Griff ins blaue, Du gibst mit print_r
    $daten
    aus, dabei wird der Arrayzeiger auf das letzte Element gesetzt. Nimm das doch mal raus oder setze ein
    reset()
    , dadurch wird der Zeiger wieder an den Anfang gesetzt.

    Bekommst Du denn einen Namen aus der DB zurück oder ist der auch leer?
    Also wenn Du Dir wie das Passwort auch mal den Namen ausgiebst.

    $user_name = $daten["wieAuchImmerDieSpalteHeisstBeiDir"];
  8. Autor dieses Themas

    mpsftp

    mpsftp hat kostenlosen Webspace.

    Leider auch kein Erfolg.
  9. Ok,
    ist das der vollständige Code? Ich vermissen dort noch die Variable aus dem Formular, die muss übernommen werden und im Normalfall abgesichert werden.

    Ich weiß ja nicht wie Du die Daten übermittelst, empfehlen würde ich POST. Setze die Zeile vor Deine Abfrage ob username und PW vorhanden sind.

    $username = $_POST[username];
    $password = $_POST[password ];
     # Zuerst wird kontrolliert, ob der User beide Felder ausgefüllt hat oder nicht.
    if ($username == "" || $password == "") {



    Das dann einfach mal ausgeben und schauen ob etwas ankommt, wenn der Code nicht Vollständig ist solltest Du den Rest noch posten.

    LG


    Tante EDIT:
    ich sehe schon, Du nimmst POST, also die POST Variante nehmen.

    Beitrag zuletzt geändert: 15.2.2015 11:36:37 von aff3m1tw4ff3
  10. Autor dieses Themas

    mpsftp

    mpsftp hat kostenlosen Webspace.

    Ok. Hier nochmal die vollständige Datei:

    <?php
    
    include ('includes/functions.php');
    
    //KONTROLLE, OB FELDER AUSGEFÜLLT
    
    $username = $_POST['username'];
    $password = $_POST['password'];
    
    if ($username == "" || $password == "") {
        $ausfuellen = "false";
        $re = "0";
        $re_url = "index.php?ausfuellen=false";
    }
    else {
    
        $sql = "SELECT * FROM fins_user WHERE nickname= '".$username."'";
        $result = mysqli_query($sql, $link);
    
        $daten = mysqli_fetch_array($result, MYSQL_ASSOC);
    
        $user_passwort = $daten["passwort"];
        $user_name = $daten["nickname"];
    
    
        if ($password == $user_passwort) {
            $ausfuellen = "true";
            $re = "0";
            $re_url = "main.php";
        }
        else {
            $ausfuellen = "false";
            $re = "3";
            $re_url = "index.php?ausfuellen=$username&$password";
        }
    }
    
    $temp = "login_body.html";
    
    include ($template_loader);
    
    //SESSION_VAR SETZEN MIT IF_ABFRAGE
    
    
    
     ?>


    functions.php:

    <?php
    
    // SESSION_STARTEN:
    
    session_start();
    
    $_SESSION["logged"] = 0;
    
    // DATENBANK VERBINDUNG
    
    include ('config.php');
    
    $link = mysqli_connect("$datenbank_host", "$datenbank_username", "$datenbank_passwort");
    
        if (!$link)
            {
            die("Es ist ein schwerwiegender Fehler bei der Verbindung mit der Datenbank aufgetreten. Fehlerbeschreibung: " .
                mysqli_error());
            }
    
    mysqli_select_db($datenbank_datenbank, $link);
    
    //Datenbank
    
    
    if($_SESSION["logged"] != "true")
    {
       $allow_storno = "0";
       $allow_acp = "0";
       $allow_add = "0";
       $allow_bill = "0";
       $allow_inventur = "0";
       $allow_copy = "0";
       $allow_summe = "0";
       $login = "0";
    }
    else
    {
      //DB ABFRAGEN
    }
    
    
    // Vergabe der globalen Variablen
    
     $template_loader = "includes/templates.php";
    
     $logo1 = "images/logo1.png";
     $logo2 = "images/logo2.png";
    
     $soft_name = "FinS";
    
     ?>


    Die Daten aus dem Login-Formular werden richtig übergeben (getestet).

    Gruß,
    mps
  11. Versuch doch die Abfrage einfach mal so:

    $sql = $mysqli->query("SELECT * FROM  `fins_user` WHERE nickname='$username'");
    $result = $sql ->fetch_object();
    
    echo $link->errno.'-'.$link->error; // (edit) das sollte objektorientiert dann auch was ausgeben
    
    
    $user_passwort = $result->passwort;
    $user_name = $result->nickname;


    Zwar für den Fehler nicht verantwortlich, trotzdem ungünstig, Du solltest Deinen Sessionstart IMMER als erstes machen. Keine anderen Zeichen davor.

    Ansonsten fllt mir da jetzt so auch nichts zu ein, bin Unterwegs und kann da auch nicht mal schnell
    testen leider.

    LG


    Tante Edit:

    Gerade erst gesehen, das was Du da machst ist prozedurale Syntax , meins ist objektorientierte Syntax, dazu müsstest Du Deine Verbindung noch anpassen.

    $link = new mysqli('localhost', 'user', 'pw', 'db name');
    $link -> query ('BEGIN');
    
    if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
       
    }


    Ich mache das immer objektorientiert, bei prozeduraler kann ich dann auch nicht wirklich weiterhelfen, da sehe ich die Fehler auch nicht.



    Beitrag zuletzt geändert: 15.2.2015 21:41:02 von aff3m1tw4ff3
  12. An zwei Stellen übergibst du die Parameter in der falschen Reihenfolge. Die Datenbankverbindung kommt immer zuerst!
    mpsftp schrieb:
    $result = mysqli_query($sql, $link);
    Richtig:
    $result = mysqli_query($link, $sql);

    mpsftp schrieb:
    mysqli_select_db($datenbank_datenbank, $link);
    Richtig:
    mysqli_select_db($link, $datenbank_datenbank);


    aff3m1tw4ff3 schrieb:
    Zwar für den Fehler nicht verantwortlich, trotzdem ungünstig, Du solltest Deinen Sessionstart IMMER als erstes machen. Keine anderen Zeichen davor.
    Wo hast du denn eine Ausgabe vor session_start() gesehen? Php-Kommentare stören hier jedenfalls nicht. Wichtig ist, dass vor dem Start-Tag <?php keine Zeichen stehen.
  13. Kenne es so, das vor session_start() keine Ausgabe oder Leerzeichen sein dürfen. Ich habe das mit den Leerzeichen auch auf den Code interpretiert, nicht nur auf die Ausgabe selber. Lasse mich da gern eines Besseren belehren. Gerade wenn man sich das alles nur aus Büchern, Google und Co holt versteht man da schnell was miss.
  14. Autor dieses Themas

    mpsftp

    mpsftp hat kostenlosen Webspace.

    @fuerderer: Danke. Jetzt gehts.

    @aff3m1tw4ff3: Dir natürlich auch vielen Dank für deine Hilfe!
  15. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!