29. maj 2004 - 20:31Der 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. }
Skal virksomheder stå stærkere mod angreb og kunne udvikle sig, skal sikkerhed, drift og forretning tænkes sammen. Det er tanken bag Jysk IT’s ambition om at skabe en “sikker fremtid” for kunderne.
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 ? :-)
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.
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>"; }
$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 , )";
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(); } } }
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..
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>"; }
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.
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>"; }
$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 , )";
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(); } } }
.. }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>"; }
.. 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.
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.