die guten alten session/login probleme

shrewm

Mitglied
Hoi,
ich habe eben das Login-Tutorial mit Sessions nachgebastelt und habe jetzt das Problem, dass bei mir bei diesen Zeilen hier:

PHP:
if (mysql_num_rows ($result) > 0)
{
...
}

mysql_num_rows = 0 ist und ich nicht weß woher das kommt - somit kann das skript logischerweise nicht richtig weiterlaufen. Das ganze skript sieht so aus:

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

$concon = mysql_connect ($host, $user, $pass);
mysql_select_db ($data, $concon);

$sql = "SELECT * FROM xmember WHERE
            (nickname = '".$username."' AND pass = '".$passwort."')";
$result = mysql_query ($sql);

if (mysql_num_rows ($result) > 0)
{
  $data = mysql_fetch_array ($result);

// sessiondaten auslesen und speichern
  $_SESSION["user_id"] = $data["member_id"];
  $_SESSION["level"] = $data["level"];
  $_SESSION["username"] = $data["nickname"];

  header ("Location: admin.php");
}
else
{
  die ("Fehler - konnte nicht einloggen");
}
?>

Also bekomme ich immer "Fehler - konnte nicht einloggen". Ich bin der Meinung, dass es an sql select liegt, aber finde halt den Fehler nicht :)

Danke schonmal
 
Ja das ist weil in der Datenbank kein Datensatz vorhanden ist der zu deiner Abfrage passt. Wenn es deiner Meinung nach stimmen sollte gib mal die Abfrage mit echo aus und probier es mit dieser Abfrage im PHPMyAdmin oder in der Konsole...
 
wenn ich das mit echo mache, bekomme ich auch 0 raus.

Würde das bedeuten dass meine Zellen der sql Tabellen falsch benannt oder die Variablen nicht richtig übergeben werden?
 
Wenn etwas bei SQL Querys nicht richtig geht ,gibt es 2 Moeglichkeiten zu "debuggen":
»Query ausgeben lassen um zu sehen ob und wie Variablen uebergeben wurden
»mysql_error verwenden

Außerdem wissen wir nicht wie deine Tabelle aufgebaut ist ,poste den Aufbau der Taelle »xmember«
PHP:
<?php
session_start ();
include "config.php";

$concon = mysql_connect ($host, $user, $pass);
mysql_select_db ($data, $concon);

$sql = "SELECT * FROM xmember WHERE
            (nickname = '".$username."' AND pass = '".$passwort."')";
$result = mysql_query ($sql) OR die(mysql_error());

echo "Der Query: ".$sql;
if (mysql_num_rows ($result) > 0)
{
  $data = mysql_fetch_array ($result);

// sessiondaten auslesen und speichern
  $_SESSION["user_id"] = $data["member_id"];
  $_SESSION["level"] = $data["level"];
  $_SESSION["username"] = $data["nickname"];

  header ("Location: admin.php");
}
else
{
  die ("Fehler - konnte nicht einloggen");
}
?>
 
Ah sehr schön, danke :o
Die Variablen werden also nicht übergeben wenn ich das richtig verstanden hab:
Code:
Der Query: SELECT * FROM xmember WHERE (nickname = '' AND pass = '')
Fehler - konnte nicht einloggen
das habe ich aber über ein ganz normales Formular "gepostet":
PHP:
<form action="login.php" method="post">
  Name: <input type="text" name="username" size="20"><br>
  Kennwort: <input type="password" name="passwort" size="20"><br>
  <input type="submit" value="Login">
</form>

Die Tabelle ist so aufgebaut:
PHP:
create table xmember
(member_id int not null primary key auto_increment, 
pass varchar(255) NOT NULL, 
level tinyint(4) NOT NULL, 
realname varchar(100), 
nickname varchar(255), 
member_icq varchar(100), 
member_email varchar(100), 
awards text, 
herkunft varchar(100), 
prozi varchar(110), 
graka varchar(110), 
rams varchar(100), 
squads varchar(50));

In den Zellen member_id pass level und nickname ist ein Inhalt, die anderen Zellen sind "null"


----------

Mir fällt gerade auf, dass ich auch bei einem simplen "Taschenrechner" in php über ein Formular keine Daten weitergeben kann. Hat anscheinend garnichts mit SQL zu tun. Kann sowas sein? Und darf man dafür einen neuen Thread aufmachen? :|
 
Zuletzt bearbeitet:
Ich glaube das liegt daran, dass du kein $_POST verwendest, probier's so:
PHP:
<?php 
session_start (); 
include "config.php"; 

$concon = mysql_connect ($host, $user, $pass); 
mysql_select_db ($data, $concon); 

$sql = "SELECT * FROM xmember WHERE 
            (nickname = '".$_POST['username']."' AND pass = '".$_POST['passwort']."')"; 
$result = mysql_query ($sql) OR die(mysql_error()); 

echo "Der Query: ".$sql; 
if (mysql_num_rows ($result) > 0) 
{ 
  $data = mysql_fetch_array ($result); 

// sessiondaten auslesen und speichern 
  $_SESSION["user_id"] = $data["member_id"]; 
  $_SESSION["level"] = $data["level"]; 
  $_SESSION["username"] = $data["nickname"]; 

  header ("Location: admin.php"); 
} 
else 
{ 
  die ("Fehler - konnte nicht einloggen"); 
} 
?>

Gruß
 
Hallo shrewm

das sieht mir ganz danach aus, als ob Du register_globals nicht aktiviert hast.
Wenn Du Zugriff auf die php.ini hast, dann stelle register_globals auf 'on'.Du findest sie in der Section Data Handling.
Falls nicht, kannst Du es auch per Code aktivieren. Schau mal ins manual.
Aber Marvin' s $_POST geht auch.Ist auch sicherer. Macht aber keinen Unterschied, wenn Du Deinen eigenen Server hast und administrierst.

Asterix :-)
 
Zurück