Avatar billede kasperbje Nybegynder
23. oktober 2009 - 13:39 Der er 36 kommentarer og
1 løsning

Hjælp med lille login script.

Hej jeg mangler lidt hjælp med mit login system jeg har et login og det virker fint men den skriver denne error:

Notice: Use of undefined constant myusername - assumed 'myusername'

Alle steder hvor jeg sætter den til og skrive ens brugernavn ned på siden? Jeg burger denne kode til det:

<?php $_SESSION[myusername] ?>



Ps. Jeg mangler også en opret.php
Avatar billede Slettet bruger
23. oktober 2009 - 13:49 #1
Jeg ved ikke helt, hvad du vil opnå, men for at lave den kode der korrekt, skal det være sådan:

<?php
session_start();
echo $_SESSION['myusername'];
?>
Avatar billede kasperbje Nybegynder
23. oktober 2009 - 14:31 #2
Grunden til jeg ikke bruger session_start(); er at sessionen er startet øverst i filen, og hvis jeg ændre:

$_SESSION[myusername]

Til:

echo $_SESSION['myusername'];

Så der hvor brugernavnet skal komme frem er der bare helt blankt ?
Avatar billede dkfire Nybegynder
23. oktober 2009 - 15:17 #3
Når du har med arrays, så som $_SESSION, så SKAL du bruge ' rundt om navnet på elementet, hvis ikke der er numerisk eller en variabel som angiver elementet.

Dvs udover du har fejl på den side du snakker om her, så har du sikkert også fejl på den side som sætter $_SESSION['myusername'].
Avatar billede kasperbje Nybegynder
23. oktober 2009 - 15:25 #4
Nej det ser sådan her ud:

session_register('myusername');
session_register('mypassword');
header("location:index.php");


Og den har de der '
Avatar billede dkfire Nybegynder
23. oktober 2009 - 15:40 #5
Ja men er bruger du en meget gammel funktion som slet ikke er nødvendig, samt du giver ikke nogen værdi til din session der.
Hvordan kan du forvente at din indeholder noget når du ikke siger den skal ?
Avatar billede kasperbje Nybegynder
23. oktober 2009 - 15:42 #6
Jeg har jo en masse filer jeg ved ikke helt hvordan det hænger sammen...

Er der noget i den her kode:

<?php
ob_start();
if(empty($_POST['myusername']) || empty($_POST['mypassword']))
{
echo "<META HTTP-EQUIV=\"refresh\" content=\"0;URL=login_fail.php\">";
}

include("config.php");
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];

$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

$sql="SELECT * FROM main WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

$count=mysql_num_rows($result);

if($count>0)
{
session_register('myusername');
session_register('mypassword');
header("location:index.php");
}
else
{
echo "<META HTTP-EQUIV=\"refresh\" content=\"0;URL=login_fail.php\">";
}

ob_end_flush();
?>
Avatar billede dkfire Nybegynder
23. oktober 2009 - 22:18 #7
Hvis du ikke ved hvordan koden hænger sammen, hvordan ved du så at den virker/ikke virker ?

Før vi overhoved begynder at rette på noget kode, så bør du som minimum sætte dig ind i koden og hvordan den virker.
Hvis du har taget koden fra et eksempel og har læst hele forklaringen til dette eksempel, og du stadig ikke forstår kode, så bør du finde et andet eksempel.

En ting er dog sikker, den kode du viser der er ikke særlig god. Den bruger gamle funktioner, den blander header funktionen med udskrift af noget html kode, samt det ser ud til at du gemmer kodeord som ren tekst i databasen.
Du bør aldrig gemme kodeord som ren tekst, det skal krypters på en eller anden måde.
Avatar billede kasperbje Nybegynder
24. oktober 2009 - 21:47 #8
Jeg ved den virker har testet den se denne tråd:
http://www.udvikleren.dk/PHP/Thread.aspx/6/30018/
Avatar billede kasperbje Nybegynder
24. oktober 2009 - 22:29 #9
Jeg behøver ikke og krypte det ?? Det bliver gemt på en mySQL database som jeg kun har adgang til, plus det behøver heller ikke være enorm sikkert.
Avatar billede dkfire Nybegynder
25. oktober 2009 - 01:00 #10
Hvis det ikke skal være sikkert, så håber jeg ikke du har det liggende på nettet!

At det "virker" er sikkert rigtig nok, men hvis du ikke ved hvordan det hænger sammen hvordan kan du så rette i det ?
Jeg går da også ud fra at der må være nogle problemer med det siden du stiller et spørgsmål her.

Nu har jeg så læst den anden tråd.
Som det første må jeg sige at du kun holde dig til EN tråd ad gangen.
Det er spild af min og andres tid hvis du har flere spørgsmål kørerende om det samme emne!

Et ting er sikkert, den person som hjælper dig der er ikke klar over hvordan man arbejder med session's. Funktionen session_register er en død funktion som ikke virker i fremtiden:
http://dk2.php.net/session_register
Når det så er sagt, så gemmer session_register ikke nogen værdi, den laver "kun" en global session variabel. Dvs når du bruger denne funktion får du ikke dit brugernavn eller password med over på andre sider.

At arbejde med session er som at arbejde med et helt normalt array, der er kun det specielle at det overføres mellem sidekald.
Dvs du kan erstatte session_register med:
$_SESSION['myusername'] = $myusername;
$_SESSION['mypassword'] = $mypassword;


Så kan din kode blive et noget ala:
<?php
ob_start();
if(empty($_POST['myusername']) || empty($_POST['mypassword']))
{
  header("Location: login_fail.php");
  exit();
}

include("config.php");
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];

$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

$sql="SELECT id FROM main WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql) or die(mysql_error());

$count=mysql_num_rows($result);

if($count>0)
{
  $_SESSION['myusername'] = $myusername;
  $_SESSION['mypassword'] = $mypassword;
  header("location: index.php");
  exit();
}
else
{
  header("Location: login_fail.php");
  exit();
}

ob_end_flush();
?>


Håber det bringer dig videre.
Avatar billede dkfire Nybegynder
25. oktober 2009 - 01:06 #11
Lige en lille ting til.
Når du bruger session_start(), skal den komme som det første i din php fil. Der må ikke overhoved have været noget før session_start().
Dvs intet html eller tomme linjer, kun <?php og så session_start();.
Avatar billede kasperbje Nybegynder
25. oktober 2009 - 02:33 #12
Oka tak men hva så når jeg skal tjekke om du er logget ind ? Altså på de beskyttet sider ? Lige nu ser min index sådan her ud:

<?php
session_start();
if(session_is_registered('myusername'))
{
    include("index_member.php");
}
else
{
    include("index_gast.php");
}

?>


Men når jeg logger ind incuder den index_gast.php ? Så det virker ikke mere hva skal jeg så bruge ?
Avatar billede dkfire Nybegynder
25. oktober 2009 - 10:46 #13
Som jeg skrev i min sidste kommentar, så arbejder du med $_SESSION som et hvert andet array.
For at tjekke som et array element eller en variabel er sat kan du bruge isset() funktionen:
http://dk2.php.net/isset

Og dette bliver den sidste kommentar fra min side, sålænge du har den anden tråd kørende.
Du bør læse reglerne for eksperten.dk!
Avatar billede kasperbje Nybegynder
25. oktober 2009 - 17:36 #14
I den anden tråd fik jeg hjælp til og lave mit login system men han kan ikke hjælpe mig med det her så jeg spurgte et andet sted ?? Det kan jeg da ikke se noget galt i ? Nå men jeg kan ikke få det til og virke....
Avatar billede dkfire Nybegynder
25. oktober 2009 - 18:03 #15
Problemet ligger i at du stadig har tråden kørende og du spørg jo om det samme her som du også spørger om der.

Jeg har givet dig løsningen på hvordan du kan få det til at virke.
Hvis det ikke gør, så bliver du nød til at vise hvad du gør lige nu. Jeg gider ikke lege gætteleg.
Avatar billede kasperbje Nybegynder
25. oktober 2009 - 18:09 #16
Så er tråden lukket. Altså jeg har fået min index.php til og se sådan ud:

<?php
session_start();
if (isset($var))
{
    include("index_member.php");
}
else
{
    include("index_gast.php");
}
?>


Og min checklogin.php:

<?php
ob_start();
if(empty($_POST['myusername']) || empty($_POST['mypassword']))
{
  header("Location: login_fail.php");
  exit();
}

include("config.php");
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];

$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

$sql="SELECT id FROM main WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql) or die(mysql_error());

$count=mysql_num_rows($result);

if($count>0)
{
  $_SESSION['myusername'] = $myusername;
  $_SESSION['mypassword'] = $mypassword;
  $var = '';
  header("location: index.php");
  exit();
}
else
{
  header("Location: login_fail.php");
  exit();
}

ob_end_flush();
?>


Med det vil ikke virke og så ved jeg ikke hva jeg skal gøre ?
Avatar billede dkfire Nybegynder
25. oktober 2009 - 18:21 #17
Så har jeg et par spørgsmål ( Husk det er hjælp til selv hjælp )

Hvad er meningen med denne linje:
if (isset($var))

$var er jo IKKE en session variable og bliver ikke ført over mellem sidekald.
Avatar billede kasperbje Nybegynder
25. oktober 2009 - 18:23 #18
Hva skal jeg så gøre ?
Avatar billede dkfire Nybegynder
25. oktober 2009 - 18:24 #19
Hint: Det er kun elementer i $_SESSION arrayet som kan bruges på tværs af sidekald.
Avatar billede kasperbje Nybegynder
25. oktober 2009 - 18:28 #20
Jeg ved virkelig ikke hva jeg skal gøre ?? Jeg har prøvet alt muligt ...
Avatar billede dkfire Nybegynder
25. oktober 2009 - 18:41 #21
Igen hvad har du prøvet ?
Du mangler lige en session_start(); øverst i din checklogin.php
Avatar billede kasperbje Nybegynder
25. oktober 2009 - 18:45 #22
Har også added jeg har prøvet og få den til:

if (isset($myusername)) = Virker ikke
if (isset(myusername)) = Virker ikke
if (isset($var)) = Virker ikke
if (isset($_SESSION['myusername'])) = Virker ikke

Jeg aner ikke hva jeg skal gøre ?
Avatar billede kasperbje Nybegynder
25. oktober 2009 - 18:46 #23
Jov der YES

if (isset($_SESSION['myusername'])) = Virker
Avatar billede kasperbje Nybegynder
25. oktober 2009 - 18:48 #24
Tak for hjælpen. :)

Lige en ting mere ved du hva der er glat her:
<?php

ob_start();

if(empty($_POST['myusername']) || empty($_POST['mypassword']))

{
include("Baade_Intast_Brugernavn_Og_Kode.php");
}

else

{
include("forkert_kode_eller_brugernavn.php");
}

ob_end_flush();

?>


Den includer Baade_Intast_Brugernavn_Og_Kode.php uanset hvad ?
Avatar billede dkfire Nybegynder
25. oktober 2009 - 18:57 #25
Nu ved jeg ikke lige om det er eksperten som har sat de ekstra linjeskift, men der skal ikke være linjeskift før dine { og else

Dernæst så ved jeg ikke lige hvad du forsøger på. Som din kode er nu, så undersøger du for om ENTEN myusername ELLER mypassword elementerne er tomme. Hvis en eller begge er tomme tages den først include.
Avatar billede kasperbje Nybegynder
25. oktober 2009 - 19:05 #26
Ja altså hvis en af dem er tomme skal man have avide at man skal udfylde dem begge men hvis ingen er tomme må man jo have forkert kode eller brugernavn
Avatar billede dkfire Nybegynder
25. oktober 2009 - 19:06 #27
Hvad sker der hvis du udfylder begge felter ?
Avatar billede kasperbje Nybegynder
25. oktober 2009 - 19:19 #28
Så skriver den forkert kode eller brugernavn ?

Den der kode jeg viste dig er login_fail.php
Avatar billede mikk4237880 Nybegynder
25. oktober 2009 - 20:48 #29
hvordan skriver man et script i en blå firkant ???

og vil gerne lige sende et link http://www.eksperten.dk/spm/890577 til et spørgsmål jeg har spurt om som igen gider at svare på
Avatar billede dkfire Nybegynder
25. oktober 2009 - 21:14 #30
En beskrivelse over de tags som kan bruges her på eksperten kan du læse om her:
http://www.eksperten.dk/guide/1325

Jeg er ikke helt med på hvad du vil have den if-sætning til at gøre og hvad der er galt med det lige nu.
Avatar billede dkfire Nybegynder
25. oktober 2009 - 21:30 #31
mikki4237880:
Det er bestemt ikke særlig pænt at lave reklame for egne spørgsmål i andres spørgsmål. Vis hensyn.
Avatar billede kasperbje Nybegynder
25. oktober 2009 - 21:52 #32
Øhhm det ligemeget har fundet på noget... Men tak for hjælpen :D
Avatar billede mikk4237880 Nybegynder
25. oktober 2009 - 21:54 #33
for det første så var det fordi der ikke Tak!! fordet andet så var det kun fordi der ikke var nogen som gad at svare på mit spørgsmål. og for det tredje så kender jeg ham som har lavet denne tråd og han har ikke noget imod det.
Avatar billede mikk4237880 Nybegynder
25. oktober 2009 - 21:57 #34
ups blandede det lidt:

for det første Tak!! fordet andet så var det kun fordi der ikke var nogen som gad at svare på mit spørgsmål. og for det tredje så kender jeg ham som har lavet denne tråd og han har ikke noget imod det.
Avatar billede mikk4237880 Nybegynder
25. oktober 2009 - 22:02 #35
lol viste man kunne brugedet på den måde men ja man lære jo noget nyt hver dag
Avatar billede mikk4237880 Nybegynder
25. oktober 2009 - 22:02 #36
*ikke
Avatar billede dkfire Nybegynder
25. oktober 2009 - 22:17 #37
Jeg er sådan set ligeglad med hvordan jeres forhold er til hinanden, det er stadig ikke tilladt at reklamere for egne spørgsmål i andres. Sådan er reglerne.
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