Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP Datenbankabfrage?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PHP Datenbankabfrage?

    Guten Tag,

    wir haben von einem Programmierlehrgang herraus eine Internetseite zu erstellen. Leider tue ich mich schwer meinen Fehler zu finden bzw. zu beheben und hatte gehofft ihr könnt mir eventuell weiterhelfen.

    Hier der Code:

    PHP-Code:
    <?php
    if (isset($_SESSION['login'])) {
        
    header('Location: http://' $_SERVER['HTTP_HOST'] . '/index1.php');
    } else {
        if (!empty(
    $_POST)) {
            if (
                empty(
    $_POST['f']['username']) ||
                empty(
    $_POST['f']['password'])
            ) {
                
    $message['error'] = 'Es wurden nicht alle Felder ausgefüllt.';
            } else {
                
    $mysqli = @new mysqli('localhost''root''''groupup');
                if (
    $mysqli->connect_error) {
                    
    $message['error'] = 'Datenbankverbindung fehlgeschlagen: ' $mysqli->connect_error;
                } else {
                    
    $query sprintf(
                        
    "SELECT Name, Passwort FROM user WHERE username = '%s'",
                        
    $mysqli->real_escape_string($_POST['f']['username'])
                    );
                    
    $result $mysqli->query($query);
                    if (
    $row $result->fetch_assoc()) {
                        if (
    crypt($_POST['f']['password'], $row['Passwort']) == $row['Passwort']) {
                            
    session_start();

                            
    $_SESSION = array(
                                
    'login' => true,
                                
    'user'  => array(
                                    
    'Name'  => $row['Name']
                                )
                            );
                            
    $message['success'] = 'Anmeldung erfolgreich, <a href="index.php">weiter zum Inhalt.';
                            
    header('Location: http://' $_SERVER['HTTP_HOST'] . '/index1.php');
                        } else {
                            
    $message['error'] = 'Das Kennwort ist nicht korrekt.';
                        }
                    } else {
                        
    $message['error'] = 'Der Benutzer wurde nicht gefunden.';
                    }
                    
    $mysqli->close();
                }
    Der Fehler lautet :

    Nicht erfasster Fehler: Aufruf einer Mitgliedsfunktion fetch_assoc () auf bool in C: \ xampp \ htdocs \ LOGIN1.php: 21 Stapelverfolgung: # 0 {main}, ausgelöst in C: \ xampp \ htdocs \ LOGIN1.php on Zeile 21

    Ich danke schonmal für eure Hilfe.

  • #2
    PHP-Code:
    $query sprintf(
                        
    "SELECT Name, Passwort FROM user WHERE username = '%s'",
                        
    $mysqli->real_escape_string($_POST['f']['username']) 
    Was steht in $_POST['f']['username']?
    Stimmen die Spaltennamen und Tabellen. Lese die Fehler aus, die dir die DB meldet, siehe https://www.php.net/manual/en/mysqli.error.php

    Kommentar


    • #3
      Betreibe debuggig. Lass dir mal $query und $result mit var_dump() vor der Zeile 21 ausgeben.

      Kommentar


      • #4
        Okay, wie ich eben gesehen hab, ist in result nichts eingetragen... leider weiß ich auch nicht wo da der Fehler liegt, bzw. was ich anders schreiben muss, da ich noch ein relativer PHP Anfänger bin.

        Hier müsste ja dann der Fehler liegen:

        PHP-Code:
        $query sprintf(
                            
        "SELECT Name, Passwort FROM user WHERE username = '%s'",
                            
        $mysqli->real_escape_string($_POST['f']['username'])
                        );


                        
        $result $mysqli->query($query); 

        Kommentar


        • #5
          Und wie sieht $query aus nach Ausführung von sprintf() ? Was bringt diese Abfrage wenn du diese mit einen Datenbanktool ausführen lässt bzw. was zeigt mysqli_error? (s. link #2).

          Kommentar


          • #6
            Naja wir sollen halt eine Website mit funktionierender Datenbank innerhalb von 3 Wochen schreiben.... ohne wirkliche Infos wie wir was machen.

            Das kommt bei der Ausgabe raus: SELECT Name, Passwort FROM user WHERE Benutzername = 'jonas' var_dump () Schwerwiegender

            Kommentar


            • #7
              Zitat von iTzjxn3s Beitrag anzeigen
              Naja wir sollen halt eine Website mit funktionierender Datenbank innerhalb von 3 Wochen schreiben
              Das ist aber nicht unser Problem, oder? Jammern hilft da auch nicht, zur Not lässt du dir das halt von jemanden schreiben und bezahlst dafür.

              Zitat von iTzjxn3s Beitrag anzeigen
              Das kommt bei der Ausgabe raus: SELECT Name, Passwort FROM user WHERE Benutzername = 'jonas' var_dump () Schwerwiegender
              Benutzername ist aber nicht username wie im Startbeitrag #1

              Das ist übrigens ein Thema das in PHP Einsteiger gehört.



              Kommentar


              • #8
                Benutzername ist aber nicht username wie im Startbeitrag #1
                Ja, weil mein Chrome das autmatisch ins deutsche übersetzt. Im Code steht username.

                Kommentar


                • #9
                  Und user wird nicht übersetzt? Empfehle dir dringend die automatische Übersetzung im Crome zu daktivieren.

                  Kommentar


                  • #10
                    Moin,

                    ich würde noch den Code anders strukturieren, damit er nicht wie eine umgekippte Pyramide aussieht: https://php-de.github.io/jumpto/waechter/
                    Dann hat man auch einen besseren Überblick an welcher Stelle und nach welchem Aufruf etwas schief läuft.
                    PHP-Code:
                    $result $mysqli->query($query); 
                    An dieser Stelle musst du abfragen, ob $result false ist und dann entsprechend die Fehler auszugeben.

                    Ich empfehle gleich noch direkt auf PDO als Datenbank-API umzusteigen, mysqli ist in allen Belangen schlechter.
                    https://php-de.github.io/jumpto/pdo/

                    Kommentar

                    Lädt...
                    X