Avatar billede rasmus_a Nybegynder
18. november 2004 - 08:20 Der er 69 kommentarer og
1 løsning

Login evt. med MySQL

Hej

Jeg er ny med MySQL men jeg er ikke sikker på at dette kræves til denne opgave. Men det vil nok væren en fordel.
Jeg skal bruge et lille "login script". Man skal kunne, første gang man besøger siden, skulle kunne indtaste sit Navn, Email og Password. Når så man kommer ind på siden anden gang skal siden kunne genkende brugeren og skrive "hej Navn" - altså også med cookie.
Navnet skal være en global variabel så man kan skrive f.eks. $navn og få printet Navnet alle steder på siden. Kan nogle i det mindste pege mig i den rigtige retning? Jeg finder kun scripts med sikkerhedsbeskyttelse etc - men det er det her jo slet ikke. Det er meget enklere.
Tak
Avatar billede jaw Nybegynder
18. november 2004 - 09:06 #1
Tjah, kan da lave lidt til dig hvis du er med på det? Først skal du lave en side med de forms (info) du vil have om brugeren. "Action" på de forms skal så være f.eks. opret.php

Opret.php:
<?PHP

if(isset($_POST['submit']) && $_POST['submit'] != "") {  //kræver at "knappen" på din form-side hedder submit

$navn = $_POST['navn'];
$alder = $_POST['alder'];
$mail = $_POST['mail'];

$q = if(mysql_query("INSERT INTO brugere (navn, mail, alder) VALUES('$navn','$alder','$mail')")) {
  //brugeren blev oprettet
} else {
  //brugeren blev ikke oprettet
}

?>

Feltet mail og/eller brugernavn i din database skal så være "unikt" så du ikke får flere ens brugere...
Avatar billede rasmus_a Nybegynder
18. november 2004 - 09:11 #2
tak! giv mig lige et par minutter til at tjekke :)
Avatar billede jaw Nybegynder
18. november 2004 - 09:15 #3
Lige et par småting efter jeg har kigget på det :)

$q = <- skal slettes
Avatar billede rasmus_a Nybegynder
18. november 2004 - 09:17 #4
ok lige et par spørgsmål - jeg tilføjer selve mysql_connect til opret.php ik?
ellers bare en form så har opret.php i "action" feltet?
og til sidst bruger SELECT til at hente indholdet ud af databasen (selvom jeg nok skal have lidt hjælp til dét)
Avatar billede jaw Nybegynder
18. november 2004 - 09:19 #5
Jow, du skal selvf. lige connecte til databasen øverst i opret.php.

Det med action, mener jeg:
<form action="opret.php" method="post">
//alle dine forms her
<input type="submit" name="submit" value="Opret">
</form>

Og det med SELECT tager vi når du har fået din bruger-opret til at funke :)
Avatar billede rasmus_a Nybegynder
18. november 2004 - 09:21 #6
hehe, ok! jeg forsøger :) giv mig lige lidt tid.. :)
Avatar billede rasmus_a Nybegynder
18. november 2004 - 09:30 #7
jeg tror jeg har formen og connet'en på plads. jeg har også valgt min database men hvordan vælger den tabel dataen skal gemmes i?

opret.php:
<?PHP

mysql_connect("localhost","user","pass");
mysql_select_db("dbname");

if(isset($_POST['submit']) && $_POST['submit'] != "") {  //kræver at "knappen" på din form-side hedder submit

$navn = $_POST['navn'];
$alder = $_POST['alder'];
$mail = $_POST['mail'];

if(mysql_query("INSERT INTO brugere (navn, mail, alder) VALUES('$navn','$alder','$mail')")) {
  //brugeren blev oprettet
} else {
  //brugeren blev ikke oprettet
}

?>
Avatar billede rasmus_a Nybegynder
18. november 2004 - 09:31 #8
connet'em = connect'en (mysql_connect)
Avatar billede jaw Nybegynder
18. november 2004 - 09:33 #9
Den tabel du skriver i, er i ovenstående tilfælde "brugere". Altså:

("INSERT INTO <tabel>(felt1, felt2, felt3) VALUES('værdi1', 'værdi2', 'værdi3')");
Avatar billede rasmus_a Nybegynder
18. november 2004 - 09:38 #10
ah ja - opretter scriptet så selv tabellen eller skal jeg gære det via admin siden?
Avatar billede rasmus_a Nybegynder
18. november 2004 - 09:41 #11
Parse error: parse error, unexpected T_VARIABLE in /var/www/html/login/opret.php on line 8

linie 8 er:
$navn = $_POST['navn'];
Avatar billede jaw Nybegynder
18. november 2004 - 09:42 #12
Det skal du selv gøre, med de felter du vil have...
Avatar billede rasmus_a Nybegynder
18. november 2004 - 09:46 #13
selvfølgelig, nu er jeg med - jeg har nemlig lavet en gæstebog der virker men der medfulgte der en txt fil jeg kunne uploade og som så satte tabellen op. Vil du lave den til mig?
Så kan jeg se hvordan det skal gøres til næste gang.
Avatar billede jaw Nybegynder
18. november 2004 - 09:47 #14
Kan jeg sagtens... Men må så lige vide, hvilke info du vil have om brugeren...?
Avatar billede rasmus_a Nybegynder
18. november 2004 - 09:49 #15
navn (et ord - må ikke være mere end et ord.)
email
password
Avatar billede rasmus_a Nybegynder
18. november 2004 - 09:53 #16
jeg ved godt du har skrevet alder istedet for password og det hlod jeg bare stå. så må alder bare stå for password i denne omgang :)
Avatar billede rasmus_a Nybegynder
18. november 2004 - 09:58 #17
hmm hvis det er let så ogå et ID nr som bare starter fra 1 af og så måske også tidspunktet for oprettelsen - men hvis du har lavet det andet så skipper vi det bare :)
Avatar billede jaw Nybegynder
18. november 2004 - 10:02 #18
Okey, har lavet den men id, brugernavn, adgangskode og mail:

DROP TABLE IF EXISTS `brugere`;
CREATE TABLE `brugere` (
  `id` int(11) NOT NULL auto_increment,
  `brugernavn` varchar(32) NOT NULL default '',
  `adgangskode` varchar(32) NOT NULL default '',
  `mail` varchar(32) NOT NULL default '',
  UNIQUE KEY `id` (`id`,`brugernavn`,`mail`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;
Avatar billede rasmus_a Nybegynder
18. november 2004 - 10:06 #19
skal jeg lave om i value'ene så? navn -> brugernavn etc?

har lige prøvet at køre scriptet og der er stadigvæk parse error (samme sted)
Avatar billede rasmus_a Nybegynder
18. november 2004 - 10:09 #20
nej, det er ikke samme sted. det er:

Parse error: parse error, unexpected $ in /var/www/html/login/opret.php on line 18

linie 18:
?>
Avatar billede jaw Nybegynder
18. november 2004 - 10:10 #21
Ja, du skal tilpasse så alle dine variabler passer. 

$brugernavn = $_POST['brugernavn']

$_POST['brugernavn'] svarer til det felt i dine forms, hvor brugeren indtaster sit brugernavn. Du skal lave den konvertering for alle de forms du har valgt at medtage.

$brugernavn bruger du så i din INSERT-query. Den skal også tilpasses, så det passer med de værdier du vil bruge.

Det med fejlen, ved jeg ikke helt. Som du har pastet, kan jeg ikke lige se den. Check lige, at du har alle " og ; hvor de skal være. Også på linie 7.
Avatar billede rasmus_a Nybegynder
18. november 2004 - 10:12 #22
der manglede et "}" - nu kommer der ingen fejl meddelser men der bliver heller ikke gemt noget i tabellen.
Avatar billede rasmus_a Nybegynder
18. november 2004 - 10:12 #23
ok, to sek champ :)
Avatar billede rasmus_a Nybegynder
18. november 2004 - 10:16 #24
yes, sådan. nu gemmer den som den skal :) så skal vi bare have hentet skidtet igen, lavet cookies og sørge for at folk ikke kan registrere samme brugernavn.
(jeg skal nok hæve pointsene - meget)
Avatar billede jaw Nybegynder
18. november 2004 - 10:19 #25
Oki doki :) Prøv lige at oprette bruger med samme navn, som den du allerede har. Den _burde_ ikke oprette en endnu, men for at være sikker :)
Avatar billede rasmus_a Nybegynder
18. november 2004 - 10:21 #26
det gør den, desværre :)
Avatar billede jaw Nybegynder
18. november 2004 - 10:29 #27
Hm, ja det var jeg bange for. Har aldrig selv brugt metoden, så det var en test :)

Men så må vi (desværre) ud i noget i stil med:

<?PHP

mysql_connect("localhost","user","pass");
mysql_select_db("dbname");

if(isset($_POST['submit']) && $_POST['submit'] != "") {  //kræver at "knappen" på din form-side hedder submit

$navn = $_POST['navn'];
$alder = $_POST['alder'];
$mail = $_POST['mail'];

/* checker om bruger findes */
$q = mysql_query("SELECT FROM brugere WHERE brugernavn = '$brugernavn' OR mail = '$mail'");
if(mysql_num_rows($q) > 0) {
  //brugeren er allerede oprettet
} else {
if(mysql_query("INSERT INTO brugere (navn, mail, alder) VALUES('$navn','$alder','$mail')")) {
  //brugeren blev oprettet
} else {
  //brugeren blev ikke oprettet
}
}

?>

Som du nok kan lure, så bare tag de ting jeg har tilføjet i forhold til det paste du lavede 09.30.43 :)
Avatar billede rasmus_a Nybegynder
18. november 2004 - 10:31 #28
10-4, giv mig lige et minut. :D
Avatar billede rasmus_a Nybegynder
18. november 2004 - 10:36 #29
<?PHP

mysql_connect("localhost","user","pass");
mysql_select_db("dbname");

if(isset($_POST['submit']) && $_POST['submit'] != "") {

$navn = $_POST['brugernavn'];
$alder = $_POST['adgangskode'];
$mail = $_POST['mail'];

/* checker om bruger findes */
mysql_query("SELECT FROM brugere WHERE brugernavn = '$brugernavn' OR mail = '$mail'");
if(mysql_num_rows($q) > 0) {
  //brugeren er allerede oprettet

} else { <-- Parse error: parse error, unexpected '}' in /var/www/html/login/opret.php on line 16

if(mysql_query("INSERT INTO brugere (brugernavn, adgangskode, mail) VALUES('brugernavn','$adgangskode','$mail')")) {
  //brugeren blev oprettet
} else {
  //brugeren blev ikke oprettet
}
}

?>
Avatar billede jaw Nybegynder
18. november 2004 - 10:39 #30
mysql_query("SELECT FROM brugere WHERE brugernavn = '$brugernavn' OR mail = '$mail'"); <- du skal lige have $q = med foran den linie
Avatar billede rasmus_a Nybegynder
18. november 2004 - 10:42 #31
det virker desværre stadigvæk ikke - har også rettet $navn og $alder øverst.
jeg prøvede lige at skrive ECHO('eksisterer allerede'); efter "//bruger er allerede oprettet" og så fik jeg denne fejl i stedet:
Parse error: parse error, unexpected T_ECHO in /var/www/html/login/opret.php on line 16

så det er nok noget med den her sætning:
if(mysql_num_rows($q) > 0) {
?
Avatar billede jaw Nybegynder
18. november 2004 - 10:47 #32
Nå ja, dum fejl tror jeg! Den her:

SELECT FROM brugere

...skal lige være:

SELECT id FROM brugere
Avatar billede rasmus_a Nybegynder
18. november 2004 - 10:51 #33
heller ikke, desværre. stadigvæk fejl.

sådan ser opret.php ud lige nu:
<?PHP

mysql_connect("localhost","user","pass");
mysql_select_db("dbname");

if(isset($_POST['submit']) && $_POST['submit'] != "") {

$brugernavn = $_POST['brugernavn'];
$adgangskode = $_POST['adgangskode'];
$mail = $_POST['mail'];

/* checker om bruger findes */
$q = mysql_query("SELECT id FROM brugere WHERE brugernavn = '$brugernavn' OR mail = '$mail'");
if(mysql_num_rows($q) > 0) {
  //brugeren er allerede oprettet
} else { <--
if(mysql_query("INSERT INTO brugere (brugernavn, adgangskode, mail) VALUES('brugernavn','$adgangskode','$mail')")) {
  //brugeren blev oprettet
} else {
  //brugeren blev ikke oprettet
}
}

?>

Parse error: parse error, unexpected '}' in /var/www/html/login/opret.php on line 16
(linie 16 er der med: <--)
Avatar billede rasmus_a Nybegynder
18. november 2004 - 10:55 #34
er det ikke usædvanligt at der ikke er noget mellem { og } der ved "pilen" (<--)
Avatar billede jaw Nybegynder
18. november 2004 - 10:57 #35
Hmm, det virker så hos mig... Den "<--" du har indsat, den har du husket at fjerne ikke? Og så skal der nok en } lige før ?>
Avatar billede rasmus_a Nybegynder
18. november 2004 - 11:00 #36
jo det har jeg :) har lige indsat en ekstra } inden ?>'et men det virker stadigvæk ikke. den regner ikke med at få en } det på linie 16.
Avatar billede jaw Nybegynder
18. november 2004 - 11:03 #37
Sådan her ser min ud:

<?PHP

mysql_connect("localhost","","");
mysql_select_db("eksperten");

if(isset($_POST['submit']) && $_POST['submit'] != "") {

    $brugernavn = $_POST['brugernavn'];
    $adgangskode = $_POST['adgangskode'];
    $mail = $_POST['adgangskode'];

    /* checker om bruger findes */
    $q = mysql_query("SELECT id FROM brugere WHERE brugernavn = '$brugernavn' OR mail = '$mail'");
    echo mysql_num_rows($q);
    if(mysql_num_rows($q) > 0) {
      //brugeren er allerede oprettet
    } else {
        if(mysql_query("INSERT INTO brugere (brugernavn, adgangskode, mail) VALUES('brugernavn','$adgangskode','$mail')")) {
          //brugeren blev oprettet
        } else {
          //brugeren blev ikke oprettet
        }
    }
}

?>

...og den funker nu?! Se lige om der er forskel på den og din...
Avatar billede rasmus_a Nybegynder
18. november 2004 - 11:03 #38
nå måske vi bare skulle glemme det med at tjekke om det eksisterer og så bare se om vi kan få det hentet (via cookie) ?
Avatar billede rasmus_a Nybegynder
18. november 2004 - 11:04 #39
ok 2 sek
Avatar billede rasmus_a Nybegynder
18. november 2004 - 11:06 #40
arg, med dit script skriver den:
Parse error: parse error, unexpected T_STRING in /var/www/html/login/opret.php on line 8

linie 8:
$brugernavn = $_POST['brugernavn'];

:/
Avatar billede jaw Nybegynder
18. november 2004 - 11:08 #41
Er det så ikke samme fejl som du havde på linie 8 tidligere?
Avatar billede rasmus_a Nybegynder
18. november 2004 - 11:12 #42
nej der var det fordi "brugere" tabellen ikke var oprettet. jeg tror php versionen på min server er ret gammel. 4.1.2 - kan det være der, der er noget?
Avatar billede jaw Nybegynder
18. november 2004 - 11:13 #43
Hm, tjoh, det er jo en lidt ældre udgave. Men om det kan have noget at sige, ved jeg ikke lige... Men fik du det til at virke?
Avatar billede rasmus_a Nybegynder
18. november 2004 - 11:14 #44
nej der er stadigvæk fejl.. det er dog mærkeligt. altså, før - da den bare gemte - virkede det jo fint! :)
Avatar billede rasmus_a Nybegynder
18. november 2004 - 11:18 #45
skal vi prøve at hente informationen igen og så lade det her ligge eller har du flere idéer? :)
Avatar billede jaw Nybegynder
18. november 2004 - 11:22 #46
Ja, det kan vi godt... Men du må lige vente lidt, for har lige nogen ting jeg skal ordne først...
Avatar billede rasmus_a Nybegynder
18. november 2004 - 11:24 #47
så virker det! :D det var den editor jeg brugte der havde indsat nogle åndssvage tegn.. grr...!! Nu kører jeg notepad style. (det er når man copy&paster nogle gange).
Avatar billede rasmus_a Nybegynder
18. november 2004 - 11:29 #48
tak for hjælpen so far - god arbejdsløst. Jeg prøver at fedte lidt med SELECT :)
Avatar billede jaw Nybegynder
18. november 2004 - 11:53 #49
Hehe, kanon jo :)

Men jeg er skam ikke på arbejde. Jeg har en måneds ferie, derfor jeg har så god til til exp :)

Min umiddelbart "løsning" på din select, ville kunne se sådan ud:

<?PHP

    session_start();
   
    //connect til databasen

    $adgangskode = $_POST['adgangskode'];
    $brugernavn = $_POST['brugernavn'];
   
    $q = mysql_query("SELECT navn FROM brugere WHERE brugernavn = '$brugernavn' AND adgangskode = '$adgangskode'");
   
    if(mysql_num_rows($q) > 0) {
        $_SESSION['brugernavn'] = $brugernavn;
    } else {
        //ikke logget ind...
    }

?>

Hvor du jo så selvf. skal have en anden side med brugernavn- og adgangskodeforms.
Avatar billede rasmus_a Nybegynder
18. november 2004 - 11:58 #50
2 min, prøver lige :)
Avatar billede rasmus_a Nybegynder
18. november 2004 - 12:08 #51
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/html/login/users.php on line 14

script:
<?PHP
   
    session_start();

    mysql_connect("localhost","","");
    mysql_select_db("");

if(isset($_POST['login']) && $_POST['login'] != "") {

$adgangskode = $_POST['adgangskode'];
$brugernavn = $_POST['brugernavn'];

$q = mysql_query("SELECT navn FROM brugere WHERE brugernavn = '$brugernavn' AND adgangskode = '$adgangskode'");
if(mysql_num_rows($q) > 0) {
$_SESSION['brugernavn'] = $brugernavn;
} else {
//ikke logget ind...
echo('not logged in');
}
}


?>
Avatar billede rasmus_a Nybegynder
18. november 2004 - 12:09 #52
linie 14 = if(mysql_num_rows($q) > 0) {
Avatar billede rasmus_a Nybegynder
18. november 2004 - 12:11 #53
fandt selv fejlen. der stod "navn" i stede for "brugernavn" i linie 13.
:)
har du en ide til cookies :D ?
Avatar billede jaw Nybegynder
18. november 2004 - 12:12 #54
Ovenstående benytter sessions. Sessions er som cookies, dog bliver de kun gemt indtil brugeren lukker sin browser. Men så længe brugeren surfer rundt på dine sider, kan du få hans brugernavn frem med: echo $_SESSION['brugernavn'];

Det kræver dog lige, at du husker session_start(); i toppen af alle de sider hvor du ønsker det brugt...

Du _vil_ ud i cookies i stedet?
Avatar billede rasmus_a Nybegynder
18. november 2004 - 12:16 #55
hehe, nej jeg _vil_ ikke men det ville være fedt. men det tager vi bare en anden dag :) det her er mere end fint indtil videre! tusind tak.
og husk nu at smide et svar :D
Avatar billede rasmus_a Nybegynder
18. november 2004 - 12:17 #56
orv, lige en sidste ting. jeg har jo slettet og oprettet en del i min tabel nu - da jeg slettede alle brugere og oprettede en ny blev den oprettet som id 9. er det muligt at "resette" id counteren?
Avatar billede jaw Nybegynder
18. november 2004 - 12:19 #57
Det var da så lidt :)

Cookies kan du jo så også selv lege med. Funktionen kan f.eks. se sådan ud:
setcookie("brugernavn", $brugernavn, time() + 60 * 60 * 24 * 14);

time() + 60 * 60 * 24 * 14 betyder at cookien vil udløbe 14 dage efter den er sat. For at bruge cookien, bruger du: echo $_COOKIE['brugernavn']; og skal så stadig huske session_start(); i toppen af de dokumenter du vil bruge den på...

Held og lykke med det :)
Avatar billede jaw Nybegynder
18. november 2004 - 12:19 #58
Ja, hvis du bruger phpMyAdmin, kan du resette id-counteren ved at trykke "Tøm" i din tabel :)
Avatar billede rasmus_a Nybegynder
18. november 2004 - 12:23 #59
tak! jeg havde egentlig lige forestillet mig at forhøje pointsene men hvor mon jeg gør det.. hmm - var der ikke en "avanceret" knap engang??
Avatar billede jaw Nybegynder
18. november 2004 - 12:28 #60
Tjoh, man har i hvert fald kunnet. Men det er lang tid siden jeg selv har oprettet et spørgsmål, så ved ikke om man kan længere...

Men det behøver du nu heller ikke bruge tid på :)
Avatar billede rasmus_a Nybegynder
18. november 2004 - 12:30 #61
jeg kan ikke finde det - hvis finder det så smid mig en mail så skal jeg nok lave et nyt spørgsmål - med flere points. hvis man må det, altså. TAK igen!
Avatar billede jaw Nybegynder
18. november 2004 - 15:51 #62
Nej, nej... Det er skam helt fint som det :) Hvis jeg havde villet have flere point, havde jeg ikke svaret i første omgang...
Avatar billede rasmus_a Nybegynder
18. november 2004 - 15:54 #63
:-)
Avatar billede rasmus_a Nybegynder
25. november 2004 - 22:25 #64
hey jaw, jeg har arbejdet med en "unset()" funktion som "log ud" men det virker kun lokalt.. skal jeg bruge $GLOBALS for at logge HELT ud? :)
Avatar billede jaw Nybegynder
25. november 2004 - 23:13 #65
Ved ikke om det vil virke, men ellers kan jeg garantere dig at session_destroy(); vil virke :)
Avatar billede rasmus_a Nybegynder
26. november 2004 - 00:07 #66
ok det prøver jeg, tak 1000! :)
Avatar billede rasmus_a Nybegynder
26. november 2004 - 00:29 #67
den siger "trying to destory ininitialized session"?
Avatar billede rasmus_a Nybegynder
26. november 2004 - 00:34 #68
ah ja, manglede lige en "session_start();" (det er en anden fil) - men kl er også over midnat ;)
Avatar billede jaw Nybegynder
26. november 2004 - 07:36 #69
:)
Avatar billede rasmus_a Nybegynder
02. december 2004 - 15:27 #70
yo jaw,  kan det passe det script jeg fik tjekker om både password og email allerede er oprettet når man laver en ny bruger? det er meningen at den kun skal kigge efter brugernavn. Folk må gerne have f.eks. samme adgangskode :) giver det mening?
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