Toon posts:

[PHP] Vaag cookie probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik begrijp er niks van, heb alleen een beetje de layout aangepast van een Ledensysteem script. Hier een paste van wat ik alleen maar heb veranderd.

De originele:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
else 
{ 
echo "<h3>Inloggen</h3>"; 
echo "Vul het form hieronder in om in te loggen, heb je nog geen gebruikersnaam?
Klik dan <a href=\"aanmelden.php\">hier</a><br>"; 
echo "<form action=\"$PHP_SELF\" method=\"post\">"; 
echo "Gebruikersnaam:<br>"; 
echo "<input type=\"text\" name=\"gebruikersnaam\" size=\"30\"><br><br>"; 
echo "Wachtwoord:<br>"; 
echo "<input type=\"password\" name=\"wachtwoord\" size=\"30\"><br><br>"; 
echo "<input type=\"submit\" name=\"inloggen\" value=\"Inloggen\">"; 
echo "</form>"; 
echo "Ben je je gegevens verloren? Klik dan <a href=\"opvragen.php\">hier</a> om je
gegevens weer op te vragen."; 
}

De aangepaste:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
else 
{ 
echo "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\"
style=\"border-collapse: collapse\" width=\"100%\" bordercolor=\"#000000\">"; 
echo "<tr>"; 
echo "<td width=\"100%\" style=\"border-style: solid; border-width:
1\" background=\"../images/bar.gif\">&nbsp;<b>Log in :</b>"; 
echo "</td></tr>"; 
echo "<tr>"; 
echo "<td width=\"100%\" style=\"border-style: solid; border-width:
1\" bgcolor=\"#333333\">"; 
echo "<table border=\"0\" cellpadding=\"2\" style=\"border-collapse:
collapse\" width=\"100%\">"; 
echo "<tr>"; 
echo "<td colspan=\"2\">Please <font
color=\"#FF9933\">complete</font> the form below in order to log in.</td>"; 
echo "</tr>"; 
echo "<tr>"; 
echo "<td width=\"7%\">&nbsp;</td>"; 
echo "<td width=\"93%\">&nbsp;</td>"; 
echo "</tr>"; 
echo "<form action=\"$PHP_SELF\" method=\"post\">"; 
echo "<tr>"; 
echo "<td width=\"7%\"><font
color=\"#FF9933\">Username</font>:</td>"; 
echo "<td width=\"93%\">"; 
echo "<input type=\"text\" name=\"gebruikersnaam\">"; 
echo "</td></tr>"; 
echo "<tr>"; 
echo "<td width=\"7%\"><font
color=\"#FF9933\">Password</font>:</td>"; 
echo "<td width=\"93%\">"; 
echo "<input type=\"text\" name=\"wachtwoord\">"; 
echo "</td></tr>"; 
echo "<tr>"; 
echo "<td width=\"7%\">&nbsp;</td>"; 
echo "<td width=\"93%\">"; 
echo "<input type=\"submit\" name=\"inloggen\" value=\"Log in\"
class=\"button\">"; 
echo "</td></tr>"; 
echo "</table>"; 
echo "</td></tr>"; 
echo "</table>"; 
}

Nu krijg ik de volgende fout als ik inlog:
code:
1
2
3
4
5
6
Warning: Cannot add header information - headers already sent by (output started at
/home/warlocksfromhellcom/HTML/members/inloggen.php:7) in
/home/warlocksfromhellcom/HTML/members/inloggen.php on line 52 

Inloggen  Ingelogd 
Je bent succesvol ingelogd als Administrator!

Ik begrijp er ff niks van, iemand anders wel? :?

  • RdeTuinman
  • Registratie: Mei 2001
  • Laatst online: 16-08 07:25
Het heeft mijns inziens nix te maken met dit stukje. Kijkeens wat er staat op regel 7 van inloggen.php ?

Verwijderd

Topicstarter
Het heeft daar wel mee te maken want als ik het oude stuk weer terug zet dan werkt ie wel.
En het is niet dat ik de </form> tag niet heb neergezet, want ook zonder die submit alles.
Je krijgt er alleen maar een extra <br> van meer niet. ;)

  • RdeTuinman
  • Registratie: Mei 2001
  • Laatst online: 16-08 07:25
Nou ben ik soms wel eens eigenwijs :P, maar post regel 1 t/m 10 eens van inloggen.php. Waarschijnlijk gebeurt er eerst een echo, waarna er een cookie gezet gaat worden oid. Je hebt het tenslotte over een cookie in je topictitel...

Verwijderd

Topicstarter
Ja hij geeft idd dus die cookie error.

Hier maar even voor de duidelijkheid het hele bestand, al heb ik daar niets aan veranderd behalve dan dat stuk wat ik hierboven heb gepost.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
<html>
<head>
<link href="../css/style.css" rel=StyleSheet type=text/css>
<title>bla</title>
</head>
<body bgcolor="#262223">
<?

include "config.php";

mysql_connect("$host", "$usr", "$ww") or die("Connectie met Database mislukt");
mysql_select_db("$db") or die("Fout bij het selecteren van de database");

if ($HTTP_COOKIE_VARS["gebruikersnaam"] != "")
{
    echo "<h3>Al ingelogd</h3>";
    echo "Je bent al ingelogd, nog een keer inloggen is niet nodig";
}
else
{
    if ($inloggen)
    {
        $gebruikersnaam = trim("$gebruikersnaam");
        $wachtwoord = trim("$wachtwoord");

        if (!$gebruikersnaam || !$wachtwoord)
        {
            echo "<h3>Inloggen &rsaquo; Fout</h3>";
            echo "Je hebt je gebruikersnaam of wachtwoord niet ingevuld, <a href=\"javascript:history.go(-1)\">Ga terug</a>";
            exit;
        }
        $select_lid = "SELECT * FROM leden WHERE gebruikersnaam='$gebruikersnaam'";
        $query_lid = mysql_query($select_lid);
        $bestaat_lid = mysql_num_rows($query_lid);
        $list_lid = mysql_fetch_object($query_lid);

        if ($bestaat_lid == "0")
        {
            echo "<h3>Inloggen &rsaquo; Fout</h3>";
            echo "Deze gebruikersnaam bestaat niet, <a href=\"javascript:history.go(-1)\">Ga terug</a>";
            exit;
        }
        
        if ($list_lid->wachtwoord != "$wachtwoord")
        {
            echo "<h3>Inloggen &rsaquo; Fout</h3>";
            echo "Het wachtwoord klopt niet, <a href=\"javascript:history.go(-1)\">Ga terug</a>";
            exit;
        }
        else
        {
            setcookie("gebruikersnaam", "$gebruikersnaam", time() +604800, "/");

            echo "<h3>Inloggen &rsaquo; Ingelogd</h3>";
            echo "Je bent succesvol ingelogd als <b>$gebruikersnaam</b>!";
        }           
    }
    else
    {
        echo "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" style=\"border-collapse: collapse\" width=\"100%\" bordercolor=\"#000000\">";
            echo "<tr>";
            echo "<td width=\"100%\" style=\"border-style: solid; border-width: 1\" background=\"../images/bar.gif\">&nbsp;<b>Log in :</b>";
            echo "</td></tr>";
            echo "<tr>";
            echo "<td width=\"100%\" style=\"border-style: solid; border-width: 1\" bgcolor=\"#333333\">";
            echo "<table border=\"0\" cellpadding=\"2\" style=\"border-collapse: collapse\" width=\"100%\">";
            echo "<tr>";
            echo "<td colspan=\"2\">Please <font color=\"#FF9933\">complete</font> the form below in order to log in.</td>";
            echo "</tr>";
            echo "<tr>";
            echo "<td width=\"7%\">&nbsp;</td>";
            echo "<td width=\"83%\">&nbsp;</td>";
            echo "</tr>";
            echo "<form action=\"$PHP_SELF\" method=\"post\">";
            echo "<tr>";
            echo "<td width=\"7%\"><font color=\"#FF9933\">Username</font>:</td>";
            echo "<td width=\"83%\">";
            echo "<input type=\"text\" name=\"gebruikersnaam\">";
            echo "</td></tr>";
            echo "<tr>";
            echo "<td width=\"7%\"><font color=\"#FF9933\">Password</font>:</td>";
            echo "<td width=\"83%\">";
            echo "<input type=\"text\" name=\"wachtwoord\">";
            echo "</td></tr>";
            echo "<tr>";
            echo "<td width=\"7%\">&nbsp;</td>";
            echo "<td width=\"83%\">";
            echo "<input type=\"submit\" name=\"inloggen\" value=\"Log in\" class=\"button\">";
            echo "</td></tr>";
            echo "</table>";
            echo "</td></tr>";
            echo "</table>";
    }
}

?>
</body>
</html>

  • RdeTuinman
  • Registratie: Mei 2001
  • Laatst online: 16-08 07:25
Mijn vermoeden was iig juist. Op regel 52 staat setcookie(). Deze mag niet vooraf gegaan worden door echo's of andere headers.

Zie hiervoor ook http://www.php.net/manual/en/function.setcookie.php

Toch is het bijzonder vreemd dat het eerst wel zou werken. Er wordt tenslotte altijd al die eerste 6 regels afgedrukt, dus kun je nooit een setcookie uitvoeren.

Is het niet stiekum zo, dat dat script op een andere server draait, waar een andere error_reporting staat ingesteld ?

Verwijderd

Topicstarter
Nee, er staat niks op een andere server.
Zou je het misschien even voor mij kunnen editten zodat ik het even test wat jij dus denkt dat goed is?

  • RdeTuinman
  • Registratie: Mei 2001
  • Laatst online: 16-08 07:25
Je zou het even heel simpel kunnen testen door de eerste 6 regels te verwijderen. OK, dan klopt de hele HTML-opzet niet meer, maar dan is er iig geen output meer vóór de setcookie().

Er mag dus helemaal nix vóór de <? staan (ook geen enter of spatie oid)

Als je dan geen foutmelding meer krijgt, weet je iig wat het probleem is. Daarna moet het nog netjes opgelost worden ;)

Verwijderd

Topicstarter
Idd, het werkt nu gewoon! :)

Alleen nu de vraag, hoe kan ik dan in die pagina mijn CSS file invoegen als ik geen tags voor <? mag plaatsen?

Verwijderd

Het gedeelte van setcookie() gewoon bovenaan plaatsen en het gedeelte van de form onder de html tags.

Verwijderd

Topicstarter
Hmm, schiet me helemaal lek. :P

Maareh, heeft die setcookie dan niet te maken met die else?

Trouwens, bedankt voor de hulp al, ik ben al veel verder gekomen met het probleem dan hiervoor!

  • RdeTuinman
  • Registratie: Mei 2001
  • Laatst online: 16-08 07:25
*D

In principe zou je nu voor elk stukje echo (dus bij jou bij elke if en elke else) die 6 regels moeten neerzetten, behalve vóór die setcookie. Daar moet het dus net na komen te staan.

Dit kun je het beste doen met een include('htmlhead.inc.php') bijvoorbeeld.
Dan hou je de code altijd hetzelfde, en is wat overzichtelijker. (in htmlhead.inc.php zet je dan dus die 6 regels)

Suc6, nu ga ik echt ff :z

Verwijderd

Topicstarter
Hmmm, dat gaat me echt te ver. ;)

Bedankt alvast en truste!

Verwijderd

simpelste oplossing:
PHP:
1
<?include "config.php";mysql_connect("$host", "$usr", "$ww") or die("Connectie met Database mislukt");mysql_select_db("$db") or die("Fout bij het selecteren van de database");if ($HTTP_COOKIE_VARS["gebruikersnaam"] != ""){      echo "<html><head><link href=\"../css/style.css\" rel=StyleSheet type=text/css><title>bla</title></head><body bgcolor=\"#262223\">";      echo "<h3>Al ingelogd</h3>";      echo "Je bent al ingelogd, nog een keer inloggen is niet nodig";}if (empty( $HTTP_COOKIE_VARS['gebruikersnaam'] ){      if ($inloggen)      {            $gebruikersnaam = trim("$gebruikersnaam");            $wachtwoord = trim("$wachtwoord");            if (!$gebruikersnaam || !$wachtwoord)            {                  echo "<html><head><link href=\"../css/style.css\" rel=StyleSheet type=text/css><title>bla</title></head><body bgcolor=\"#262223\">";                  echo "<h3>Inloggen &amp;rsaquo; Fout</h3>";                  echo "Je hebt je gebruikersnaam of wachtwoord niet ingevuld, <a href=\"javascript:history.go(-1)\">Ga terug</a>";                  exit;            }            $select_lid = "SELECT * FROM leden WHERE gebruikersnaam='$gebruikersnaam'";            $query_lid = mysql_query($select_lid);            $bestaat_lid = mysql_num_rows($query_lid);            $list_lid = mysql_fetch_object($query_lid);            if ($bestaat_lid == "0")            {                  echo "<html><head><link href=\"../css/style.css\" rel=StyleSheet type=text/css><title>bla</title></head><body bgcolor=\"#262223\">";                  echo "<h3>Inloggen &amp;rsaquo; Fout</h3>";                  echo "Deze gebruikersnaam bestaat niet, <a href=\"javascript:history.go(-1)\">Ga terug</a>";                  exit;            }                        if ($list_lid->wachtwoord != "$wachtwoord")            {                  echo "<html><head><link href=\"../css/style.css\" rel=StyleSheet type=text/css><title>bla</title></head><body bgcolor=\"#262223\">";                  echo "<h3>Inloggen &amp;rsaquo; Fout</h3>";                  echo "Het wachtwoord klopt niet, <a href=\"javascript:history.go(-1)\">Ga terug</a>";                  exit;            }            else            {                  setcookie("gebruikersnaam", "$gebruikersnaam", time() +604800, "/");                     echo "<html><head><link href=\"../css/style.css\" rel=StyleSheet type=text/css><title>bla</title></head><body bgcolor=\"#262223\">";                  echo "<h3>Inloggen &amp;rsaquo; Ingelogd</h3>";                  echo "Je bent succesvol ingelogd als <b>$gebruikersnaam</b>!";            }                        }      else      {                 echo "<html><head><link href=\"../css/style.css\" rel=StyleSheet type=text/css><title>bla</title></head><body bgcolor=\"#262223\">";                echo "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" style=\"border-collapse: collapse\" width=\"100%\" bordercolor=\"#000000\">";                echo "<tr>";                echo "<td width=\"100%\" style=\"border-style: solid; border-width: 1\" background=\"../images/bar.gif\">&amp;nbsp;<b>Log in :</b>";                echo "</td></tr>";                echo "<tr>";                echo "<td width=\"100%\" style=\"border-style: solid; border-width: 1\" bgcolor=\"#333333\">";                echo "<table border=\"0\" cellpadding=\"2\" style=\"border-collapse: collapse\" width=\"100%\">";                echo "<tr>";                echo "<td colspan=\"2\">Please <font color=\"#FF9933\">complete</font> the form below in order to log in.</td>";                echo "</tr>";                echo "<tr>";                echo "<td width=\"7%\">&amp;nbsp;</td>";                echo "<td width=\"83%\">&amp;nbsp;</td>";                echo "</tr>";                echo "<form action=\"$PHP_SELF\" method=\"post\">";                echo "<tr>";                echo "<td width=\"7%\"><font color=\"#FF9933\">Username</font>:</td>";                echo "<td width=\"83%\">";                echo "<input type=\"text\" name=\"gebruikersnaam\">";                echo "</td></tr>";                echo "<tr>";                echo "<td width=\"7%\"><font color=\"#FF9933\">Password</font>:</td>";                echo "<td width=\"83%\">";                echo "<input type=\"text\" name=\"wachtwoord\">";                echo "</td></tr>";                echo "<tr>";                echo "<td width=\"7%\">&amp;nbsp;</td>";                echo "<td width=\"83%\">";                echo "<input type=\"submit\" name=\"inloggen\" value=\"Log in\" class=\"button\">";                echo "</td></tr>";                echo "</table>";                echo "</td></tr>";                echo "</table>";      }}?></body></html>?>

Tis niet de meest efficiente en logische, maar anders moet je hele script verbouwd worden. Dus zo werkt het ook ;).

Verwijderd

Topicstarter
Jij roelt!

Alleen nog wel een parse-error in regel 14 staat er.
Ken em ff niet vinden.

Verwijderd

moet je msschien ff de " weghalen en opnieuw typen. IE kan zulke tekens nog wel es verneuken...

Verwijderd

Topicstarter
Fuck ik kan em in niet 1 editor net zo pasten zoals hierboven.
Of ik krijg dat gekut met automatische terugloop, of er is wel weer wat anders.

Kun je hem misschien ff in een PHP file zetten en ff naar me mailen at mzoomers@cistron.nl?

Thanks! :D

  • creative8500
  • Registratie: September 2001
  • Laatst online: 03-01 16:54

creative8500

freedom.

Dat vind ik ook altijd zo irri hier dat je niet kunt copy-pasten ;( Het wordt allemaal zo lastig op deze manier.

Verwijderd

de simpelste oplossing was volgens mij output buffering, al is dat zeker niet de mooiste...

dan zet je <?ob_start()?> helemaal bovenaan en <?ob_end_flush()?> helemaal onderaan en de output wordt eerst in een buffer gezet en daarna pas naar de browser gestuurd, de cookieheaders hebben er dan dus helemaal geen last van...

Verwijderd

Topicstarter
Hmm, ik krijg die bovenstaande code maar niet in 1 keer gepaste in een editor.
Hoe kan ik dat het beste aanpakken? :?

Verwijderd

ik heb de originele txt niet meer, dus als ik moet copy/pasten komt het op hetzelfde neer. Sorry, je zal gewoon ff die paar extra regels hieruit moeten kopieren en in je oude file moeten zetten.
de simpelste oplossing was volgens mij output buffering, al is dat zeker niet de mooiste...
dan zet je <?ob_start()?> helemaal bovenaan en <?ob_end_flush()?> helemaal onderaan en de output wordt eerst in een buffer gezet en daarna pas naar de browser gestuurd, de cookieheaders hebben er dan dus helemaal geen last van...
Dat is géén oplossing. Bij het maken van een script moet je er gewoon rekening mee houden dat cookies als eerste geset worden. Het is altijd mogelijk om dit te doen. ob_start werkt weliswaar, maar vertraagd de boel ontzettend.

Verwijderd

Topicstarter
Op dinsdag 07 mei 2002 00:35 schreef Frank83 het volgende:
moet je msschien ff de " weghalen en opnieuw typen. IE kan zulke tekens nog wel es verneuken...
Welke en waar moet ik die weghalen?
Ik heb alles precies zoals hierboven in een TXT gedaan (gerenamed naar PHP uiteraard) en geupload.
Ik krijg die verdomde parse error op line 12 alleen niet weg! :'(

Verwijderd

if (isempty( $HTTP_COOKIE_VARS['gebruikersnaam'] ) )

Verwijderd

Topicstarter
Heb em al, het moest dit zijn i.p.v. bovenstaande:
code:
1
if (empty( $HTTP_COOKIE_VARS['gebruikersnaam'] ) )

Allemaal bedankt voor de hulp! ;)

Verwijderd

Topicstarter
Edit, heb et alweer. ;)

Bedankt allemaal! :D
Pagina: 1