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

Mysqli Query funktioniert nicht

SeGreg

Neues Mitglied
Moin Leude, ihr seid echt meine letzte Hoffnung.
Schreibe derzeit an einer Loginfunktion und auf dem Localhost lief alles Bombe, nun spiel ich das auf den Webhoster auf und es geht nicht!
Ich hab sämtliche Fehlerabfragen gestartet und bekomme nichtmal eine Fehlermeldung, aber er führt einfach die SELECT abfrage nicht aus mit der ich dann auf die weiteren Werte zugreifen wollte.
Wie bereits gesagt, auf localhost läuft alles bombe... nur auf dem Server (ich hab extra zwei probiert, beide fehlanzeige).

Hier der Code, ich hoffe einer von euch findet den Fehler!

if (isset($_SESSION['start'])){
if($_SESSION['username'] AND $_SESSION['password']){
$query = "SELECT * from user where username='".$_SESSION['username']."';";
if($rset = @$dbc->query($query)){
$num = $rset->num_rows;
}
if (!$dbc->query($query)) {
printf("Errormessage: %s\n", $dbc->error);
}
if($num!=0){
while ($row = $rset->fetch_object()) {
$_SESSION['dbusername'] = $row->username;
$_SESSION['dbpassword'] = $row->passwort;
$_SESSION['id'] = $row->iduser;
$_SESSION['vorname'] = $row->vorname;
$_SESSION['lastname'] = $row->name;
if($_SESSION['dbusername'] == $_SESSION['username'] AND $_SESSION['dbpassword'] == $_SESSION['password']){
$_SESSION['eingeloggt'] = TRUE;
}
else{
echo "warum 2";
$fehlermeldung="Falscher Benutzername oder Passwort";
unset($_SESSION['start']);
$_SESSION['Fehler']=$fehlermeldung;
}
}
}
else{
echo "Warum 1";
$fehlermeldung ="Falscher Benutzername oder Passwort";
$_SESSION['Fehler']=$fehlermeldung;
unset($_SESSION['start']);
}
}
else{
$fehlermeldung ="Beide Felder ausfüllen";
$_SESSION['Fehler']=$fehlermeldung;
unset($_SESSION['start']);
}
}


Es ist ein kleiner Ausschnitt, aber ich bekomme als Meldung lediglich Errormessage: und dann das von mir extra eingefügte "warum1". Er überspringt also die if-Abfrage des Zugriffs auf die Datenbank.
Bei einem Test habe ich als var_dumb $rset = NULL rausbekommen. Warum?
 
Hallo,

also ist $num gleich 0.
mach doch einfach mal relevante debug ausgaben wie echo $num oder echo $query.

ich habe etwas meins zweifel an $query, das dürfet auch passen wenn es grundsätzlich richtig ist
PHP:
$query = "SELECT * from user where username='".$_SESSION['username']."'";

und @ im php code sind glaube ich auch kein gutes zeichen, denn es gibt ja kaum grund fehlermeldungen zu unterdrücken.
und mysql_error hilft vielleicht auch, einfach mal einbauen PHP: mysql_error - Manual

Cheffchen
 
Ich habe bereits nachgeschaut was alles so passiert und was nicht passiert.
Wie bereits gesagt, er führt die if-anweisung nicht aus in der $rset definiert wird. Deshalb ist rset auch NULL und num existiert demnach überhaupt nicht. Deshalb auch kein Auslesen der Daten.

Vieles spricht dafür, dass die SQL Anweisung falsch ist, da das Schreiben auf die Datenbank funktioniert. Es geht lediglich um das Auslesen, da sträubt er sich ohne Ende.
Allerdings finde ich keinen Fehler,
- gebe ich $_SESSION['username'] aus erhalte ich den korrekten Username.
- kopiere ich den Code in mein Workbench führt er das ohne mucken aus.
- läuft es auf localhost wie ein Bienchen und ohne Probleme

Ich habe auch
if (!$rset) { echo "state:".$dbc->sqlstate; echo "errno:".$dbc->errno; echo "error:".$dbc->error; printf("Errormessage: %s\n", $dbc->error);

}eingebaut, allerdings liefert er mir keinerlei Fehlermeldung, sondern lediglich die echos des Strings.
Das @ hab ich weg gemacht.

Ich verstehe das nicht....
Wenn schreiben auf der Datenbank funktioniert, kann es demnach auch nicht an der Connection liegen... nehme ich an?
 
Ist $dbc auch wirklich definiert? Prüfe mal mit
PHP:
var_dump($dbc);

Und verwende im Forum bitte Code-Tags, wenn Du Quellcode zeigst.
 
Hmmmmm! Ich erhalte folgenden undschönen Code, der mir sagt, hier stimmt was nicht:
Code:
object(mysqli)#2 (18) {   ["affected_rows"]=>   NULL   ["client_info"]=>   NULL   ["client_version"]=>   int(50524)   ["connect_errno"]=>   int(1045)   ["connect_error"]=>   string(62) "Access denied for user 'root'@'localhost' (using password: NO)"   ["errno"]=>   NULL   ["error"]=>   NULL   ["field_count"]=>   NULL   ["host_info"]=>   NULL   ["info"]=>   NULL   ["insert_id"]=>   NULL   ["server_info"]=>   NULL   ["server_version"]=>   NULL   ["stat"]=>   NULL   ["sqlstate"]=>   NULL   ["protocol_version"]=>   NULL   ["thread_id"]=>   NULL   ["warning_count"]=>   NULL }

Mich wundert das aber, denn wie bereits gesagt, auf Localhost funktioniert das alles so wie ich das gemacht habe:

Ich habe eine Datei, condifonline.php, in der die mysqli Klasse erstellt wird:
Code:
$dbc = new mysqli('mysql.lima-city.de','$username','$passwort','$datenbank',3306);

Und ich binde das ganze in meine Startseite mit einem:
Code:
require_once('configonline.php');

ein, ist das falsch?
 
Ja, ist beides gesetzt und eigentlich auch korrekt gesetzt.
Allerdings hab ich mal das "require_once" ersetzt durch den direkten Aufruf, also nicht als externe Datei, sondern direkt dort erstellt und var_dump war nicht mehr null.
Allerdings gab es dann andere Fehler auf der Page.

ist das require_once(source) richtig? kann man das so verwenden oder ist ein include besser?


Noch eine lustige Sache:
Gebe ich var_dump($dbc) auf der startseite an, erscheinen die richtigen daten.
gebe ich var_dump($dbc) auf der Loginseite an, erscheinen überall nulls obwohl die Loginseite ein include der startseite ist.
 
Zuletzt bearbeitet:
Es funktioniert jetzt, allerdings musste ich dafür auch auf der zweiten Seite, also der Loginseite, die per include auf der Startseite integriert ist, ebenfalls den include der Datenbankverbindung machen. Sowas ist doch eignetlich unnötig, oder nicht?
Wie kann man das besser lösen?

Vielen Dank für die bisherige Hilfe! :)
 
Wenn Du von "Seite" sprichst, wäre dort die Einbindung natürlich auch notwendig. Wenn Du aber eine Datei B meinst die per include bereits in Datei A integriert ist, dann kommt es auf die Reihenfolge der includes an, ob und wie das geht.
 
Hmmm!
Also, angenommen ich habe drei Dateien.
Die index.php, die login.php und die config.php.

Die Index.php ist die Startpage. Die Login.php ist in der Startpage per include integriert, sie wird also nie direkt aufgerufen, sondern per Spiele - Jetzt Spiele kostenlos online spielen auf spielen.de "aufgerufen".

In der Index.php ist allerdings auch die config.php per include integriert. Die config.php wird nie direkt aufgerufen, es wird lediglich auf die variable $dbc zugegriffen die in der config.php definiert wird.

Mein Problem war nun, dass ich dachte, wenn in der index.php ein include der config.php existiert, dann kann die login.php auch auf die Variable $dbc zugreifen, da die login.php ebenfalls in der index.php integriert ist.
Ich hab mir das als netzwerk vorgestellt und sobald eine Verbindung da ist, hat man auch die Variablen.
Ist das nicht so?
 
Wenn Du folgende Reihenfolge beim includen hast

PHP:
<?php
include("config.php");
include("Login.php");
?>

dann sollte es eigentlich auch klappen. Wenn Du diese Reihenfolge hast, aber $dbc in Login.php nicht zur Verfügung steht, dann hast Du irgendein anderes Problem was wir hier nicht erahnen können.
 
Zurück
Oben