undefined function

jbo

Mitglied
Hi,
mittlerweile ist mein kleines login fast fertig. Aber jedesmal, wenn ich die sichere Seite aufrufe, kommt die Fehlermeldung undefined function logged_in() in sichereseite.php on line 6. Ich versteh nicht, warum die Funktion nicht definiert sein soll.
Der Eintrag ist auf den sicheren Seiten
PHP:
<?php
session_start();
include 'sessioncheck.php';
if (!logged_in())
  die('nicht eingeloggt');

Die Funktionen definiere ich in der sessioncheck.php

PHP:
<? 
function connect() 
{ 
    $con= mysql_connect(xxx) or die(mysql_error()); 
     mysql_select_db('xxx',$con) or die(mysql_error()); 
} 

function check_user($identnr, $pwd) 
{ 
    $sql="SELECT UserId 
    FROM users 
    WHERE identnr='".$identnr."' AND pwd=MD5('".$pwd."') 
    LIMIT 1"; 
    $result= mysql_query($sql) or die(mysql_error()); 
    if ( mysql_num_rows($result)==1) 
    { 
        $user=mysql_fetch_assoc($result); 
        return $user['UserId']; 
    } 
    else 
       return false; 
} 

function login($userid) 
{ 
    $sql="UPDATE users 
    SET UserSession='".session_id()."' 
    WHERE userId=".$userid; 
     mysql_query($sql); 
} 

function logged_in() 
{ 
    $sql="SELECT UserId 
    FROM users 
    WHERE UserSession='".session_id()."' 
    LIMIT 1"; 
    $result= mysql_query($sql); 
      return ( mysql_num_rows($result)==1); 
} 

function logout() 
{ 
    $sql="UPDATE users 
    SET UserSession=NULL 
    WHERE UserSession='".session_id()."'"; 
     mysql_query($sql); 
} 

connect();
 
Zuletzt bearbeitet:
Mhhh ich hab leider jetzt keine Zeit das ganze auszuprobieren und den Fehler zu suchen. Aber ich geb dir den Tipp deine Zugangsdaten bei 1&1 zu ändern. Oder schnellstens hier die Daten rauszunehmen.
 
Ähem... so wie ich das sehe überprüfst du mit "if (!logged_in())" ja nur, ob die Funktion FALSE zurückgibt - genau das kann sie eben nicht tun. mysql_num_rows gibt nicht FALSE zurück, sondern eben die Anzahl der passenden Rows, also in deinem Fall 0 oder 1.

Ein Include-Problem dürfte eigentlich nicht vorliegen, es sei denn du hättest einen Tippfehler im Aufruf oder der Deklaration der Funktion.

Ändere mal testweise die Checkroutine zu Folgendem:
PHP:
<?php
if (logged_in() == 0) {
    die("Nicht eingeloggt!");
}?>

Kommst du damit weiter?
 
Nein das würde nix bringen...

denn ein if() welches keinen logischen ausdruck enthält sondern nur eine variable vom typ integer prüft immer gegen != 0
bzw. wenn dieser ausdruck negiert wird gegen == 0 geprüft.

das problem ist viel eher ein anderes wie mir scheint, aber ich hab den fehler noch nicht gefunden.

Außer eventuell das die includete datei mit <? anfängt, das kann je nach PHP version deaktiviert sein und damit zu probleme führen.
 
hab den fehler, meine geschützten Dateien liegen in Unterverzeichnissen, include konnte die sessioncheck nicht finden. Mann, wegen so einer Kleinigkeit hab ich mir einige Nächte um die Ohren gehauen.

Jetzt möchte ich nur noch, dass der user nach der Eingabe und Überprüfung seiner Daten gleich auf die geschützte Datei kommt. Mit meiner Variante klappts nicht.

PHP:
<? 
session_start();
include_once 'sessioncheck.php';
 
if (isset($HTTP_POST_VARS['login'])) 
{ 
    $userid=check_user($HTTP_POST_VARS['identnr'], $HTTP_POST_VARS['pwd']); 
    if ($userid!=false) 
        login($userid); 
    else 
        echo 'Ihre Anmeldedaten waren nicht korrekt!'; 
} 
if (!logged_in()) 
    echo '<form method="post" action="login.php"> 
        <label>ID-Nummer.:</label><input name="identnr" type="text"><br> 
        <label>Passwort: </label><input name="pwd" type="password" id="pwd"><br> 
        <input name="login" type="submit" id="login" value="Einloggen"><center>
    </form>'; 
else 
header("location:centering.php"); 
?>
 
Headers kannst du nur übermitteln, wenn noch kein HTML-Code ausgegeben wurde.
Das ist genau so wie bei den Cookies.

Siehe php.net.

Ich hoffe, dass dir das was hilft.
Achte also darauf, dass
1. keine Ausgaben vor Header-Aufrufen kommen
2. eine Leerzeile vor dem PHP-Tag (<? buw. <?php) ist auch eine Ausgabe!

Guten Rutsch!
 
@chibisuke:

Ich habe mir grad schon ein paar Posts durchgelesen, wo du die Sache mit den Absoluten URIs angesprochen hast. Ich habe bisher noch keinen einzigen Browser gehabt, der Sachen wie header("Location: intern.php"); nicht angenommen hat. Ich mache das schon seit immer und es funktioniert.
 
Zurück