Avatar billede deller Nybegynder
03. maj 2005 - 13:18 Der er 9 kommentarer

Login via PHP

jeg har lavet følgende script:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
        <title></title>
        <link type="text/css" rel="stylesheet" href="style/style.css">
        <title>
            Tuned In.dk
        </title>       

    </head>
    <body>
        <div id="title"></div>
        <div id="mainMenu">
        </div>
        <div id="main">
            <div id="dummySubMenu"></div>
            <div id="subMenu">
                <a href="login.htm">Startside</a> |
                <a href="download.htm">Download</a> |
                <a href="galleri1.htm">Galleri</a> |
                <a href="adresseliste.htm">Adresser</a> |
                <a href="kalender1.htm">Kalender</a> |
                <a href="links1.htm">Links</a> |
                <a href="logafdersgudamand.htm">Log af</a>
            </div>
        <?php
// sessionen startes
session_start();

// hvis formularen ikke er afsendt vises den
if (!isset($_POST['Brugernavn']) || !isset($_POST['Adgangskode'])) {
print ("<?xml version=\"1.0\" encoding=\"ISO-8859-15\"?> \r" );
print ("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" ");
print ("\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\"> \r" );
print ("<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"da\"> \r" );
print ("<head> \r" );
print (" <title>Login-side</title> \r" );

print ("</head> \r" );
print ("<body> \r" );

print ("<h1>Login</h1></h1> \r" );

print ("<form action=\"".$_SERVER['PHP_SELF']."\" method=\"post\"> \r");
print ("<table><tr>\r");

print ("<td>Brugernavn: </td><td><input type=\"Text\" name=\"Brugernavn\" /></td>\r");
print ("</tr>\r<tr>\r");
print ("<td>Adgangskode: </td><td><input type=\"Text\" name=\"Adgangskode\" /></td>\r");
print ("</tr>\r<tr>\r");
print ("<td></td><td><input type=\"Submit\" value=\"GO GO GO!\" /> </td>\r");

print ("</tr>\r</table>\r");
print ("</form>\r");
print ("</body>\r");
print ("</html>\r");

}
else {
// ellers oprettes en forbindelse til databasen med
// indholdet fra formularen angives som søgekriterium
// php-funktionen scr_replace sikrer mod sql-injektion
// Opretter forbindelse til databaseserveren
$conn = mysql_connect('localhost', 'nobody', 'test');
if (!$conn) {
die ("Der kunne ikke etableres forbindelse til databaseserveren!");
}

// Opretter forbindelse til databasen
$is_db_selected = mysql_select_db('test_tunedin', $conn);
if (!$is_db_selected) {
die ("Der kunne ikke etableres forbindelse til databasen!");
}


$sql = "SELECT Brugernavn, Adgangskode ";
$sql .= "FROM medlemmer ";
$sql .= "WHERE Brugernavn = '" . str_replace("'", "", $_POST['Brugernavn']) . "' ";
$sql .= "AND Adgangskode = '" . str_replace("'", "", $_POST['Adgangskode']). "'";

$result = mysql_query($sql);

if (!$result) {
die ("query ikke udført: " . $sql. "<br /><strong>Fejl:</strong> " . ibase_errmsg());
}
if ($row = mysql_fetch_object($result)) {

// hvis det er et gyldigt login sættes sessionsvariablene lig adgangskoderne fra [ADMINISTRATOR]
if (strlen($row->Brugernavn) > 0) {
$_SESSION['Brugernavn'] = $row->Brugernavn;
$_SESSION['Adgangskode'] = $row->Adgangskode;

// "kunde_edit.php" vises og scriptet afbrydes
header("Location: tabel.php");
exit;
}
}
// hvis det ikke er et gyldigt login forøges sessionsvariablen $_SESSION['loginCount'] med 1
if (!(isset($_SESSION['loginCount']))) {
$_SESSION['loginCount'] = 1;
}
else {
$_SESSION['loginCount']++;
}

// hvis der mindre end 4 loginforsøg kaldes login-siden igen
if ($_SESSION['loginCount'] < 4) {
header("Location: login.php");
exit;
}
else {
// hvis der mere end 3 loginforsøg vises en fejlmeddelelse
print ("<?xml version=\"1.0\" encoding=\"ISO-8859-15\"?> \r" );
print ("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" ");
print ("\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\"> \r" );
print ("<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"da\"> \r" );
print ("<head> \r" );
print (" <title>Login-side</title> \r" );
print ("</head> \r" );

print ("<body> \r" );
print ("<h1>HVAD HAR DU GANG I!?</h1></h1> \r" );
print ("<p>Du kan ikke finde ud af det!! gå hjem og tænk over hvad du har gjort :-)</p>");
print ("<p>Forsøg igen eller sluk computeren!.</p>");
print ("</body>\r");
print ("</html>\r");
exit;
}
}

?>
<br><br>
        <a href="index.html" style="color:black">Tilbage til ekstern side</a>
            </div>
      </div>
    </body>
</html>

Scriptet virker, hvis jeg kører det gennem localhost intern på computeren. Men hvis jeg oploader den til vores websted, hvor det skal bruges, melder den fejl i linie 29 som har noget at gøre med det XHTML'en som ligger sammen med PHP'en. Hvad skal jeg gøre for at få mit PHP login til at virke? Vi har tjekket at vores webserver understytter PHP og MySQL, så det kan ikke være der problemet ligger, hvad kunne det ellers være?

På forhånd tak for hjælpen.
Mvh Per Jacobsen.
Avatar billede vallemanden Nybegynder
03. maj 2005 - 13:24 #1
hvad er fejlen?
Avatar billede deller Nybegynder
03. maj 2005 - 13:33 #2
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /usr/home/web/web65495/login.php:18) in /usr/home/web/web65495/login.php on line 29

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /usr/home/web/web65495/login.php:18) in /usr/home/web/web65495/login.php on line 29

Dette er hvad den skriver til mig, og jeg er ikke lige med på hvad det skal betyde
Avatar billede fsconsult.dk Nybegynder
03. maj 2005 - 13:48 #3
du starter php siden med at skriver html ud, men der må ikke sendes noget ud før evt. headere er sendt..
Avatar billede fsconsult.dk Nybegynder
03. maj 2005 - 13:49 #4
dvs, du skal starte med din php logik, og så skrive den nødvendige html kode bagefter :)
Avatar billede deller Nybegynder
03. maj 2005 - 13:55 #5
har du nogen anelse om hvad den nødvendige HTML kode er? for jeg er desværre bare blevet mere forvirret istedet :P
Du mener altså at man først skriver hele HTML scriptet og afslutter det før men påbegynder PHP'en? eller er det mig der har misforstået svaret :)
Avatar billede fsconsult.dk Nybegynder
03. maj 2005 - 14:10 #6
Nej, tværtimod. 

Du skal først have de php kommandoer som direkte eller indirekte danner html headers. F.eks. header("Location: tabel.php");
og muligvis også session_start();
Avatar billede deller Nybegynder
03. maj 2005 - 14:15 #7
Det vil sige at header("Location: tabel.php"); og header("Location: login.php"); skal stå under <head></head> og evt session_start(); skal også derunder? ellers er jeg desværre ikke helt med på det du mener :D
Avatar billede fsconsult.dk Nybegynder
03. maj 2005 - 15:50 #8
nej, header() funktionen i php danner html-headers til browseren, ikke at forveksle med <head></head>

hvis du ønsker at lave redirect til en anden side, må der ikke være andet end PHP linier før du gør det.

Dvs. lav:

<?php
// ingen blank linie først!!
if ($a == 7) {
  header("Location: tabel.php");
} else {
  session_start(); // må heller ikke stå før egentlig html kode/blanke linier!
}
?>
<html>
.....
</html>
Avatar billede da_kbaz Nybegynder
25. maj 2005 - 12:17 #9
Gør sådan her:

<?php
  // Start buffer
  ob_start();
?>

  [.. Dit script / HTML / mm..]

<?php
  // Flush buffer
  ob_flush();
?>
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
Computerworld tilbyder specialiserede kurser i database-management

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