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

Anmelde Formular (session) fehler

Spitzer

Mitglied
Hallo Zusammen.

Ich arbeite gerade an meinem ersten anmelde Formular, habe mich viiel darüber informiert und mal angefangen zuschreiben und das ist nun mein code:
HTML:
<?php

$db = new mysqli('localhost','root','','user');
    
    if($db->connect_error):
        echo $db->connect_error;
    endif;
    
if(isset($_POST['submit'])):
    $user        = strtolower(['user']);
    $password     = $_POST['password'];

    $search_user = $db->prepare("SELECT id FROM user WHERE user = ? AND password = ?");
    $search_user->bind_param('ss',$user,$password);
    $search_user->execute();
    $search_result = $search_user->get_result();

if($search_result->num_rows == 1):
    $search_object = $search_result->fetch_object();
    //$_SESSION['user'] = $search_object->id;
    echo 'Klapped';
    //header('Location: /');
else: 
echo $error='Ungültiger User oder Password!';
endif;



endif;

?>

<div class="log-box">
    <form action="" method="post"
        <h1>Login</h1><br>
        <input         name="user"          placeholder="User ID" />
        <input         name="password"      placeholder="Passwort" />
        <?php echo $error; ?>
        <br><br>
        <input         class="button-send" name="submit" type="submit" value="Absenden"/>
        <br><br><hr><br><br>
        <a>Probleme beim Login?</a><br><br>
        <a>Melden Sie sich bei unserem Support unter +41524413115</a><br><br>
        <a>oder</a><br><br>
        <a href="index.php?page=contact">Nutzen Sie unser Kontaktformular</a>
    </form>
</div>

die Struktur meiner DB


Unbenannt.PNG


und nun noch mein Problem:

1. das login funktioniert einfach ned
2. ich erhalte folgende Warnung " Warning: strtolower() expects parameter 1 to be string, array given in C:\xampp\htdocs\taru official\pages\login.php on line 10 "
3. ist mehr ein Detail aber wen die Seite frisch geladen wurde sehe ich immer dort wo die Meldung das dass PW oder username falsch ist diese meldung "Notice: Undefined variable: error in C:\xampp\htdocs\taru official\pages\login.php on line 38" ist mir klar was es bedeute aber die variable ist ja definirt nur nicht ausgegeben oder?


ich bedanke mich schon mal fürs lesen und hoffe das mir jemand helfen kann.

MFG
 
Werbung:
Code:
$user        = strtolower(['user']);
$password     = $_POST['password'];

Vergleiche diese beiden Zeilen und guck was in der zweiten Zeile da ist, was in der ersten Zeile fehlt.

Zu 3.:
Die Variable $error existiert nur wenn du einen Fehler hast. Wenn du die Seite neu lädst existiert $error nicht und deshalb kommt die Notice.
Einfach zu beheben: Ganz oben die Variable definieren.

Code:
$error = '';
 
Neben dem was jonas schon schrieb enthält dein Code noch weitere Fehler, der wichtigste:

Die Passwörter von Benutzern dürfen niemals im Klartext gespeichert werden! Verwende password_hash() und password_verify() zum Speichern bzw. Überprüfen.

Außerdem:
  • bei deinem Form-Tag fehlt das schließende >
  • action-Attribute dürfen nicht leer sein, in deinem Fall kannst du es einfach ganz weg lassen
  • deine Formularfelder brauchen eine Beschriftung. Und nein, das placeholder-Attribut ersetzt kein <label>
  • das Passwort-Feld braucht ein type="password", sonst wird das Passwort im Klartext angezeigt
  • der Absende-Knopf wäre gerne ein richtiger <button>
  • <br> sind Einzelgänger, Abstände werden mit CSS (margin/padding) erzeugt.
  • was hat es mit den <a> ohne irgendwelche Attribute auf sich?
  • Datenbankstrukturen nicht als Screenshot posten sondern als CREATE-TABLE-Query in Textform
  • warum dürfen Passwörter bei dir nur 20 Zeichen lang sein?
  • latin1 ist keine gute Wahl, verwenden immer und überall utf8
  • ein Minus in einem Spaltennamen ist keine gute Idee: den Spaltennamen musst du immer mit Backticks behandeln da du sonst von der Datenbank eine Fehlermeldung um die Ohren gehauen bekommst
  • "funktioniert einfach ned" ist keine Fehlerbeschreibung (wobei der der "nicht funktionierende" Login wohl ein Folgefehler von deinem zweiten Punkt ist)
  • fetch_object zum Abfragen von Daten ist Geschmackssache, ich finde Arrays (fetch_assoc) besser
 
Werbung:
Hay danke für die vielen tipps!

setze sie gerade um :D

as hat es mit den <a> ohne irgendwelche Attribute auf sich?

das sind im Moment nur Platzhalter.

warum dürfen Passwörter bei dir nur 20 Zeichen lang sein?

ich biete auf dieser Seite keine Möglichkeit an sich selbst zu registrieren, im Prinzip werde ich direkt in der db ein Kunden Konto anlegen und dann die Details weitergeben, und daher dachte ich mir will sich niemand ein pw merken mit mehr als 20 stellen.
 
Ich habe nun aber immer noch das Problem mit dem Fehler :/

Warning: strtolower() expects parameter 1 to be string, array given in C:\xampp\htdocs\taru official\pages\login.php on line 12

und neu auch noch

Fatal error: Uncaught Error: Function name must be a string in C:\xampp\htdocs\taru official\pages\login.php:13 Stack trace: #0 C:\xampp\htdocs\taru official\index.php(19): require_once() #1 {main} thrown in C:\xampp\htdocs\taru official\pages\login.php on line 13

nach etwas weiterforschen habe ich folgendes gefunden :


Du rufst den Superglobal $_POST wie eine Funktion auf.
Stattdessen ist es eher ein Array und wird dementsprechend auch so aufgerufen.

also müsste so doch korrekt sein ?

PHP:
                    $user        = strtolower(['user']);

      /* Linie 13*/ $password     = $_POST['password'];



der aktuelle code:

PHP:
<?php

$error='Ungültiger User oder Password!';

$db = new mysqli('localhost','root','','user');

    if($db->connect_error):
        echo $db->connect_error;
    endif;

if(isset($_POST['submit'])):
    $user        = strtolower(['user']);
      /* Linie 13*/ $password     = $_POST(['password']);

    $search_user = $db->prepare("SELECT id FROM user WHERE user = ? AND password = ?");
    $search_user->bind_param('ss',$user,$password);
    $search_user->execute();
    $search_result = $search_user->get_result();

if($search_result->num_rows == 1):
    $search_object = $search_result->fetch_object();
    //$_SESSION['user'] = $search_object->id;
    echo 'Klapped';
    //header('Location: /');
else:
echo $error ;

endif;



endif;

?>

<div class="log-box">
    <form method="post">
        <h1       class="login">Login</h1>
        <input    class="login"          name="user"              placeholder="User"/>
        <input    class="login"          type="password"            name="password"     placeholder="Passwort" />
        <button   class="button-send" name="submit" type="submit">ABSENDEN!</button>
        <p           class="login">Probleme beim Login?</p>
        <p           class="login">Melden Sie sich bei unserem Support unter +41524413115</p>
        <p           class="login">oder</p>
        <a         class="login" href="index.php?page=contact">Nutzen Sie unser Kontaktformular</a>
    </form>
</div>
 
Zuletzt bearbeitet:
ich biete auf dieser Seite keine Möglichkeit an sich selbst zu registrieren, im Prinzip werde ich direkt in der db ein Kunden Konto anlegen und dann die Details weitergeben, und daher dachte ich mir will sich niemand ein pw merken mit mehr als 20 stellen.
Der Kunde muss das Passwort ändern können nachdem er es von dir bekommen hat - du wirst die Passwörter ja wohl kaum in einer verschlüsselten Mail verschicken, oder? Und beim Ändern muss er ein beliebig langes Passwort angeben können, es gibt keinen Grund die Länge zu beschränken - Passwort-Manager existieren. Mal abgesehen davon dass man sowieso den Hash des Passworts speichert, nicht das Passwort selbst!
also müsste so doch korrekt sein ?
So ist zumindest die Passwort-Zeile richtig - so steht sie aber nicht im Code und die user-Zeile ist immer noch genauso unsinnig. Aber ein Forum ist nicht dazu da absolute Grundlagen (der Zugriff auf Arrayelemente gehört dazu) zu vermitteln, das solltest du dir schon erstmal selbst aneignen!
 
Werbung:
Und warum willst du nicht einfach die Grundlagen lernen? Sich permantent wegen Kleinigkeiten an ein Forum wenden kann nicht Sinn der Sache sein.
Mir hilft es am meisten wen ich mich informiere dan ausprobiere bzw Anwenden und wen mir dann jemand hilft wen ich einen fwhler nicht finden kann. Ich versuche es so zulernen
 
Werbung:
Dagegen spricht ja nichts, aber wenn du nicht siehst, dass in der ersten Zeile das $_POST fehlt, wird das eine eher schwierige Übung:

Code:
$user        = strtolower(['user']);
      /* Linie 13*/ $password     = $_POST(['password']);

Die gepostete Fehlermeldung (fatal error) passt für mich so nicht zum Code.
 
Dagegen spricht ja nichts, aber wenn du nicht siehst, dass in der ersten Zeile das $_POST fehlt, wird das eine eher schwierige Übung:

Code:
$user        = strtolower(['user']);
      /* Linie 13*/ $password     = $_POST(['password']);

Die gepostete Fehlermeldung (fatal error) passt für mich so nicht zum Code.
Oh shiit ja das ist extrem erbärmlich das hab ich wirklich übersehen. Ich dachte hab irgendwo falsche zeichen oder welche vergessen
 
Zurück
Oben