Avatar billede prop46 Nybegynder
29. maj 2004 - 20:31 Der er 28 kommentarer og
1 løsning

opret bruger fejl

Jeg har dette tjek på oprettelse af brugere. Det jeg IKKE forstår er at udfaldet ændre sig alt efter hvilken rækkefølge tjekkene kommer i. Tit oprettes brugeren uden kodeord... nogle gange fokuseres der på manglende kodeord indtil en korrekt mailadrs. indtastes!? Jeg ved ikke hvad jeg gør galt... er jeg helt på herrens mark her?

if($brugernavn == "") {
    $arrErrors[] = "<span class=\"pfejl\">! Du har ikke skrevet noget brugernavn.</span>";
}elseif (!eregi("^[ a-zæøå0-9]+$", $brugernavn)) {
    $arrErrors[] = "<span class=\"pfejl\">! Der er ugyldig(e) tegn i brugernavnet.</span>";
}elseif($kodeord1 == "") {
    $arrErrors[] = "<span class=\"pfejl\">! Du har ikke skrevet noget kodeord.</span>";
}elseif($kodeord2 == "") {
    $arrErrors[] = "<span class=\"pfejl\">! Du skal skrive kodeordet i begge felter.</span>";
}elseif($kodeord1 != $kodeord2) {
        $arrErrors[] = "<span class=\"pfejl\">! De indtastede kodeord er ikke ens. Prøv igen.</span>";
}elseif($fornavn == "") {
    $arrErrors[] = "<span class=\"pfejl\">! Du har ikke skrevet dit fornavn.</span>";
}elseif($efternavn == "") {
    $arrErrors[] = "<span class=\"pfejl\">! Du har ikke skrevet dit efternavn.</span>";
}elseif($adr == "") {
    $arrErrors[] = "<span class=\"pfejl\">! Du har ikke skrevet din adresse.</span>";
}elseif($tlf != "") {
    if (!eregi("^[ 0-9]+$", $tlf)) {
    $arrErrors[] = "<span class=\"pfejl\">! Telefon nummeret må kun bestå af tal.</span>";
    }
}elseif($mail != "") {
    if (preg_match("/\b[A-Z0-9._%+-]+@[A-Z0-9._%-]+\.[A-Z0-9._%-]{2,4}\b/i", $mail)) {
        $mail = $mail;
    }else{
        $arrErrors[] = "<span class=\"pfejl\">! Du har indtastet en ugyldig mail-adresse.</span>";
    }
}

if(!isset($arrErrors)) {
brugernavn og mail tjekkes i DB og bruger oprettes.
}
Avatar billede dennismp Nybegynder
29. maj 2004 - 20:34 #1
Prøv at ændre det, så istedet for du bruger elseif, så bruger du bare if() .. jeg tror det er det du egentlig ønsker
Avatar billede prop46 Nybegynder
29. maj 2004 - 20:40 #2
Grunden til at jeg bruger elseif() er at jeg ikke vil ha' mere end en fejlmed. ad gangen...
Avatar billede dennismp Nybegynder
29. maj 2004 - 20:50 #3
Lad os sige at brugernavn og kodeord er tomme..

Hvis du tjekker brugernavn først, vil den "brokke" sig over at den er tom  - og alle andre tests springes over (da de er elseif).. Hvis du tjekker kodeordet først, så er det det samme.  Den vil brokke sig (Du har ikke skrevet noget kodeord) men skippe reste da du bruger elseif.

Så rækkefølgen er vigtigt (det tror jeg også du er klar over)..

Men kan du genskabe problemet? Fx ved at skrive hvilke værdier de forskellige variabler har? Det ville gøre det lidt nemmere at komme med noget brugbart.

.. og .. har jeg overhovedet forstået dit spørgsmål ? :-)
Avatar billede prop46 Nybegynder
29. maj 2004 - 21:09 #4
Jeg tror du har forstået mit spørgsmål :0) ...men måske jeg ikke forstår en elseif() ordentligt så...

Hvis jeg sætter kodeords tjekket nederst, som jeg helst vil, oprettes brugeren når fornavn, efternavn, adr., mail og brugernavn er godkendt?
Avatar billede prop46 Nybegynder
29. maj 2004 - 21:10 #5
godkendt = ingen fejlmeddelelse
Avatar billede dennismp Nybegynder
29. maj 2004 - 22:33 #6
Om det er øverst eller nederst burde ikke have anden betydning, udover hvilken rækkefølge fejlene kommer i.

fx.

if( $bruger == '' )
  $fejl = 'Bruger er tom';
elseif( $kodeord == '' )
  $fejl = 'kodeord er tom';

Hvis begge er tomme, så vil du i dette tilfældge få at vide i første omgang at "Bruger er tom" og dernæst "kodeord er tom".

Bytte du om på det, får du først at vide at "kodeord er tom" og så "bruger er tom".
Avatar billede dennismp Nybegynder
29. maj 2004 - 22:34 #7
Men i det store hele bliver slutresultatet jo det samme. Du får fejl indtil både $bruger og $kodeord ikke er tomme.
Avatar billede prop46 Nybegynder
30. maj 2004 - 13:28 #8
Problemet er bare at det IKKE er det der er slutresultatet. Med ovenstående kode OPRETTES bruger når fornavn, efternavn, adr., mail og brugernavn er godkendt!! Det forstår jeg ikke.
Avatar billede dennismp Nybegynder
30. maj 2004 - 13:47 #9
det virker fint her.. Jeg måtte lige rette to ting (min php er sat op med error_reporting(E_ALL).

øverst:

$arrErrors = array();

istedet for:

if(!isset($arrErrors)) {
brugernavn og mail tjekkes i DB og bruger oprettes.
}

så:

if(count($arrErrors)>0) {
brugernavn og mail tjekkes i DB og bruger oprettes.
}
Avatar billede prop46 Nybegynder
30. maj 2004 - 13:55 #10
Det virker bare ikke her :0( ...her er hele koden:

<?php
require "connect.php";

$arrErrors = array();

if(isset($_POST['opret'])){
    $fornavn = ucfirst($_POST['fornavn']);
    $efternavn = ucfirst($_POST['efternavn']);
    $adr = ucfirst($_POST['adr']);
    $tlf = $_POST['tlf'];
    $mail = strtolower($_POST['mail']);
    $nyhedsbrev = $_POST['nyhedsbrev'];
    if($nyhedsbrev == "") {
        $nyhedsbrev = "nej";
    }
    $brugernavn = $_POST['brugernavn'];
    $kodeord1 = $_POST['kodeord1'];
    $kodeord2 = $_POST['kodeord2'];
    $login_brugernavn = $brugernavn;

    if($brugernavn == "") {
        $arrErrors[] = "<span class=\"pfejl\">! Du har ikke skrevet noget brugernavn.</span>";
    }elseif (!eregi("^[ a-zæøå0-9]+$", $brugernavn)) {
        $arrErrors[] = "<span class=\"pfejl\">! Der er ugyldig(e) tegn i brugernavnet.</span>";
    }elseif($fornavn == "") {
        $arrErrors[] = "<span class=\"pfejl\">! Du har ikke skrevet dit fornavn.</span>";
    }elseif($efternavn == "") {
        $arrErrors[] = "<span class=\"pfejl\">! Du har ikke skrevet dit efternavn.</span>";
    }elseif($adr == "") {
        $arrErrors[] = "<span class=\"pfejl\">! Du har ikke skrevet din adresse.</span>";
    }elseif($tlf != "") {
        if (!eregi("^[ 0-9]+$", $tlf)) {
        $arrErrors[] = "<span class=\"pfejl\">! Telefon nummeret må kun bestå af tal.</span>";
        }
    }elseif($mail != "") {
        if (preg_match("/\b[A-Z0-9._%+-]+@[A-Z0-9._%-]+\.[A-Z0-9._%-]{2,4}\b/i", $mail)) {
            $mail = $mail;
        }else{
            $arrErrors[] = "<span class=\"pfejl\">! Du har indtastet en ugyldig mail-adresse.</span>";
        }
    }elseif($kodeord1 == "") {
        $arrErrors[] = "<span class=\"pfejl\">! Du har ikke skrevet noget kodeord.</span>";
    }elseif($kodeord2 == "") {
        $arrErrors[] = "<span class=\"pfejl\">! Du skal skrive kodeordet i begge felter.</span>";
    }elseif($kodeord1 != $kodeord2) {
            $arrErrors[] = "<span class=\"pfejl\">! De indtastede kodeord er ikke ens. Prøv igen.</span>";
    }


    if(count($arrErrors) == 0) {
        $tabelnavn = str_replace(' ', '_', $login_brugernavn);

        $tjek_brugernavn = "SELECT brugernavn FROM bruger WHERE brugernavn = '$brugernavn'";
        $tjek_mail = "SELECT mail FROM bruger WHERE mail = '$mail'";

        $send_bruger = "insert into bruger(brugernavn, fornavn, efternavn, adr, tlf, mail, kodeord, nyhedsbrev)
            values('$login_brugernavn','$fornavn', '$efternavn', '$adr', '$tlf', '$mail', '$kodeord1', '$nyhedsbrev')";

        $tabel = "CREATE TABLE $tabelnavn (
            `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
            `slags` TEXT NOT NULL ,
            `overskrift` TEXT NOT NULL ,
            `tekst` TEXT NOT NULL
            `kontakt` TEXT NOT NULL,
            `tid` TEXT NOT NULL ,
        )";

        aabn_forbindelse_og_vaelgdb();
        $resultat_tjek_brugernavn = mysql_query($tjek_brugernavn);
        $resultat_tjek_mail = mysql_query($tjek_mail);

        if(!mysql_num_rows($resultat_tjek_brugernavn))  {
            if(!mysql_num_rows($resultat_tjek_mail))  {
                mysql_query($send_bruger);
                mysql_query($tabel);
                luk_forbindelse();

                session_start();
                $_SESSION['login_bruger'] = $login_brugernavn;   
                header("Location: oprettet.php");
                exit;
            }else {
                $arrErrors[] = "<span class=\"pfejl\">! Den valgte mail-adresse er allerede i brug. Vælg en anden.</span>";
                luk_forbindelse();
            }
        }else {
            $arrErrors[] = "<span class=\"pfejl\">! Der findes allerede en bruger med det brugernavn. Vælg et andet.</span>";
            luk_forbindelse();
        }
    }
}
Avatar billede dennismp Nybegynder
30. maj 2004 - 14:03 #11
Bare for at være sikker; problemet er, at brugeren ikke behøver at skrive kodeord1/2 ind for at blive oprettet?

Har du prøvet at skrive ud, fx:
  }elseif($kodeord1 == "") {
        print "Kodeord er tomt";
        $arrErrors[] = "<span class=\"pfejl\">! Du har ikke skrevet noget kodeord.</span>";
    }elseif($kodeord2 == "") {
        $arrErrors[] = "<span class=\"pfejl\">! Du skal skrive kodeordet i begge felter.</span>";

eller skrive $kodeord1 ud ? Bare så du er sikker på hvad den egentlig indeholder..
Avatar billede prop46 Nybegynder
30. maj 2004 - 14:19 #12
Problemet er at HVIS $mail er korrekt udfyldt behøver man ikke skrive kodeord1/2.

Har lige prøvet echo "'".$kodeord1."'" og den indeholder ikke noget.
Avatar billede dennismp Nybegynder
30. maj 2004 - 14:24 #13
Prøv at erstatte:
        if (preg_match("/\b[A-Z0-9._%+-]+@[A-Z0-9._%-]+\.[A-Z0-9._%-]{2,4}\b/i", $mail)) {
            $mail = $mail;
        }else{
            $arrErrors[] = "<span class=\"pfejl\">! Du har indtastet en ugyldig mail-adresse.</span>";
        }

med:
        if(!preg_match("/\b[A-Z0-9._%+-]+@[A-Z0-9._%-]+\.[A-Z0-9._%-]{2,4}\b/i", $mail)) {
            $arrErrors[] = "<span class=\"pfejl\">! Du har indtastet en ugyldig mail-adresse.</span>";
        }
Avatar billede prop46 Nybegynder
30. maj 2004 - 14:26 #14
Ja faktisk.. efter jeg tilføjede

$arrErrors = array();

og:

if(count($arrErrors)>0) {
brugernavn og mail tjekkes i DB og bruger oprettes.
}

...så gør den bare ikke noget. Kommer IKKE med fekl om manglende kodeord, men opretter heller ikke bruger.
Avatar billede prop46 Nybegynder
30. maj 2004 - 14:37 #15
Mu opretter den i det mindste ikke uden kodeord, men når $mail er godkendt kommer der ikke fler fejlmedd. (med din tilføjelse --> $arrErrors = array(); osv.
Avatar billede dennismp Nybegynder
30. maj 2004 - 14:38 #16
Prøv at poste koden igen, så laver prøver jeg og se om jeg kan genskabe problemet.
Avatar billede prop46 Nybegynder
30. maj 2004 - 14:40 #17
<?php
require "connect.php";

$arrErrors = array();

if(isset($_POST['opret'])){
    $fornavn = ucfirst($_POST['fornavn']);
    $efternavn = ucfirst($_POST['efternavn']);
    $adr = ucfirst($_POST['adr']);
    $tlf = $_POST['tlf'];
    $mail = strtolower($_POST['mail']);
    $nyhedsbrev = $_POST['nyhedsbrev'];
    if($nyhedsbrev == "") {
        $nyhedsbrev = "nej";
    }
    $brugernavn = $_POST['brugernavn'];
    $kodeord1 = $_POST['kodeord1'];
    $kodeord2 = $_POST['kodeord2'];
    $login_brugernavn = $brugernavn;

    if($brugernavn == "") {
        $arrErrors[] = "<span class=\"pfejl\">! Du har ikke skrevet noget brugernavn.</span>";
    }elseif (!eregi("^[ a-zæøå0-9]+$", $brugernavn)) {
        $arrErrors[] = "<span class=\"pfejl\">! Der er ugyldig(e) tegn i brugernavnet.</span>";
    }elseif($fornavn == "") {
        $arrErrors[] = "<span class=\"pfejl\">! Du har ikke skrevet dit fornavn.</span>";
    }elseif($efternavn == "") {
        $arrErrors[] = "<span class=\"pfejl\">! Du har ikke skrevet dit efternavn.</span>";
    }elseif($adr == "") {
        $arrErrors[] = "<span class=\"pfejl\">! Du har ikke skrevet din adresse.</span>";
    }elseif($tlf != "") {
        if (!eregi("^[ 0-9]+$", $tlf)) {
        $arrErrors[] = "<span class=\"pfejl\">! Telefon nummeret må kun bestå af tal.</span>";
        }
    }elseif($mail != "") {
        if(!preg_match("/\b[A-Z0-9._%+-]+@[A-Z0-9._%-]+\.[A-Z0-9._%-]{2,4}\b/i", $mail)) {
            $arrErrors[] = "<span class=\"pfejl\">! Du har indtastet en ugyldig mail-adresse.</span>";
        }
    }elseif($kodeord1 == "") {
        $arrErrors[] = "<span class=\"pfejl\">! Du har ikke skrevet noget kodeord.</span>";
    }elseif($kodeord2 == "") {
        $arrErrors[] = "<span class=\"pfejl\">! Du skal skrive kodeordet i begge felter.</span>";
    }elseif($kodeord1 != $kodeord2) {
            $arrErrors[] = "<span class=\"pfejl\">! De indtastede kodeord er ikke ens. Prøv igen.</span>";
    }


    if(count($arrErrors)<0) {
        $tabelnavn = str_replace(' ', '_', $login_brugernavn);

        $tjek_brugernavn = "SELECT brugernavn FROM bruger WHERE brugernavn = '$brugernavn'";
        $tjek_mail = "SELECT mail FROM bruger WHERE mail = '$mail'";

        $send_bruger = "insert into bruger(brugernavn, fornavn, efternavn, adr, tlf, mail, kodeord, nyhedsbrev)
            values('$login_brugernavn','$fornavn', '$efternavn', '$adr', '$tlf', '$mail', '$kodeord1', '$nyhedsbrev')";

        $tabel = "CREATE TABLE $tabelnavn (
            `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
            `slags` TEXT NOT NULL ,
            `overskrift` TEXT NOT NULL ,
            `tekst` TEXT NOT NULL
            `kontakt` TEXT NOT NULL,
            `tid` TEXT NOT NULL ,
        )";

        aabn_forbindelse_og_vaelgdb();
        $resultat_tjek_brugernavn = mysql_query($tjek_brugernavn);
        $resultat_tjek_mail = mysql_query($tjek_mail);

        if(!mysql_num_rows($resultat_tjek_brugernavn))  {
            if(!mysql_num_rows($resultat_tjek_mail))  {
                mysql_query($send_bruger);
                mysql_query($tabel);
                luk_forbindelse();

                session_start();
                $_SESSION['login_bruger'] = $login_brugernavn;   
                header("Location: oprettet.php");
                exit;
            }else {
                $arrErrors[] = "<span class=\"pfejl\">! Den valgte mail-adresse er allerede i brug. Vælg en anden.</span>";
                luk_forbindelse();
            }
        }else {
            $arrErrors[] = "<span class=\"pfejl\">! Der findes allerede en bruger med det brugernavn. Vælg et andet.</span>";
            luk_forbindelse();
        }
    }
}
Avatar billede dennismp Nybegynder
30. maj 2004 - 14:56 #18
Ah :)

..
    }elseif($tlf != "") {
        if (!eregi("^[ 0-9]+$", $tlf)) {
        $arrErrors[] = "<span class=\"pfejl\">! Telefon nummeret må kun bestå af tal.</span>";
        }
    }elseif($mail != "") {
        if(!preg_match("/\b[A-Z0-9._%+-]+@[A-Z0-9._%-]+\.[A-Z0-9._%-]{2,4}\b/i", $mail)) {
            $arrErrors[] = "<span class=\"pfejl\">! Du har indtastet en ugyldig mail-adresse.</span>";
        }
    }elseif($kodeord1 == "") {
        $arrErrors[] = "<span class=\"pfejl\">! Du har ikke skrevet noget kodeord.</span>";
    }elseif($kodeord2 == "") {
        $arrErrors[] = "<span class=\"pfejl\">! Du skal skrive kodeordet i begge felter.</span>";
    }elseif($kodeord1 != $kodeord2) {
            $arrErrors[] = "<span class=\"pfejl\">! De indtastede kodeord er ikke ens. Prøv igen.</span>";
    }

Hvis $mail ikke er tom så vil den gå ind i den del af elseif() .. og dermed vil den ikke tjekke de andre elseif()..  (den vælger kun een elseif) - derfor bliver kodeord1/2 ikke tjekket..

prøv istedet (har rettet tlf og mail)

    }elseif($tlf != "" && !eregi("^[ 0-9]+$", $tlf)) {
    $arrErrors[] = "<span class=\"pfejl\">! Telefon nummeret må kun bestå af tal.</span>";
    }elseif($mail != "" && !preg_match("/\b[A-Z0-9._%+-]+@[A-Z0-9._%-]+\.[A-Z0-9._%-]{2,4}\b/i", $mail)) {
        $arrErrors[] = "<span class=\"pfejl\">! Du har indtastet en ugyldig mail-adresse.</span>";
    }
Avatar billede prop46 Nybegynder
30. maj 2004 - 15:06 #19
okay... Når jeg går tilbage til at bruge:

if(!isset($arrErrors)) {
brugernavn og mail tjekkes i DB og bruger oprettes.
}

.. virker det fint :0)
Avatar billede dennismp Nybegynder
30. maj 2004 - 15:14 #20
Så du behøver ikke at rettet i if-elseif'erne hvis du bruger isset() ?
Avatar billede prop46 Nybegynder
30. maj 2004 - 15:14 #21
Mange tak du !
Avatar billede prop46 Nybegynder
30. maj 2004 - 15:16 #22
Jojo... men der er stadig problemer hvis jeg bruger:

if(count($arrErrors)>0) {
brugernavn og mail tjekkes i DB og bruger oprettes.
}

Så sker der ingenting når alt er tjekket og godkendt!
Avatar billede dennismp Nybegynder
30. maj 2004 - 15:18 #23
if(count($arrErrors)>0) {

Du mener vel == 0 ?

Der kan aldrig være negativ antal elementer i et array :-)
Avatar billede prop46 Nybegynder
30. maj 2004 - 15:21 #24
Hrm... du postede selv den kode tidliger... men jeg retter det lige ril == og prøver
Avatar billede prop46 Nybegynder
30. maj 2004 - 15:23 #25
Hm... så opretter den næsten uden nogle fejltjek! Er det dumt at bruge:

if(!isset($arrErrors)) {
brugernavn og mail tjekkes i DB og bruger oprettes.
}

??
Avatar billede dennismp Nybegynder
30. maj 2004 - 15:28 #26
.. du må undskylde - jeg er vist stadig ikke helt vågen :-)

if(count($arrErrors)>0) { giver mening hvis man gør:

if(count($arrErrors)>0) {
  lav en fejlbesked
}
else {
  opretbruger
}

Det ser ud som om du gør det omvendte.

isset() tester om en variable findes,
count($arrErrors) tæller hvor mange fejl(elementer) der er.. Begge dele kan bruges alt efter hvordan du gør. Jeg foretrækker nok count(), fordi at jeg øverst oppe helst vil initialisere mine variabler før brug - og da jeg gør det, så vil isset($arrErrors) altid være sandt.
Avatar billede prop46 Nybegynder
30. maj 2004 - 15:29 #27
Men du... læg lige et svar ikk! :0)
Avatar billede dennismp Nybegynder
30. maj 2004 - 15:33 #28
Ok - jeg håber at jeg har været til mere hjælp end forvirring :-)
Avatar billede prop46 Nybegynder
30. maj 2004 - 15:50 #29
Det har du bestemt :0)
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