02. juli 2003 - 15:02Der er
104 kommentarer og 1 løsning
brugerlogin - støttepædagog
Jeg ved dette spørgsmål har været oppe og vende flere gange, men jeg er IGANG med at lærer php og synes ikke at støde på noget jeg lige står og kan bruge med min nuværende viden.
Er der en derude der vil guide mig igennem (det er naturligvis mig der skal gøre arbejdet) kodningen af et brugersystem hvor der kan oprettes brugere fra hjemmesiden og hver bruger har deres profilsiden som de kan redigerer?
Jeg bruger mysql og foreløbigt kan jeg ikke engang få den til at tjekke om burgernavnet eksisterer!
Er det muligt at få denne hjælp eller skal jeg henvende mig et andet sted!? Skal der flere point på bordet?
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Okay... nu vil jeg så istedet for at skrive--> 'ingen fejl. brugernavn ok' have en form hvor man kan indtaste kodeord, navn osv.
Går udfra at jeg bare laver if ($fejl==0) sætningen om.... men databasen er jo stadig åben og det er jo stadig åben. Ville det ikke være bedre at lukke den FØR jeg tjekker resultatet og skriver til browseren?
jeg kunne lave en fil hvis eneste funktion var at heade mig vidre?... eller som også startede en session, så folk automatisk blev logget ind på deres brugerområde når de oprettede sig selv som bruger!?
if (trim(strlen($nybrugernavn))==0) { $fejl1="brugernavn mangler<br>"; $status++;} elseif (trim(strlen($nybrugernavn))<3) { $fejl1="brugernavnet skal være min. 3 tegn<br>"; $status++; } elseif (!eregi("^[ a-zæøå0-9_@,\.-]+$",$nybrugernavn)) { $fejl1="ugyldig(e) tegn i brugernavnet<br>"; $status++; }
if (trim(strlen($nynavn))==0) { $fejl2="fulde navn mangler<br>"; $status++; } elseif (trim(strlen($nynavn))<5 || !ereg("[ ]",$nynavn)) { $fejl2="fulde navn skal indeholde både for- og efternavn<br>"; $status++; }
if ($nytlf && !eregi("[0-9]", $nytlf)) { $fejl5="ugyldigt tlf-nr. (brug kun tal)<br>"; $status++;} elseif ($nytlf && trim(strlen($nytlf))<8) { $fejl5="tlf-nr. skal være min. 8 cifre<br>"; $status++;}
if ($status==0) { $hentdb = "SELECT brugernavn FROM medlemmer WHERE brugernavn='$nybrugernavn' "; $dbexist = mysql_query($hentdb); if (mysql_num_rows($dbexist) > 0) { $fejl1="Brugernavnet \"$nybrugernavn\" er desværre taget.<br>Vælg venligst et andet.<br>"; $status++; } } if ($status==0) { $hentem = "SELECT email FROM medlemmer WHERE email='$nyemail' "; $emexist = mysql_query($hentem); if (mysql_num_rows($emexist) > 0) { $fejl1="Emailadressen $nyemail<br> er optaget. Måske har du allerede<br>oprettet en konto? <a href=\"dmk.php?s=kodeord&konto=$nyemail\">se her</a>"; $status++; } } if ($status!=0) { $fejlliste='<br><dt class="text"><font color="red">Fejl:<br> '.$fejl1.$fejl2.$fejl3.$fejl4.$fejl5.'</font>'; }
if ($status==0) { $nynavn = mysql_escape_string(htmlspecialchars(stripslashes($nynavn))); $nyemail = mysql_escape_string(htmlspecialchars(stripslashes($nyemail)));
Pyha... den er lidt svær at overskue den fejlfinding.
Du laver alle bogstaverne små--> (trim(strlen($brugernavn) ?? og tjekker de enkelte indtasninger, giver dem et fejlnummer -->$fejl1 ?? og lægger 1 til status.
Så gør du status op... hvis status ikke er 0 skriver du fejlene ud. Hvis status er 0 gør du et-eller-andet som jeg ikke kan huske hvad er -->$nynavn = mysql_escape_string(htmlspecialchars(stripslashes($nynavn)));
og smider det så i DB'en.... er det korrekt gennemskuet?
prop> if (trim(strlen($nyemail))==0) betyder bare "hvis antallet af karakterer er 0"
mysql_escape_string(htmlspecialchars(stripslashes($nynavn))); sætter \ foran farlige tegn (f.eks " og ') som primært mysql kunne reagere forkert på. htmlspecialchars laver < om til < osv. osv.
jeg laver samler $fejl1, $fejl2 osv. for at få en liste over alle eventuelle fejl, og kan herefter printe fejllisten præcis hvor jeg vil på siden.
ohmish: Hvorfor prøver du ikke bare først at indsætte den nye bruger i databasen og hvis det så fejler kan du efterfølgende undersøge årsagen - det vil være hurtigere for brugerne af websiden.
Du starter bare med at lave en "INSERT INTO..." og undersøger derefter mysql_affectedrows() og ser om den giver 0 eller 1 - hvis der ikke er blevet indsat nogle rækker, kan du så lave din check som ovenfor - så du har mulighed for at give brugeren en specifik fejlmelding.
if (trim(strlen($brugernavn))==0) { $fejl1="brugernavn mangler<br>"; $status++;} elseif (trim(strlen($brugernavn))<3) { $fejl1="brugernavnet skal være min. 3 tegn<br>"; $status++; } elseif (!eregi("^[ a-zæøå0-9_@,\.-]+$",$brugernavn)) { $fejl1="ugyldig(e) tegn i brugernavnet<br>"; $status++; }
if (trim(strlen($navn))==0) { $fejl2="fulde navn mangler<br>"; $status++; } elseif (trim(strlen($navn))<6 || !ereg("[ ]",$navn)) { $fejl2="fulde navn skal indeholde både for- og efternavn<br>"; $status++; }
if (trim(strlen($kodeord))==0) { $fejl3="Du har ikke skrevet noget kodeord<br>"; $status++; } elseif (trim(strlen($kodeord))<6 || !ereg("[ ]",$kodeord)) { $fejl3="Dit kodeord skal være på mindst 6 bobstaver<br>"; $status++; } elseif (!eregi("^[ a-zæøå0-9_@,\.-]+$",$kodeord)) { $fejl1="ugyldig(e) tegn i kodeordet<br>"; $status++; }
if (trim(strlen($kodeord2))==0) { $fejl4="Du skal skrive kodeordet igen.<br>"; $status++; }
if($kodeord != $kodeord2) { $fejl5="Dine kodeord er ikke ens. Prøv at indtaste dem igen.<br>"; $status++; }
if ($status==0) {
aabn_forbindelse_og_vaelgdb();
$query = "SELECT brugernavn FROM bruger WHERE brugernavn = '$brugernavn'"; $result = mysql_query($query);
if (mysql_num_rows($result)>0) { $fejl1="Brugernavnet er taget<br>"; $status++; }
luk_forbindelse();
}
if ($status!=0) { $fejlliste='<br><dt class="text"><font color="red">Fejl:<br> '.$fejl1.$fejl2.$fejl3.$fejl4.$fejl5.'</font>'; }
jeg ville nok adskille selve behandlingen/valideringen fra echo af fejl m.m. så du istedet siger: if (mysql_num_rows($result)==0) { $fejl1 = "Der findes ingen bruger med det brugernavn<br>"; }
og et andet sted: if ($fejl eller noget) { echo $fejl; } som jeg skrev i det andet eksempel.
autobufferen, php_value output_buffering 4096 behøver du faktisk ikke... brug istedet ob_start(); og ob_end_flush();, og kun hvis du er tvunget til at sende header efter output.
if (trim(strlen($brugernavn))==0) { $fejl1="brugernavn mangler<br>"; $status++;} elseif (trim(strlen($brugernavn))<3) { $fejl1="brugernavnet skal være min. 3 tegn<br>"; $status++; } elseif (!eregi("^[ a-zæøå0-9_@,\.-]+$",$brugernavn)) { $fejl1="ugyldig(e) tegn i brugernavnet<br>"; $status++; }
if (trim(strlen($navn))==0) { $fejl2="fulde navn mangler<br>"; $status++; } elseif (trim(strlen($navn))<6 || !ereg("[ ]",$navn)) { $fejl2="fulde navn skal indeholde både for- og efternavn<br>"; $status++; }
if (trim(strlen($kodeord))==0) { $fejl3="Du har ikke skrevet noget kodeord<br>"; $status++; } elseif (trim(strlen($kodeord))<4 || ereg("[ ]",$kodeord)) { $fejl3="Dit kodeord skal være på mindst 4 bobstaver og må IKKE indholde mellerum<br>"; $status++; } elseif (!eregi("^[ a-zæøå0-9_@,\.-]+$",$kodeord)) { $fejl1="ugyldig(e) tegn i kodeordet<br>"; $status++; }
if (trim(strlen($kodeord2))==0) { $fejl4="Du skal skrive kodeordet igen.<br>"; $status++; }
if($kodeord != $kodeord2) { $fejl5="Dine kodeord er ikke ens. Prøv at indtaste dem igen.<br>"; $status++; }
if ($status==0) {
aabn_forbindelse_og_vaelgdb();
$query = "SELECT brugernavn FROM bruger WHERE brugernavn = '$brugernavn'"; $result = mysql_query($query);
if (mysql_num_rows($result)>0) { $fejl1="Brugernavnet er taget<br>"; $status++; }
Når jeg har oprettet brugeren header jeg til oprettet.php hvor jeg lige vil sige at bruger $brugernavn er oprettet osv. Men $brugernavn bliver ikke vist! Er det ikke bare--> echo "bruger $brugernavn er oprettet"; ?? :01
Ihvertfald i <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> vil den ikke godkende ?a=1&b=2 - der skal det være ?a=1&b=2 - husk det er i koden; det bliver jo stadig udskrevet korrekt ;-)
$query = "SELECT brugernavn FROM bruger WHERE brugernavn = '$brugernavn' AND kodeord='$kodeord'"; $result = mysql_query($query); $check = mysql_num_rows($result);
if ($check==0) { $fejl1="Der findes ingen bruger med det brugernavn<br>"; $status++;} elseif ($check>0) { session_start(); $_SESSION['brugernavn'] == $brugernavn; $_SESSION['kodeord'] == $kodeord; header("Location: index.php?side=profil"); } else { $fejl1 = "Brugernavn og/eller kodeord er forkert<br>"; $status++; }
} }
if ($status!=0) { $fejlliste='<br><dt class="fejl"><font color="red">Fejl:<br> '.$fejl1.$fejl2.'</font>'; }
if ($brugernavn && $kodeord) { aabn_forbindelse_og_vaelgdb();
$query = "SELECT brugernavn FROM bruger WHERE brugernavn = '$brugernavn' AND kodeord='$kodeord'"; $result = mysql_query($query); $check = mysql_num_rows($result);
$query = "SELECT brugernavn FROM bruger WHERE brugernavn = '$brugernavn' AND kodeord='$kodeord'"; $result = mysql_query($query); $check = mysql_num_rows($result);
luk_forbindelse();
if ($check==0) { $fejl1="Der findes ingen bruger med det brugernavn<br>"; $status++;} elseif ($check>0) { session_start(); $_SESSION['brugernavn'] == $brugernavn; $_SESSION['kodeord'] == $kodeord; header("Location: index.php?side=profil"); } else { $fejl1 = "Brugernavn og/eller kodeord er forkert<br>"; $status++; } }
if ($status!=0) { $fejlliste='<br><dt class="fejl"><font color="red">Fejl:<br> '.$fejl1.$fejl2.'</font>'; }
if ($brugernavn && $kodeord) { aabn_forbindelse_og_vaelgdb();
$query = "SELECT brugernavn FROM bruger WHERE brugernavn = '$brugernavn' AND kodeord='$kodeord'"; $result = mysql_query($query); $check = mysql_num_rows($result);
$query = "SELECT brugernavn FROM bruger WHERE brugernavn = '$brugernavn' AND kodeord='$kodeord'"; $result = mysql_query($query); $check = mysql_num_rows($result);
luk_forbindelse();
if ($check==0) { $fejl1="Der findes ingen bruger med det brugernavn<br>"; $status++;} elseif ($check>0) { session_start(); $_SESSION['brugernavn'] == $brugernavn; $_SESSION['kodeord'] == $kodeord; header("Location: index.php?side=profil"); } else { $fejl1 = "Brugernavn og/eller kodeord er forkert<br>"; $status++; } }
if ($status!=0) { $fejlliste='<br><dt class="fejl"><font color="red">Fejl:<br> '.$fejl1.$fejl2.'</font>'; }
if ($brugernavn && $kodeord) { aabn_forbindelse_og_vaelgdb();
$query = "SELECT brugernavn FROM bruger WHERE brugernavn = '$brugernavn' AND kodeord='$kodeord'"; $result = mysql_query($query); $check = mysql_num_rows($result);
MEN!! når jeg includer check.inc på min profil.php, som er siden man sendes til hvis man logger ind, så kan jeg ikke logge ind selv med et brugernavn jeg HAR oprette.
Jeg har haft store problemer med at komme på nettet de sidste par dage, derfor den manglende respons. Nu tar' jeg på ferie imorgen og er væk en 10 dage's tid. Håber du er klar på at hjælpe lidt mere derefter. Jeg sætter pointene op til 200.
$query = "SELECT brugernavn FROM bruger WHERE brugernavn = '$brugernavn' AND kodeord='$kodeord'"; $result = mysql_query($query); $check = mysql_num_rows($result);
luk_forbindelse();
if ($check==0) { $fejl1="Der findes ingen bruger med det brugernavn<br>"; $status++;} elseif ($check>0) {
men ligemeget hjælper det. Den vil ikke logge ind og laver ingen fejlmeddelelser på loginet
Synes godt om
Ny brugerNybegynder
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.