Avatar billede mazey Praktikant
06. maj 2003 - 23:08 Der er 7 kommentarer og
1 løsning

2 fejl i oprettelse af login script

Jeg er totalt noob når det handler om PHP, og har derfor et par spørgsmål som i nok vil grine af, men ok, lærer det nok. Here it goes:
Jeg har lavet en login (forsøgt) i PHP, og den virker egentlig også, bortset fra 2 fejl.

1)Warning: Failed opening './common_db.inc' for inclusion (include_path='') in c:\appserv\www\login\login.php on line 3

Warning: Cannot send session cache limiter - headers already sent (output started at c:\appserv\www\login\login.php:3) in c:\appserv\www\login\login.php on line 58

Og det betyder?

2)Warning: open(/tmp\sess_093b8f9a64ed7d983a047b0e9ae17a08, O_RDWR) failed: m (2) in c:\appserv\www\login\login.php on line 58

Og det?

Min kode ser således ud:

<?php
//auth_user.php
include "./common_db.inc";
$register_script = "./register.php";

function auth_user($userid, $userpassword) {
    global $default_dbname, $user_tablename;
   
    $link_id = db_connect($default_dbname);
    $query = "SELECT username FROM $user_tablename
                                    WHERE userid = '$userid'
                                    AND userpassword = password('$userpassword')";
$result = mysql_query($query);
if(!mysql_num_rows($result)) return 0;
else {
    $query_data = mysql_fetch_row ($result);
    return $query_data[0];
    }
}

function login_form() {
    global $PHP_SELF;
?>
<!doctype html public "-//W3C//DTD HTML 4.0 //EN">
<html>
<head>
      <title>Helse Login</title>
</head>
<body>
<form method="POST" action="<? echo $PHP_SELF ?>">
    <DIV ALIGN="center"><CENTER>
    <h3>Please log in to access the page you requested.</h3>
<table border="0" width="200" cellpadding="2">
    <tr>
        <th width="18%" align="right" nowrap>ID</th>
        <td width="82%" nowrap>
            <input type="text" name="userid" size="8">
        </td>
    </tr>
    <tr>
        <th width="18%" align="right" nowrap>Password</th>
        <td width="82%" nowrap>
            <input type="text" name="userpassword" size="8">
        </td>
    </tr>
    <tr>
        <td width="100%" colspan="2" align="center" nowrap>
            <input type="submit" value="LOGIN" name="submit">
        </td>
    </tr>
</table>
</center></DIV>
</form>
</body>
</html>
<?
}
session_start();
if(!isset($userid)) {
        login_form();
        exit;
    }
    else {
        session_register("userid", "userpassword");
        //$username = auth_user{$userid, $userpassword);
        if(!$username) {
            session_unregister("userid");
            session_unregister("userpassword");
            echo "Authorization failed. " .
                "You must enter a valid userid and password. " .
                "click the following link to try again.<br>\n";
        echo "<A HREF=\"$register_script\">Membership</A>";
          exit;
        }
        else echo "Welcome, $username!";
    }
?>

Håber der nogen der kan hjælpe mig med mine problemer.

Mazey
Avatar billede kohaar Nybegynder
06. maj 2003 - 23:09 #1
include("./commin_db.inc");

Sådan er den korrekte syntax i alt fald...
Avatar billede jakoba Nybegynder
06. maj 2003 - 23:15 #2
Men den anden er desværre også lovlig.
med bogstaverne ./ fortæller du php at filen 'common_db.inc' ligger i samme mappe som den fil der indeholder din kode.
men der ligger ikke en fil med det navn der. Det får php til at skrive den første warning.

Og nu har php skrevet noget output. Såsnart det er sket er det ikke længere muligt at modificere headerinformation for den genererede fil.

Find ud af hvor filen 'common_db.inc' ligger, og adresser den korrekt.
Avatar billede mazey Praktikant
06. maj 2003 - 23:28 #3
common_db.inc ligger i samme mappe som php filen... har prøvet at dirigere direkte til hele adodb mappen, men den virker stadig ikke...
Avatar billede jakoba Nybegynder
06. maj 2003 - 23:54 #4
kan det være at filen ikke kan exekveres? har en chmod værdi med lige cifre.
Avatar billede mazey Praktikant
07. maj 2003 - 00:03 #5
Nu skrev jeg jo jeg var begynder.... så jeg ved ikke helt hvad du mener?
Avatar billede jakoba Nybegynder
07. maj 2003 - 00:18 #6
http://dk.php.net/manual/en/function.chmod.php
funktionen passer bedst til severe hvor operativsystemet er Unix eller Linux. så hvis din kode udføres på en windows server er det nok ikke det.

nogen spørgsmål:

filen med din kode i hedder "auth_user.php" ikke ?
den ligger i smme mappe som 'common_db.inc' ikke ?
bliver "auth_user.php" igen inkluderet i en tredie fil ?
hvad betyder "hele adodb mappen" ?
Avatar billede sukos Juniormester
07. maj 2003 - 01:28 #7
du kan også prøve:

include(dirname($_SERVER['DOCUMENT_ROOT'] . $_SERVER['PHP_SELF']) ."/common_db.inc");

så er der slet ingen tvivl :O)

Og så brug hellere *.php end *.inc, medmindre at *.inc også bliver parset som PHP filer af serveren.

Den her:

Warning: Cannot send session cache limiter - headers already sent (output started at c:\appserv\www\login\login.php:3) in c:\appserv\www\login\login.php on line 58

er fordi du bruger session_start() efter du vil vise siden.
Brug ALTID session_start() som det første

Den her:
2)Warning: open(/tmp\sess_093b8f9a64ed7d983a047b0e9ae17a08, O_RDWR) failed: m (2) in c:\appserv\www\login\login.php on line 58

er fordi du ikke har defineret session.save_path korrekt i din php.ini

D.v.s., åben din php.ini og ret session.save_path til et dir der findes

Du kan også bruge:
ini_set("session.save_path", $_SERVER["DOCUMENT_ROOT"] ."/sessions/");
session_start();

Så skal du lave et dir der hedder "sessions" i roden af din side.
Dog vil jeg ikke anbefale at du lægger sessionsfiler tilgængelige via http, så det vil nok være bedre med f.eks.:

ini_set("session.save_path", "c:/appserv/sessions/");
session_start();
Avatar billede sukos Juniormester
07. maj 2003 - 01:30 #8
æh, og husk nu at
ini_set("session.save_path", "c:/appserv/sessions/");
session_start();

skal i topppen af din side :O)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester