PHP/MySqli Problem mit Anfrage

Atrimedis

Grünschnabel
Lieben Gruß an die Gemeinde von tutorial.de,

bin hier neu angemeldet bei Euch, jedoch schon seit Jahren immer mal,wenn es Probleme oder Tuts nötig waren bei Euch auf der Seite unterwegs.
Nun ist der Fall der Fälle eingetreten,das ich einmal nichts zu meiner Problematik finde, also zum Problem:

Befasse mich erst seit kurzem mit mysqli und habe angelehnt an das Tutorial bei php-quake mir ein login erstellt. Auf meinem lokalen Server (Windows XP, XAMPP
) in meinem Netzwerk läuft alles wunderbar!
phpinfo vom lokalen Server:
PHP Version 5.2.5
Code:
Client API library version 	5.0.51a
Client API header version 	5.0.45
MYSQLI_SOCKET 	/tmp/mysql.sock

mysqli.default_host	no value |	no value
mysqli.default_port	3306 |	3306
mysqli.default_pw	no value |	no value
mysqli.default_socket	no value |	no value
mysqli.default_user	no value |	no value
mysqli.max_links	Unlimited |	Unlimited
mysqli.reconnect	 Off |	Off
Wie schön nach knapp einer Woche Arbeit an der kompletten Seite, kann ich Sie ja nun auf den Server spielen, aber komischer Weise funktioniert da der Login und warscheinlich auch alle anderen mysqli Anfragen nicht bzw. es gibt immer eine 0,also false zurück.
phpinfo vom Webspace (Unix System):
PHP Version 5.2.5
Code:
MysqlI Support	enabled
Client API library version 	5.0.37
Client API header version 	5.0.37
MYSQLI_SOCKET 	/var/lib/mysql/mysql.sock

mysqli.default_host	no value |	no value
mysqli.default_port	3306 |	3306
mysqli.default_pw	no value |	no value
mysqli.default_socket	no value |	no value
mysqli.default_user	no value |	no value
mysqli.max_links	Unlimited |	Unlimited
mysqli.reconnect	 Off |	Off

So und nun noch der php Code:
PHP:
	$sql = 'SELECT
                `ID`
            FROM
                `user`
            WHERE
                `Username` = ?';
    $stmt = $db->prepare($sql);
    if (!$stmt) {
        return $db->error;
    }
    $stmt->bind_param('s', $Username);
    if (!$stmt->execute()) {
        return $stmt->error;
    }
    $stmt->bind_result($UserID);

	if (!$stmt->fetch()) {
        return 'Es wurde kein Benutzer mit den angegebenen Namen gefunden. ';
    }
    $stmt->close();

Er führt den Code aus und prüft, kommt aber zum Ergebnis,das es kein Benutzer mit dem angegebenen Namen gibt., also geht durch bis zur Prüfung (!stmt->fetch()) !
Ich sehe den Wald vor lauter Bäumen langsam nicht mehr! Hat jmd eine Idee woran es liegen kann,das es lokal funktioniert und auf dem Webspace nicht?

lieben Gruß Atri
 
Jetzt nicht böse sein... :rolleyes:
Aber wenn die Einstellungen wie oben offensictlich korrekt sind und es auf Deinem Server funktioniert, remote aber nicht,
frage ich mich als Erstes, ob die DB dort (vor allem korrekt) erstellt wurde?
Ansonsten is klar, daß false oder 0 zurück kommt.
 
Also die Datenbank und die Tabellen sind auf dem Server vorhanden und die Struktur stimmt.

Die MySQL Version vom Webspace ist 5.0.27 und vom lokalem Server 5.0.51a.

Aufbau der Tabelle in der DB vom Server und vom Lokalen ist identisch:
Code:
ID || Username || Password || Email || GrpID || SessionID ||	Autologin || IP || Letzte_Aktion || Letzter_Login || Show_Email || Registrierungsdatum
1 || xxx || xxx || xxx ||  0 || 0 || xxx || xxx  ||NULL  || xxx
xxx = Platzhalter

Ebenso die Typen der Felder sind identisch (lokal & Webspace), das habe ich bereits kontrolliert,weil da am ehesten Probleme auftauchen. Hatte das Problem, das ich Anfangs die Tabellen Namen groß geschrieben hatte (Abfragen) und Unix zwischen Groß- & Kleinschreibung unterscheidet und so die Tabellen nicht finden konnte.

Code:
ID --> int
Username --> varchar(30)
Password -->varchar(32)
Email --> varchar(100)
...

Es existiert auch definitiv der User in der Tabelle 'user' in der DB mit dem ich mich versuche einzuloggen seit 2 Tagen.

Atri
 
Und der Zugriff auf die DB ist auch korrekt?
Ich meine Server, Benutzername, Passwort und Datenbank selbst?
Ansonsten sehe ich den Fehler so in Deinem Skipt nicht. Müßte man höchstens
mal die Klasse haben von der $db abgeleitet wird. Vielleicht ist da etwas zu finden.
 
Die Zugangsdaten zur Datenbank sind auch korrekt. Andere Scripte greifen auf die DB zu und holen unter anderen News aus Ihr heraus.

Die Mysqli Klassen gibt es in PHP5 und habe auch erfolgreich ein neues Objekt erstellt, ansonsten würde er die News etc. nicht auf die DB zugreifen können.

Atri
 
Tja, dann liegts vielleicht an den verschiedenen Versionen.
Entweder die Funktionen anpassen oder auf dem Server die gleiche Installieren, wie auf Deinem lokalen Projekt.
 
Deshalb ja meine Frage hier,ob jmd weiss woran es liegt.

Hier die ganze login.php bis zur ersten Abfrage:
PHP:
if (getUserID($db)) {
    return 'Sie sind bereits eingeloggt.';
}
$ret = array();
$ret['filename'] = 'login.tpl';
$ret['data'] = array();
if ('POST' == $_SERVER['REQUEST_METHOD']) {
    if (!isset($_POST['Username'], $_POST['Password'], $_POST['formaction'])) {
        return INVALID_FORM;
    }
    if (('' == $Username = trim($_POST['Username'])) OR
            ('' == $Password = trim($_POST['Password']))) {
        return EMPTY_FORM;
    }
	$sql = 'SELECT
                `ID`
            FROM
                `user`
            WHERE
                `Username` =?';
				
    $stmt = $db->prepare($sql);
    $stmt->bind_param( 's', $Username );
    if (!$stmt->execute()) {
        return $stmt->error;
    }

	$stmt->bind_result($UserID);
    if (!$stmt->fetch()) {
        return 'Es wurde kein Benutzer mit den angegebenen Namen gefunden.';
    }

Im Login Template ist nur ein Formular welches die eingegebenen Daten über post an das Login.php Script übergibt. Die Postdaten kommen an,aber er findet eben nicht den Usernamen in der DB,obwohl er existiert.
Habe der Variablen $Username auch schon im Script einen festen Namen zugeordnet,aber den findet er auch nicht.

Liegt es vllt daran,das ich eine .htaccess datei in meinem Ordner anlegen musste,um php5 zu verwenden?

Bin so langsam ein bissl gefrustet. Vllt hat ja wer auch einen völlig anderen Ansatz woran es liegen könnte?!
Atri
 
Bei mir lag es am Anfang daran, dass .php wie PHP4 behandelt wurde...

Dieser Eintrag könnte helfen:

AddType application/x-httpd-php5 .php
 
Zurück