Finde fehler nicht in login.php

  • Themenstarter Themenstarter ByeBye 177919
  • Beginndatum Beginndatum
B

ByeBye 177919

Hey.

Ich bin dabei ein wenig PHP zu lernen ;)

Deswegen schreibe ich mein eigenes CMS.

Registrierung ist schon möglich und funktioniert einwandfrei. Doch mein Login will nicht. Es kommt dauernd nur "account ist gebannt". hier der code >
PHP:
<form id="form1" name="form1" method="post" action="index.php?p=login">
  <p align="center" class="tdglobal"><span class="b01">Login</span></p>
  <table width="200" border="0" align="center" class="liteoption">
    <tr>
      <td width="97" class="right"><div align="left">Username:</div></td>
      <td width="93" class="right"><input name="user" type="text" class="liteoption" id="user" size="15" maxlength="15" /></td>
    </tr>
    <tr>
      <td class="right"><div align="left">Password:</div></td>
      <td class="right"><input name="pass" type="text" class="liteoption" id="pass" size="15" maxlength="15" /></td>
    </tr>
  </table>
  <p align="center" class="tdglobal"><span class="right">
    <input name="submit" type="submit" class="liteoption" id="submit" value="Log In" size="15" maxlength="15" />
  </span></p>
</form>
<p align="center" class="tdglobal">
  <?php
include ("cfg/config.php");
if(isset($_POST['submit'])) {
$U = $_POST['user'];
$P = md5($_POST['pass']);

$conn = mysql_connect($dbh, $dbu, $dbp);
$db = mysql_select_db($db);

$result1 = "SELECT * FROM `accounts` WHERE name='$U' and password='$P'";
$query = mysql_query($result1, $conn);


$count = mysql_num_rows($query);


if($count == 1){


session_register("$U");
session_register("$P");
$U = $U; 
echo('Logged in.... Klick <a href=?op=user><strong>hier</strong></a>');
}
else {
echo "<strong>Account ist gebannt.</strong>";
}
}
?>

Hier ist auch meine Register.php (falls nötig) >
PHP:
<head>
<title></title>
</head>
<body>
<form action="index.php?p=register" method="post">
  <div align="center"	><br />
    <span class="b01">Registration </span><br />
  </div>
  <table width="258" border="0" align="center">
    <tr>
      <td width="107" height="20" class="b01">Username:</td>
      <td width="141"><label>
        <input name="user" type="text" class="liteoption" id="user" size="15" maxlength="15" />
      </label></td>
    </tr>
    <tr>
      <td height="25" class="b01">Passwort:</td>
      <td><input name="pass1" type="text" class="liteoption" id="pass1" size="15" maxlength="15" /></td>
    </tr>
    <tr>
      <td height="24" class="b01">Passwort Wiederhohlen:</td>
      <td><input name="pass2" type="text" class="liteoption" id="pass2" size="15" maxlength="15" /></td>
    </tr>
  </table>
  <p align="center">&nbsp;</p>
  <p align="center">
    <input name="submit" type="submit" class="liteoption" value="Regestrierung Abschicken" />
  </p>
</form>
<div align="center">
  <?php
include ("cfg/config.php");
if(isset($_POST['submit'])) {
if(!$_POST['user'] || !$_POST['pass1'] || !$_POST['pass2']) {
die('Bitte alle Zeilen ausfüllen!<BR>');
}
if(!get_magic_quotes_gpc()) {
$user = addslashes($_POST['user']);
$pass = md5($_POST['pass1']);
} else {
$user = $_POST['user'];
$pass = md5($_POST['pass1']);
}
$pass2 = md5($_POST['pass2']);
$c = mysql_connect($dbh, $dbu, $dbp);
mysql_select_db($db, $c);
$check = mysql_query("SELECT * FROM accounts WHERE name = '$user'");
$check2 = mysql_num_rows($check);
if($check2 != '0') {
die("Username: '".$user."' gibt es schon!");
}
if($pass != $pass2) {
die('Passwort stimmt nicht überein!');
}

$insert_member = mysql_query("INSERT INTO accounts (name, password, admin, active) VALUES ('$user', '$pass', '0', '1')");
if($insert_member) {
echo("<p class='b01'>Registration Erfolgreich!");
} else {
echo("<p class='b01'>Registration Fehlgeschlagen!</p>");
}}
?>	
</div>
</body>
</html>

Meine "home.php" >
PHP:
<?php if ($_REQUEST['p']) 
include ("modules/".$_REQUEST['p'].".php");
?>
<a href="index.php?p=register">Regestrieren</a>
<br>
<a href="index.php?p=login">Einloggen</a>

Und zu guter letzt meine index.php >
PHP:
<table width="100%">
<tr>
<td width="30%" valign="top">
<?php
include ("template/home.php");
?>
</td>
<td width="70%">
<?php
if ($_REQUEST['s']) 
{
include ("modules/".$_REQUEST['s'].".php");
}
?>
</td>
</tr>
</table>

Weißt einer den Fehler? Ich will mich per SESSION einloggen. Nehme bewusst nicht die Variante per Cookie ;)
 
lass dir mal $count per echo ausgeben
vermutlich ist das Ergebnis 0 weil das SQL fehlerhaft ist oder in der Datenbank ist mehr als ein Datensatz der zu dem SQL - Befehl paßt.

gruß

kato
 
lass dir mal $count per echo ausgeben
vermutlich ist das Ergebnis 0 weil das SQL fehlerhaft ist oder in der Datenbank ist mehr als ein Datensatz der zu dem SQL - Befehl paßt.

gruß

kato

Die SQL Variable ist Fehlerhaft :).... weil deine Variablen $U und $P nicht ersetzt werden.
Probiers mal anstatt:

Code:
$result1 = "SELECT * FROM `accounts` WHERE name='$U' and password='$P'";

mit
Code:
$result1 = "SELECT * FROM `accounts` WHERE name='".$U."' and password='".$P."'";

Grüße,
Lerche
 
Zuletzt bearbeitet:
Hi session_register verwendet man ab php version 4 eigentlich nicht mehr ist veraltet.
Hab dir mal das Script einwenig umgeschrieben. Teste es und schau nach welche Meldung du bei der Testausgabe count bekommst.

PHP:
<? session_start() ;?>
<form id="form1" name="form1" method="post" action="index.php?p=login"> 
  <p align="center" class="tdglobal"><span class="b01">Login</span></p> 
  <table width="200" border="0" align="center" class="liteoption"> 
    <tr> 
      <td width="97" class="right"><div align="left">Username:</div></td> 
      <td width="93" class="right"><input name="user" type="text" class="liteoption" id="user" size="15" maxlength="15" /></td> 
    </tr> 
    <tr> 
      <td class="right"><div align="left">Password:</div></td> 
      <td class="right"><input name="pass" type="text" class="liteoption" id="pass" size="15" maxlength="15" /></td> 
    </tr> 
  </table> 
  <p align="center" class="tdglobal"><span class="right"> 
    <input name="submit" type="submit" class="liteoption" id="submit" value="Log In" size="15" maxlength="15" /> 
  </span></p> 
</form> 
<p align="center" class="tdglobal"> 

<?php 
include ("cfg/config.php"); 
if(isset($_POST['submit'])) { 
$U = $_POST['user']; 
$P = md5($_POST['pass']); 
$conn = mysql_connect($dbh, $dbu, $dbp); //Verbindung zur Db
$db = mysql_select_db($db); // Dbname auswählen

$sql = sprintf("SELECT * FROM `accounts` WHERE name='%s' and password='%s'",($U),($P)); 
$query = mysql_query($sql, $conn); 
$count = mysql_num_rows($query); 
echo "Test Ausgabe count:".$count;  // Ergebniss am Browser ausgeben
	if($count == 1){ 
		$_SESSION["User"]=$U; // Session Variable erstellen
		$_SESSION["Pass"]=$P; 
		echo('Logged in.... Klick <a href=?op=user><strong>hier</strong></a>'); 
		} 
		else {echo "<strong>Account ist gebannt.</strong>";} 
} 
?>

Mfg Splasch
 
Zuletzt bearbeitet:
@splasch
1. das >
PHP:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/tomekk/html/mycms/index.php:4) in /home/tomekk/html/mycms/modules/login.php on line 1

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/tomekk/html/mycms/index.php:4) in /home/tomekk/html/mycms/modules/login.php on line 1
Das kommt wenn ich zuerst auf die page komme.

und 2tens >
PHP:
Test Ausgabe count:0Account ist gebann
Und das wenn ich versuche mich einzuloggen.
Hab dein script genommen. Ist also wie siehst das selbe.

@Lerche

Hab ich anfangs auch gedacht. Aber ein echo mit den Punkten und Ohne, mit ' und ohne ' sondern nur mit " - kommt jeweils das selbe raus > mein login und pw.

@katosan
Ja, 0 kommt raus.

Danke schonmal für die antworten.

Edit: was soll ich den dann verwenden ausser Session?
 
Ohne es getestet zu haben (Fehler kann mir auch passieren) dürfte was ich dir gerade geschrieben habe, eigendlich funktionieren:

PHP:
<?php session_start();
ob_start();

include ('./cfg/config.php');

$conn = mysql_connect($dbh, $dbu, $dbp);
$db = mysql_select_db($db);

$query = mysql_query('SELECT * FROM accounts WHERE name="'.mysql_real_escape_string($_POST['user']).'"');
$row = mysql_fetch_array($query);

if (isset($_POST['submit'])) {
    if (empty($_POST['user'])) {
        die ('Bitte geben Sie einen Usernamen ein!<br />');
    } else {
        if (empty($_POST['pass'])) {
            die ('Bitte geben Sie ihr Passwort ein!<br />');
        } else {
            if ($_POST['user'] != $row['user'] && md5($_POST['pass']) != $row['pass']) {
                die ('Die Benutzerdaten stimmen leider nicht überein!<br />');
            } else {
                # Session setzen. ggf. anpassen!
                $_SESSION['login'] = TRUE;
                echo ('Logged in.... Klick <a href=./?op=user><strong>hier</strong></a><br />');
            }
        }
    }
}
?>
 
PHP:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/tomekk/html/mycms/index.php:4) in /home/tomekk/html/mycms/modules/login.php on line 18

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/tomekk/html/mycms/index.php:4) in /home/tomekk/html/mycms/modules/login.php on line 18
Die Benutzerdaten stimmen leider nicht überein!

Obwohl sie übereinander stimmen ;)

Und das mit dem Session cookie kommt auch dauernd. Ist das nun per Cookie? :)

Ich hab dann in der zeile 18 "session_start();" entfernt. Jetzt kommt zwar der fehler nicht mehr, kann mich aber trotzdem noch nicht einloggen :)
 
@tomekk228
Die Fehlermeldung kommt nur dann wenn du vorher eine Ausgabe machst session_start() muß ganz am Anfang stehen. Das Selbe gilt wenn du Login.php include dann muß das bei der Hauptdatei ganz am Anfang stehen.

Wenn du also in deiner index die login inludest dann muß session_start in der index stehen bevor noch eine html ausgabe gemacht wird.

Zu 2 zeigt er dir das er keinen Datensatz gefunden hatt.
Die auf die eingaben passen.Da haste dann was falsch in der Tabelle drin stehen oder fragst sachen ab die es dort nicht gibt!

Ich hab dann in der zeile 18 "session_start();" entfernt. Jetzt kommt zwar der fehler nicht mehr, kann mich aber trotzdem noch nicht einloggen

Das gehört in Zeile 1 ganz am Anfang

Und Zeig uns mal was du in deiner Tabelle stehen hast und was du eingibt beim Login Formular.

Mfg Splasch
 
Zuletzt bearbeitet:
Kannst du mal probieren was hierbei rauskommt?

PHP:
  echo "SELECT * FROM `accounts` WHERE name='".$U."' and password='".$UP."'";

Außerdem ist dein Login sehr anfällig für SQL-Injections. Auf wikipedia kannst du dich zu diesem Thema informieren.

Gruß soyo
 
Also so sieht momentan meine login.php aus >
PHP:
<form id="form1" name="form1" method="post" action="index.php?p=login">  
  <p align="center" class="tdglobal"><span class="b01">Login</span></p>  
  <table width="200" border="0" align="center" class="liteoption">  
    <tr>  
      <td width="97" class="right"><div align="left">Username:</div></td>  
      <td width="93" class="right"><input name="user" type="text" class="liteoption" id="user" size="15" maxlength="15" /></td>  
    </tr>  
    <tr>  
      <td class="right"><div align="left">Password:</div></td>  
      <td class="right"><input name="pass" type="text" class="liteoption" id="pass" size="15" maxlength="15" /></td>  
    </tr>  
  </table>  
  <p align="center" class="tdglobal"><span class="right">  
    <input name="submit" type="submit" class="liteoption" id="submit" value="Log In" size="15" maxlength="15" />  
  </span></p>  
</form>  
<p align="center" class="tdglobal">  
<?php session_start();
ob_start();

include ('./cfg/config.php');

$conn = mysql_connect($dbh, $dbu, $dbp);
$db = mysql_select_db($db);

$query = mysql_query('SELECT * FROM accounts WHERE name="'.mysql_real_escape_string($_POST['user']).'"');
$row = mysql_fetch_array($query);
echo "SELECT * FROM `accounts` WHERE name='".$_POST['user']."' and password='".$_POST['pass']."'"; 
if (isset($_POST['submit'])) {
    if (empty($_POST['user'])) {
        die ('Bitte geben Sie einen Usernamen ein!<br />');
    } else {
        if (empty($_POST['pass'])) {
            die ('Bitte geben Sie ihr Passwort ein!<br />');
        } else {
            if ($_POST['user'] != $row['user'] && md5($_POST['pass']) != $row['pass']) {
                die ('Die Benutzerdaten stimmen leider nicht überein!<br />');
            } else {
                # Session setzen. ggf. anpassen!
                $_SESSION['login'] = TRUE;
                echo ('Logged in.... Klick <a href=./?op=user><strong>hier</strong></a><br />');
            }
        }
    }
}

?>
Leider gehts nicht. Probiert es einfach aus :) > http://tomekk228.dyndns.org/mycms

Außerdem ist dein Login sehr anfällig für SQL-Injections. Auf wikipedia kannst du dich zu diesem Thema informieren.

Gruß soyo
Ich hab kein CGI installiert :) Nur php mysql und apache. Alles andere ist Deaktiviert/nicht installiert.

PHP:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/tomekk/html/mycms/index.php:4) in /home/tomekk/html/mycms/modules/login.php on line 18

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/tomekk/html/mycms/index.php:4) in /home/tomekk/html/mycms/modules/login.php on line 18
SELECT * FROM `accounts` WHERE name='tomekk' and password='LANGERPW'Die Benutzerdaten stimmen leider nicht überei
Scheint so zu sein das er das pw nicht per md5 abschickt..

Also jetzt. Bin ich total verwirrt. Und die accs die er abfragt existieren usw. Sonst wär ja registrieren nicht möglich.
 
Zurück