Avatar billede alex15 Nybegynder
29. november 2007 - 14:29 Der er 23 kommentarer og
2 løsninger

Hvor ligger fejlen i koden - følger en artikel (login system)

Hej eksperter

Er i gang med at følge denne artikel:
http://www.phpuniverset.dk/show_artikels.phtml?ArtikelID=23&artikel=Brugersystem.i.PHP/MySQL

Og har ikke bare kopiet. Har sidder og tænkt det hele igennem, mens jeg har læst det. Og har virkelig fået stående stort set det hele. og lært rigtig meget af den.

Har fået lavet alle filerne. som de skal laves. Har dog ændret nogle af filerne, da jeg læste mig frem til nogle steder at de kunne lave på andre måder. - og andre måder som var mere korrekte.

har følgende filer:

connect.php
index.php
login.php
login-ok.php
opret.php
opret-ok.php

og så en database table.

Vil ikke lægge alle coderne ind fra de forskellige filer da jeg ikke er kommet så langt endnu med at chekke om de virker. For ind til videre er der allerede opstået en fejl ved. opret-ok.php.

---

opret.php:

<html>
<head>
<title>Opret en bruger</title>
</head>
<body>

<form action="opret-ok.php" method="post">
Brugernavn: <input type="text" name="brugernavn"><br>
Password: <input type="password" name="password"><br>
<input type="submit" name="opret" value="Opret">
</form>

</body>
</html>

---

opret-ok.php

<?php

include("connect.php"); // Variabler til mysql hentes

$opret = addslashes($_POST['opret']);

if(empty($opret))
{
echo "For at oprette en bruger skal du gå ind på opret.php"

?>

<br> <a href="opret.php">Klik her for at oprette en bruger</a>

<?php

} else {

$brugernavn = addslashes($_POST['brugernavn']); //Finder brugernavnet fra opret.php
$password = addslashes($_POST['password']); //Funder passwordet fra opret.php

if (empty($brugernavn) or empty ($password)) { //Her tjekkes om ET af felterne er tomme.

    echo 'Et af felterne er tomme';}
   
else

$result = mysql_query("select brugernavn from users where brugernavn = '$brugernavn'")

or die (mysql_error());

$number = mysql_num_rows($result);

if ($number > 0 {

echo 'Desværre brugernavnet er optager';

} else }

mysql_query("insert into users (brugernavn, password) values ('$brugernavn','$password')")

or die (mysql_error());

echo "brugernavn $brugernavn er oprettet!";

?>

<a href="login.php">Klik her for at logge ind</a>

<?php

}

}

}

?>

---

connect.php

<?php
@mysql_connect("localhost", "XXX", "XXX") or die("Der kunne ikke oprettes forbindelse til databasen");

@mysql_select_db("XXX") or die("Databasen kunne ikke findes");
?> //her er der tastet de rigtig oplysninger ind..!!!

---

Ved godt at det er et stort spørgsmål. Men har virkelig siddet og kigget det hele igennem nu mange gange. Uden at finde fejlen..
Avatar billede madshammer Nybegynder
29. november 2007 - 15:02 #1
Hvilken fejlmelding kommer den med?

mvh.
madshammer
Avatar billede nielle Nybegynder
29. november 2007 - 15:07 #2
Du mangler en {-parentes lige efter din else nr. 2.

Prøv at lave indrykning af din kode - så bliver den slags logiske fejl meget tydligere.
Avatar billede alex15 Nybegynder
29. november 2007 - 15:08 #3
Som om den ikke rigtig kommer med nogen fejl.. prøv og udfyld min opret ting og så se hvad den siger..

http://www.alexanderchristensen.dk/opret.php
Avatar billede alex15 Nybegynder
29. november 2007 - 15:16 #4
har rettet fejlen med {-parentes lige efter din else nr. 2. - gjorde ingen forskel.. eller gør det self. men ikke på det andet problem..
Avatar billede madshammer Nybegynder
29. november 2007 - 15:27 #5
Hvad med else nr. 3, vender } ikke forkert..?
Avatar billede nielle Nybegynder
29. november 2007 - 15:32 #6
Hvordan ser koden ud nu - helst med indrykninger, tak :^)
Avatar billede alex15 Nybegynder
29. november 2007 - 15:48 #7
har lige fundet ud af at jeg slet ikke kan finde ud af det med indryk. Men har prøvet og gøre det så godt som jeg kunne:

<?php

include("connect.php"); // Variabler til mysql hentes

$opret = ($_POST['opret']);

if(empty($opret)){
   
    echo "For at oprette en bruger skal du gå ind på opret.php"

    ?>

    <br> <a href="opret.php">Klik her for at oprette en bruger</a>

    <?php

} else {

    $brugernavn = addslashes($_POST['brugernavn']); //Finder brugernavnet fra opret.php
    $password = addslashes($_POST['password']); //Funder passwordet fra opret.php

        if (empty($brugernavn) or empty ($password)){

            echo 'Et af felterne er tomme';}//Her tjekkes om ET af felterne er tomme.
   
        else{

            $result = mysql_query("select brugernavn from users where brugernavn = '$brugernavn'")
            or die (mysql_error());

            $number = mysql_num_rows($result);

                if ($number > 0 {
                    echo 'Desværre brugernavnet er optager';

                } else {

                    mysql_query("insert into users (brugernavn, password) values ('$brugernavn','$password')")
                    or die (mysql_error());

                    echo "brugernavn $brugernavn er oprettet!";

                    ?>

                    <a href="login.php">Klik her for at logge ind</a>

                    <?php

                }

        }

}

?>

-------

Jeg tror bare personligt at fejlen ligger lige i starter. For der står jo i koden at hvis man går direkte ind i filen www.alexanderchristensen.dk/opret-ok.php - Så burde den komme med på følgende:

echo "For at oprette en bruger skal du gå ind på opret.php"

- Hvilken den ikke gør. Så fejlen må allerede ligger der omkring..
Avatar billede nielle Nybegynder
29. november 2007 - 15:55 #8
Der mangler et ;-tegn i enden af denne:

echo "For at oprette en bruger skal du gå ind på opret.php"
Avatar billede nielle Nybegynder
29. november 2007 - 15:57 #9
Indrykning på denne måde:

<?php
include("connect.php"); // Variabler til mysql hentes

$opret = ($_POST['opret']);

if (empty($opret)) {
    echo "For at oprette en bruger skal du gå ind på opret.php";
?>
    <br> <a href="opret.php">Klik her for at oprette en bruger</a>
<?php
} else {
    $brugernavn = addslashes($_POST['brugernavn']); //Finder brugernavnet fra opret.php
    $password = addslashes($_POST['password']); //Funder passwordet fra opret.php

    if (empty($brugernavn) || empty ($password)) { //Her tjekkes om ET af felterne er tomme.
        echo 'Et af felterne er tomme';
    } else {
        $result = mysql_query("select brugernavn from users where brugernavn = '$brugernavn'") or die (mysql_error());

        $number = mysql_num_rows($result);

        if ($number > 0 {
            echo 'Desværre brugernavnet er optager';
        } else {
            mysql_query("insert into users (brugernavn, password) values ('$brugernavn','$password')") or die (mysql_error());
            echo "brugernavn $brugernavn er oprettet!";
?>
            <a href="login.php">Klik her for at logge ind</a>
<?php
        }
    }
}
?>
Avatar billede alex15 Nybegynder
29. november 2007 - 16:05 #10
Okay, tror jeg forstår hvordan indryk fungere nu..!!

Det hjalp ikke på fejlen, det der med at indsætte ";"
Avatar billede nielle Nybegynder
29. november 2007 - 16:11 #11
Så er det på tide at lave noget debug udskrivning, og se hvad der sker:

<?php
include("connect.php"); // Variabler til mysql hentes

$opret = ($_POST['opret']);

if (empty($opret)) {
    echo "DEBUG 1<br>";

    echo "For at oprette en bruger skal du gå ind på opret.php";
?>
    <br> <a href="opret.php">Klik her for at oprette en bruger</a>
<?php
} else {
    echo "DEBUG 2<br>";

    $brugernavn = addslashes($_POST['brugernavn']); //Finder brugernavnet fra opret.php
    $password = addslashes($_POST['password']); //Funder passwordet fra opret.php

    if (empty($brugernavn) || empty ($password)) { //Her tjekkes om ET af felterne er tomme.
        echo "DEBUG 3<br>";

        echo 'Et af felterne er tomme';
    } else {
        echo "DEBUG 4<br>";

        $result = mysql_query("select brugernavn from users where brugernavn = '$brugernavn'") or die (mysql_error());

        $number = mysql_num_rows($result);

        if ($number > 0 {
            echo "DEBUG 5<br>";

            echo 'Desværre brugernavnet er optager';
        } else {
            echo "DEBUG 6<br>";

            mysql_query("insert into users (brugernavn, password) values ('$brugernavn','$password')") or die (mysql_error());
            echo "brugernavn $brugernavn er oprettet!";
?>
            <a href="login.php">Klik her for at logge ind</a>
<?php
        }
    }
}
?>
Avatar billede alex15 Nybegynder
29. november 2007 - 16:16 #12
Smart måde og gøre det på..! Har kopiret det og overskrevet det med min egen, og smidt det ind på server under: http://www.alexanderchristensen.dk/opret-ok.php - Så det må være LIGE i starter det fucker op.. eller hva?
Avatar billede madshammer Nybegynder
29. november 2007 - 16:24 #13
Der er vidst også en fejl i din login-ok.php , men det ved du godt?
Avatar billede alex15 Nybegynder
29. november 2007 - 16:27 #14
Så langt er jeg slet ikke kommet endnu..

Kan fejlen ligge i noget med at lave skrev:

include("connect.php");

i stedet for:

require("config.php");

som artiklen jeg læste sagde man skulle gøre?
Avatar billede nielle Nybegynder
29. november 2007 - 16:28 #15
Nej,

... men der kan jo faktisk godt være en feji i config.php filen.
Avatar billede alex15 Nybegynder
29. november 2007 - 16:35 #16
bruger jo ikke nogen config.php fil. har i stedet for valgt og skrive følgende:

include ("connect.php")

connect.php
<?php
@mysql_connect("localhost", "XXX", "XXX") or die("Der kunne ikke oprettes forbindelse til databasen"); //her er der udfyldt de rigtig oplysninger

@mysql_select_db("XXX") or die("Databasen kunne ikke findes");
?> //her er der udfyldt de rigtig oplysninger
Avatar billede nielle Nybegynder
29. november 2007 - 16:41 #17
Prøv at slette de @-tegn mens vi leder efter fejlen.
Avatar billede alex15 Nybegynder
29. november 2007 - 16:49 #18
er slettet..!

selve connect.php filen burde nemlig virke. For kan se i min phpmyadmin at der er oprettet en table som hedder users - lavede tabllen på følgeden måde:

<?php
include("connect.php");

mysql_query(" CREATE TABLE users (
id int(10) NOT NULL auto_increment,
brugernavn varchar(16),
password varchar(16),
PRIMARY KEY (id)
)") or die ("FEJL VED OPRETTELSE AF TABLE. Fejlen er følgende: <br><br><b>".mysql_error());

?>
Avatar billede alex15 Nybegynder
29. november 2007 - 17:18 #19
Sådan.. Fejlen er fundet..!!!

jeg havde skrevet:

if ($number > 0 {

svar:

if ($number > 0) {

Men lad os nu se. Der dukker nok flere fejl op..!
Avatar billede alex15 Nybegynder
03. december 2007 - 18:46 #20
Okay, stødte ikke på ydeligere fejl som jeg ikke selv kunne løse.

Men i skal have mange tak for hjælpen. Vil gerne give lidt point for den hjælp jeg fik. Så lav lige 2 svar Nielle og madshammer :)

Så synes jeg vi deler point på følgende måde:
Nielle 80
Madshammer 60
Mig selv 60

fair?
Avatar billede nielle Nybegynder
03. december 2007 - 19:14 #21
Svar :^)
Avatar billede nielle Nybegynder
10. december 2007 - 18:36 #22
madshammer, lægger du et svar?
Avatar billede alex15 Nybegynder
10. december 2007 - 18:44 #23
Tråden er lukket. - Men Mads, bare skriv her inde. Hvis du vil have dine point (som du self har fortjent) Ville bare gerne have lukket tårnden. Men skriv til mig. Så laver en en tråd til at overfører dine point i..! :)

Og til for hjælpen Nielle..! :)
Avatar billede nielle Nybegynder
10. december 2007 - 22:58 #24
Tak for point :^)
Avatar billede madshammer Nybegynder
11. december 2007 - 11:55 #25
Nej, pointene er sgu mindre vigtige. Consider it a freebie. ;)

mvh.
madshammer
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