SQL-Abfrage = doppelte Datensätze, $_SESSION = Null auf Folgeseite

mit OOP meinst du sicher objektorientiert? Das finde ich persönlich von der Schreibweise her etwas kompliziert. Für mich als Anfänger wirkt die prozedurale Schreibweise auf den ersten Blick einfacher.

Ich krieg die Abfrage aber irgendwie trotzdem nicht zum laufen. Und Fehlermeldungen gibt es mir immernoch keine aus. Habe sogar folgendes an den Anfang des Scripts eingefügt:
PHP:
error_reporting(E_ALL);
ini_set('display_errors', 'on');

Hier erstmal die DB Connection (die scheint auch zu gehen):
PHP:
$link = mysqli_connect($server, $benutzer, $passwort, $dbname);

Dann die Abfrage:
PHP:
$passwort_sha1 = sha1($passwort);
$benutzername = mysqli_real_escape_string($link, $benutzername);      
$result = mysqli_query($link, "SELECT * FROM reg_tbl_user WHERE user_name = '$benutzername';") or die("Anfrage fuer 'reg_tbl_user' war nicht erfolgreich. Error: " . mysqli_error($link));
$benutzer = mysqli_fetch_array($result);

Kann es vielleicht sein, dass meine MySQL Version mysqli nicht unterstützt oder sowas? Oder der Hoster da was in der php.ini eingestellt hat was hier zu Misserfolg führt?
 
Doch, doch ich prüf das schon. Hier der Code dazu:

PHP:
function debug_to_console( $data ) {       
    $output = '';   
    if ( is_array( $data ) ) {
        $output .= "<script>console.warn( 'Debug Objects with Array.' ); console.log( '" . implode( ',', $data) . "' );</script>";
    } else if ( is_object( $data ) ) {
        $data    = var_export( $data, TRUE );
        $data    = explode( "\n", $data );
        foreach( $data as $line ) {
            if ( trim( $line ) ) {
                $line    = addslashes( $line );
                $output .= "console.log( '{$line}' );";
            }
        }
        $output = "<script>console.warn( 'Debug Objects with Object.' ); $output</script>";
    } else {
        $output .= "<script>console.log( 'Debug Objects: {$data}' );</script>";
    }   
    echo $output;
}

$link = mysqli_connect($server, $benutzer, $passwort, $dbname);
if (mysqli_connect_errno()) {
    die(debug_to_console('Verbindung zur Datenbank schlug fehl: ' . mysqli_connect_error()));
}else{
    debug_to_console("Erfolgreich mit Datenbank verbunden");
    }
 
Gib uns doch mal bitte deinen Kompletten Code.. es kann ja auch sein das du bei der Mysqli Variablen verteilung Fehler gemacht hast oder was auch immer..
Und nur mal so als Tipp benutz XAMPP das ist leichter als permanent die neuen Daten aufn Server Hochzuladen..
 
Mal ganz nebenbei zum eigentlichen Thema
PHP:
      $result = mysqli_query($link, "SELECT * FROM reg_tbl_user WHERE user_name = '$benutzername' AND user_passwort = '$passwort_sha1' GROUP BY user_name") or die("Anfrage fuer 'reg_tbl_user' war nicht erfolgreich. Error: " . mysqli_error($link));
      $benutzer = mysqli_fetch_array($result);
mysqli_fetch_array() gibt dir eine Zeile aus, mit keys UND Index. Also jede Spalte 2 mal.
Code:
Array('id'=>1, 0=>1, 'name'=>'Test', 1=>'Test'...)

Du solltest dich entscheiden, über den Spaltennamen (key) oder die Spaltennummer (index) zuzugreiffen. Da du mit SELECT * arbeitest ist vom Zweiten abzuraten, da du im Code nicht sihest welche Reihenfolge die Felder haben.
Ich würde auf mysqli_fetch_assoc() wechseln, um die Felder über den Key auszulesen. Damit hast du auch nur 6 Spalten drin.
Code:
Array('id'=>1, 'name'=>'Test'...)

Ansonsten gilt natürlich was ComFreak geschrieben hat
 
Vielen Dank für eure Antworten :)

@Bobo2040 OK. Hier mal mein vollständiger Code:

Loginseite (etwas angepasst, und abgespeckt, da ich gestern noch auf Fehlersuche war und diverse Dinge ausschließen wollte. Z. B. hatte ich die gesamte DB-Connection in einer externen Datei die ich per include eingebunden hatte. Außerdem hatte ich vorher die Fehler über die Konsole ausgegeben. Das ist hier nun alles anders.):
PHP:
error_reporting(E_ALL);
ini_set('display_errors', 'on');
session_start();
$server   = "xxxxx";
$benutzer = "xxxxx"; 
$passwort = "xxxxx"; 
$dbname   = "xxxxx";
$link = mysqli_connect($server, $benutzer, $passwort, $dbname);
if (mysqli_connect_errno()){
    echo 'Verbindung zur Datenbank schlug fehl: ' . mysqli_connect_error();
}else{
    echo "Erfolgreich mit Datenbank verbunden";
    }
mysqli_query($link, 'SET CHARACTER SET utf8');
function login_ueberpruefen($benutzername, $passwort) {
      $passwort_sha1 = sha1($passwort);  
      $benutzername = mysqli_real_escape_string($link, $benutzername);
      $result = mysqli_query($link, "SELECT * FROM reg_tbl_user WHERE user_name = '$benutzername';");
      var_dump($result);    
      if (!$result){
      echo("Error description: " . mysqli_error($link));
      }    
      $benutzer = mysqli_fetch_array($result);
      if(!$benutzer || $benutzer['user_passwort']!=$passwort_sha1 ) {
           return false;
      } else {
           $_SESSION['benutzer'] = $benutzer;
           return true;
      }
}
$login = false;              
if(isset($_POST['sent'])){
    $login = login_ueberpruefen($_POST['benutzername'], $_POST['passwort']);  
    }
else{
    //.....
    }  
if($login) {
    var_dump($_SESSION['benutzer']);
    /*echo "<script type='text/javascript'>$(document).ready(function(){window.location = 'folgeseite.php';});</script>";*/  
} else {  
    echo "<p>Login NICHT erfolgreich</p>";  
}
mysql_close($link);

Achja. Bei der gestrigen Fehlersuche habe ich noch ein weiteres var_dump eingebaut, um die mysqli_query zu überprüfen. Das ergab immer "NULL".

@Yaslaw Vielen Dank für deine Erklärung. Das erklärt das natürlich. Aber schade, ich dachte, ich hätte hier einen Fehler gemacht und deshalb würde die Session nicht gespeichert bzw. nicht an die Folgeseite übergeben.
 
Achso, jetzt sehe ich den Fehler. Die Variable $link ist in deiner Funktion natürlich nicht verfügbar, da du sie nich als Parameter übergibst. In PHP musst du sie extra aus dem globalen Namensraum holen ("global $link;" am Anfang der Funktion).
Mach das allerdings bitte nicht!
Nachteile kannst du hier nachlesen: http://programmers.stackexchange.com/questions/148108/why-is-global-state-so-evil

Am leichtesten lässt sich in deinem Code ein weiterer Parameter zu "login_ueberpruefen" hinzufügen:
PHP:
function login_ueberpruefen($link, $benutzername, $passwort) {
Natürlich musst du den aufrufenden Code auch abändern.
 
Vielen, vielen Dank! Ihr seid echt Spitze! Habt mir den Tag bzw. die Woche gerettet :D . Dann bastel ich da mal weiter. Nochmals vielen Dank.
 
Zurück