Login Script// MYSQL Fehler

nate

Grünschnabel
Hallo Leute ich hab im Inet ein Login Script mit PHP und MYSQL gefunden,
nur leider kommt immer ein Fehler:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '. session_id() . ''' at line 1

Die MYSQL ist auf Version 5.5.25a. (Xampp)

Finde leider denn fehler nicht. Wäre gut wenn mir jemand sagen könnte wie es Funktioniert.

Hier noch die PHP Codes:

login.php
PHP:
<?php

session_start();
include_once('sessionhelpers.inc.php');

if ( isset($_POST['login']) ) {
    $userid = check_user($_POST['username'], $_POST['userpass']);
    if ( $userid ) {
        login($userid);
    } else {
        echo '<p>Ihre Anmeldedaten waren nicht korrekt!</p>';
    }
}

if ( !logged_in() ) {
    echo <<<END
<form method="post" action="login.php">
<label>Benutzername:</label> <input name="username" type="text"><br />
<label>Passwort:</label> <input name="userpass" type="password" id="userpass"><br />
<input name="login" type="submit" id="login" value="Einloggen">
</form>
END;
} else {
    echo '<p><a href="soll-geschuetzt-werden.php">Testseite</a></p>';
    echo '<p><a href="logout.php">Ausloggen</a></p>';
}

?>


logout.php

PHP:
<?php

session_start();
include_once('sessionhelpers.inc.php');

echo '<p>Sie sind ';
if ( !logged_in() ) {
    echo 'nicht ';
}
echo 'eingeloggt.</p>';

logout();

echo '<p>Sie sind ';
if ( !logged_in() ) {
    echo 'nicht ';
}
echo 'eingeloggt.</p>';

echo '<p><a href="login.php">Einloggen</a></p>';

?>

sessionhelpers.inc.php

PHP:
<?php


/**
 * @return void
 */
function connect () {
mysql_connect ("localhost","root", "") or die ("keine Verbindung möglich. Benutzername oder Passwort sind falsch");
mysql_select_db("nate") or die ("Problem mit der Datenbankverbindung");
}


/**
 * @param string $name
 * @param string $pass
 * @return boolean
 */

function check_user ( $name, $pass ) {
    // magic quotes anpassen
    if ( get_magic_quotes_gpc() ) {
        $name = stripslashes($name);
        $pass = stripslashes($pass);
    }
    // escapen von \, x00, n, r, , ', " und x1a
    $name = mysql_real_escape_string($name);
    // escapen von Backticks (`)
    $name = preg_replace('/x60/', '\x60', $name);
    // escapen von % und _
    $name = str_replace('%', '%', $name);
    $name = str_replace('_', '_', $name);

    $sql = "SELECT UserId FROM users WHERE UserName = '' . $name . '' AND UserPass='' . md5($pass) . ''";
    if ( !$result = mysql_query($sql) ) {
        exit(mysql_error());
    }
    if ( mysql_num_rows($result) == 1 ) {
        $user = mysql_fetch_assoc($result);
        return ( $user['UserId'] );
    } else {
        return ( false );
    }
}


/**
 * @param int $userid
 * @return void
 */
function login ( $userid ) {
    $sql = "UPDATE users SET UserSession = '' . session_id() . '' WHERE UserId = ' . ((int)$userid)";
    if ( !mysql_query($sql) ) {
        exit(mysql_error());
    }
}


/**
 * @return boolean
 */
function logged_in () {
    $sql = "SELECT UserId FROM users WHERE UserSession = '' . session_id() . ''";
    if ( !$result = mysql_query($sql) ) {
        exit(mysql_error());
    }
    return (mysql_num_rows($result) == 1);
}


/**
 * @return void
 */
function logout () {
    $sql = "UPDATE users SET UserSession = NULL WHERE UserSession = '' . session_id() . ''";
    if ( mysql_query($sql) ) {
        exit(mysql_error());
    }
}

connect();

?>
Seiten die geschützt werden sollen:

PHP:
<?php

session_start();
include_once('sessionhelpers.inc.php');

echo 'Sie sind ';
if ( !logged_in() ) {
    echo 'nicht ';
}
echo 'eingeloggt.<p />';

if ( !logged_in() ) {
    echo '<p><a href="login.php">Anmelden</a></p>';
}



if ( logged_in() ) {
    echo '<p>Geschützter Bereich</p>';

    echo '<p><a href="logout.php">Ausloggen</a></p>';
}

?>
 
PHP:
 $sql = "SELECT UserId FROM users WHERE UserSession = '' . session_id() . ''";

->

PHP:
 $sql = "SELECT UserId FROM users WHERE UserSession = '".session_id()."'";
 
Hey Danke schön hat geklappt

Ich hab nur noch ein Problem ;(.
Das Einlogen geht nicht..
es kommt immer Ihre Anmeldedaten waren nicht korrekt!
Es muss noch irgwo ein Fehler sein nur ich finde ihn nicht.

Auf der Datenbank ist alles i.o. Username richtig Userpassword in MD5 gespeicht.
 
Hast hier die Anführungszeichen falsch gesetzt
PHP:
  $sql = "SELECT UserId FROM users WHERE UserName = '' . $name . '' AND UserPass='' . md5($pass) . ''"; 

//Mach mal so
  $sql = "SELECT UserId FROM users WHERE UserName = '" . $name . "' AND UserPass='" . md5($pass) . "'";
 
Da die diese Art von Fragen sehr oft kommt, habe ich mal ein Tutorial geschrieben wie man am besten auf Fehlersuche geht.
PHP MySQL Debug Queries
Geh es doch mal durch und falls du die Lösung nicht findest, poste mal das ausgegebe SQL-Statement ins Forum.
 
Weiß nicht ob ichs richtig gemacht aber ich habs so gemacht:
Testen von ausgabe der Datenbank:
PHP:
<?php

mysql_connect ("localhost","root", "") or die ("keine Verbindung möglich. Benutzername oder Passwort sind falsch");
mysql_select_db("nate") or die ("Problem mit der Datenbankverbindung");

$sqli = mysql_query("SELECT * FROM `users`")
		or die ("MySQL-Error: " . mysql_error()); 

while($sqlii = mysql_fetch_array($sqli))
{
	echo "ID:" .$sqlii[0]. "	|	|		UserName:" .$sqlii[1]. "	|	|		UserPass:" .$sqlii[2]. "<br>" ;
}



?>

Und dann damit wie ich einen neuen Eintrag erstellt habe:
PHP:
<?php
error_reporting(E_ALL);
mysql_connect ("localhost","root", "") or die ("keine Verbindung möglich. Benutzername oder Passwort sind falsch".mysql_error());
mysql_select_db("nate") or die ("Problem mit der Datenbankverbindung".mysql_error());

$value = 'tes5t';
$where = 16;
$sql  = "INSERT INTO users SET UserName = '$value', UserPass = MD5('$where'), UserMail = 'mrhasppiness@inter.net';";
echo "{$sql}\n";
mysql_query($sql) or die(mysql_error());
//echo mysql_affected_rows();
?>

Es kann kein Error.



Hier noch wie ich die Tabelle erstellt habe:
Code:
CREATE TABLE `users` (
  `UserID` int(11) NOT NULL auto_increment,
  `UserName` varchar(30) collate utf8_unicode_ci NOT NULL default '',
  `UserPass` varchar(32) collate utf8_unicode_ci NOT NULL default '',
  `UserSession` varchar(32) collate utf8_unicode_ci default NULL,
  `UserMail` varchar(150) collate utf8_unicode_ci NOT NULL default '',
  PRIMARY KEY (`UserID`),
  UNIQUE KEY `NickName` (`UserName`),
  UNIQUE KEY `UserMail` (`UserMail`),
  UNIQUE KEY `UserSession` (`UserSession`)
) ENGINE=MyISAM;

Ich hoffe das könnt euch weiter Helfen
 
Zurück