Avatar billede interkriller Nybegynder
04. januar 2004 - 15:21 Der er 10 kommentarer og
2 løsninger

Opsætning af login script

Jeg har et script som (nogenlunde virker) men det er virkeligt elendigt opbygget, så måske der er en ekspert derude der har lyst til at bidrage lidt!

Det svar jeg gerne vil have er den mest hensigtsmæssige rækkefølge, at tjekke for div.

(og lille tillægsspg. hvordan sikrer jeg at feltet e-mail indeholder den korrekte syntax)

jeg vil gerne tjekke for:
begge password felter i opret bruger indeholder det samme.
at alle felterne i opret bruger er udfyldt.
tjekker om brugeren allerede eksisterer i DB.

Så vil jeg have:
En opret bruger funktion
En slet bruger funktion
En rediger bruger funktion
at det fungerer vha SESSIONS



KODE:


<?
// tester om brugeren er logget ind
$brugernavn = $_POST['brugernavn'];
if ((($brugernavn=="") && ($_SESSION['brugernavn']=="")) || ($slet == "udfyldt") || ($navi=="opret") || ($navi=="logud"))
{
$_SESSION[brugernavn] = "";
// udskriver login og opret ny bruger form
?>
                  <form name="login" method="POST" action="<? $_server['PHP_SELF'] ?>">
                    <input name="brugernavn" type="text" size="16">
                    <input name="password" type="password" size="16">
                    <input type="submit" class="knapper" Value="Log ind">
                  </form>
                  <form name="login" method="POST" action="<? $_server['PHP_SELF'] ?>">
                    <input type="hidden" name="navi" value="opret">
                                      <input type="submit" class="knapper" Value="Opret ny bruger" size="5">
                  </form>
<?
}
// tester om brugernavn og password matcher en bruger i databasen
else if(!$_SESSION['brugernavn']=="")
{
$query = "SELECT * FROM bruger WHERE brugernavn = '$brugernavn'";
    $result = mysql_query($query) or die ("Fejl i forespørgsel: $query. " . mysql_error());
    $row = mysql_fetch_object($result);
    ?>
    <img src="image/persimage/<? echo $row->profilbillede; ?>" width="100" height="100"><br>
  <?
echo "Velkommen, " . $_SESSION['brugernavn'];
    ?>
    </div>
    <p><div class="txt">
    <a href="<? $_server['PHP_SELF'] ?>?navi=rediger" STYLE="text-decoration: none;">Redigér profil</a>
    <a href="<? $_server['PHP_SELF'] ?>?navi=logud" STYLE="text-decoration: none;">Log ud</a>
    <?
    }
else
{
        $query = "select * from bruger";
        $result = mysql_query($query);
        while($field_data = mysql_fetch_array($result))
        {
            if((($brugernavn == $field_data[1]) && ($password == $field_data[2])) || (!$_SESSION['brugernavn'] == ""))
            {
              $valid_bruger = true;
              $_SESSION['brugernavn'] = $field_data[1];

            }
        }
        if(!$valid_bruger)
        {
        ?>
<div class="stortxt">
        <?
// hvis forkert brugernavn/password er indtastet
        echo "Loginfejl: Forkert brugernavn/adgangskode";
        echo "<br><a href=$PHP_SELF>Tilbage</a>";
        ?>
</div>
        <?
        }
        // hvis brugernavn/password er korrekt
    else if(!$_SESSION['brugernavn']=="")
            {
// udskriver velkomsthilsen
  $query = "SELECT * FROM bruger WHERE brugernavn = '$brugernavn'";
    $result = mysql_query($query) or die ("Fejl i forespørgsel: $query. " . mysql_error());
    $row = mysql_fetch_object($result);
    ?>
    <img src="image/persimage/<? echo $row->profilbillede; ?>" width="100" height="100"><br>
    <?
    echo "Velkommen, " . $_SESSION['brugernavn'];
    ?>
    </div>
    <p><div class="txt">
    <a href="<? $_server['PHP_SELF'] ?>?navi=rediger" STYLE="text-decoration: none;">Redigér profil</a>
    <a href="<? $_server['PHP_SELF'] ?>?navi=logud" STYLE="text-decoration: none;">Log ud</a>
    <?
    }
}
?>


Som i kan se er koden meget rodet, men den virker.
Det jeg vel egentlig har brug for, er en ekspert oprydning :)
Avatar billede interkriller Nybegynder
04. januar 2004 - 15:24 #1
og foresten vil jeg også gerne høre hvordan jeg skjuler SESSION, lige nu viser adressebaren "PHPSESSID=3d8011b3785f7455ee4f031d40b6eaef"

Svar kun hvis det er hurtigt gjort ellers opretter jeg nyt spg
Avatar billede googolplex Novice
04. januar 2004 - 15:27 #2
Til det sidste:

ini_set('session.use_trans_sid', '0');

Men så virker det ikke længere hos folk der ikke understøtter cookies!

Du kan ændre PHPSESSID til 'sid' (pænere!):

ini_set('session.name', 'sid');
Avatar billede interkriller Nybegynder
04. januar 2004 - 15:30 #3
Ok tak for det, smider et par point til dig, når jeg har fået besvaret hovedspg
Avatar billede sukos Juniormester
05. januar 2004 - 10:44 #4
At skrive
<?php
ini_set('session.use_trans_sid', '0');
?>
vil ikke ha' nogen virkning.
Skal sættes i en .htaccess eller i php.ini


Hvis du lader feltet i DB'en være unique, vil din query fejle hvis du vil indsætte et nyt navn som allerede findes.

For at tjekke om to felter er ens, er det jo blot at sammenligne,
if($_POST["felt1] == $_POST["felt2"]) {
.......

For at tjekke om et felt er tomt, kan du bruge trim()
if(trim($_POST["felt"]) == "") {
......
Avatar billede sukos Juniormester
05. januar 2004 - 10:45 #5
Avatar billede interkriller Nybegynder
05. januar 2004 - 11:42 #6
Ja, jeg har egenligt heller ikke noget problem med at tjekke om f.eks 2 felter er ens eller det andet.

Mit spg går hovedsageligt ud på hvordan man opbygger et hensigtsmæssigt opret/login/rediger/slet script.

Mit ovenstående script er en stor gang rod :(
Avatar billede sukos Juniormester
05. januar 2004 - 11:57 #7
hmm, ja, jeg ville nok blot ha' en side, som først tjekker om man er logget ind, og derefter tjekker om f.eks en get-var er sat, og så include den fil, f.eks "nybruger.php"
Og så lade alle submit's køre på en fil, hvor der også tjekkes for login, og laver div. database query's
Avatar billede interkriller Nybegynder
05. januar 2004 - 12:05 #8
Du har ikke et eksempel liggende vel?
Avatar billede sukos Juniormester
05. januar 2004 - 12:14 #9
hmm, nej ikke så'n lige.
Andet end jeg bruger selv noget lignende på showsource.dk
Altså man er bruger, og kan rette i diverse ting.

Og her kan du så kikke lidt i koden.
http://www.showsource.dk/bruger.php?show=source

I dropdown-boksen er der filer som starter med user_ som includes alt efter om en GET er sat.
Avatar billede googolplex Novice
05. januar 2004 - 15:56 #10
sukos:

ini_set('session.use_trans_sid', '0');

Virker fint hos mig, hvordan kan dette være ?
Avatar billede interkriller Nybegynder
05. januar 2004 - 21:40 #11
Ok tak for hjælpen, jeg tjekker det ud....

Smid et svar, jeg giver også lidt til googolplex
Avatar billede sukos Juniormester
07. januar 2004 - 09:24 #12
googolplex -> æh, ved ikke lige du! :O)
Men et link til en infofil ville jeg da gerne se :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