Avatar billede LilleUdvikler Nybegynder
16. maj 2011 - 13:41 Der er 12 kommentarer og
1 løsning

Opret funktion i Login

Hej experter.

Jeg har et login system, som skal have en opret bruger funktion.

Jeg er i gang med noget validering.

Men det er som om, at selvom valideringen ikke er korrekt så oprettet den en bruger alligevel.

I kan se det på: www.twimb.dk/pressrest/opretbruger.php

Og koden for opret.php er her:


<?php

include('connect_login.php');

function validering($data)
{
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    $data = mysql_escape_string($data);
    return $data;
}

$errbrugernavn = "";
$erremail = "";
$errtelefon = "";
$errnavn = "";
$errpassword = "";
$erradresse = "";
$errtelefon = "";
$errrptpwd = "";

if(isset($_POST['brugernavn']) && isset($_POST['password']) && isset($_POST['navn']) && isset($_POST['adresse']) && isset($_POST['telefon']) && isset($_POST['email']))

{
   
    if(empty($_POST['brugernavn']))
    {
        echo "Du skal udfylde brugernavn.<br>";   
    }
    if(empty($_POST['password']))
    {
        echo "Du skal udfylde password.<br>";   
    }
    if(empty($_POST['navn']))
    {
        echo "Du skal udfylde navn.<br>";   
    }
    if(empty($_POST['adresse']))
    {
        echo "Du skal udfylde adresse.<br>";   
    }
    if(empty($_POST['telefon']))
    {
        echo "Du skal udfylde telefon.<br>";   
    }
    if(empty($_POST['email']))
    {
        echo "Du skal udfylde email.<br>";   
    }
   
//Validering

    if(preg_match("/^[0-9a-zA-Z]+$/", $_POST["brugernavn"]) === 0)
    {
    $errbrugernavn = "Brugernavn er ugyldigt.<br>";
    }
    if(preg_match("/^[a-zA-Z]\w+(\.\w+)*\@\w+(\.[0-9a-zA-Z]+)*\.[a-zA-Z]{2,4}$/", $_POST["email"]) === 0)
    {
    $erremail = "E-mail er ikke gyldig.<br>";
    }   
    if(preg_match("/\d/", $_POST["telefon"]) === 0)
    {
    $errtelefon = "Det er vidst ikke dit telefon nummer.<br>";
    }
    if(preg_match("/^[A-Z][a-zA-Z -]+$/", $_POST["navn"]) === 0)
    {
    $errnavn = "Dit navn må kun indeholde bogstaver, mellemrum og bindestreg.<br> Det skal også starte med stort.<br>";
    }
    if(preg_match("#.*^(?=.{8,20})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9]).*$#", $_POST["password"]) === 0)
    {
    $errpassword = "Dit password skal indeholde: bogstaver, mindst 1 symbol, mindst 1 tegn og mindst 1 stort bogstav.<br>
                      Desuden skal dit password være mellem 8 og 20 tegn.";
    }
    if(preg_match("/^[0-9a-zA-Z -]+$/", $_POST["adresse"]) === 0)
    {
    $erradresse = "Adressen er ugyldig.<br> Bogstaver og tal er tilladt.";
    }
    if(preg_match("/^\d{2}-\d{2}-\d{2}-\d{2}$/", $_POST["telefon"]) === 0)
    $errtelefon = "Dit telefon nummer skal matche 12-34-56-78.<br> Husk bindestreg.";

   
else
{
// Hent indtastede data fra formen
$brugernavn=validering($_POST['brugernavn']);
$password=validering($_POST['password']);
$navn=validering($_POST['navn']);
$adresse=validering($_POST['adresse']);
$telefon=validering($_POST['telefon']);
$email=validering($_POST['email']);

   
// Indsæt data i database
$password = md5($password);
$opretsql="INSERT INTO $tbl_name(brugernavn, password, navn, adresse, telefon, email)VALUES('$brugernavn', '$password', '$navn', '$adresse', '$telefon', '$email')";

if(mysql_query($opretsql)) 
    echo "Du er oprettet som bruger. <br> Du kan nu logge ind.";
  }
}


?>

<table width="450">
<tr>
    <td style="font-size:9px;color:#039;"><?php  if(isset($errbrugernavn)) echo $errbrugernavn; ?></td>
</tr>
<tr>
    <td style="font-size:9px;color:#039;"><?php  if(isset($errpassword)) echo $errpassword; ?></td>
</tr>
<tr>
    <td style="font-size:9px;color:#039;"><?php  if(isset($errrptpwd)) echo $errrptpwd; ?></td>
</tr>
<tr>
    <td style="font-size:9px;color:#039;"><?php  if(isset($errnavn)) echo $errnavn; ?></td>
</tr>
<tr>
    <td style="font-size:9px;color:#039;"><?php  if(isset($erradresse)) echo $erradresse; ?></td>
</tr>
<tr>
    <td style="font-size:9px;color:#039;"><?php  if(isset($errtelefon)) echo $errtelefon; ?></td>
</tr>
<tr>
    <td style="font-size:9px;color:#039;"><?php  if(isset($erremail)) echo $erremail; ?></td>
</tr>
</table>


<h2>Opret bruger</h2>

<form name="form1" method="post" action="opretbruger.php">
<table width="450">
  <tr>
      <td><h3>Brugeroplysninger</h3></td>
  </tr>
  <tr>
    <td>Brugernavn: (*)</td>
  </tr>
  <tr>
    <td><input name="brugernavn" type="text" id="name" style="width:60%;" value="<?php $_POST['brugernavn'] ?>"></td>
  </tr>
  <tr>
    <td>Ønsket adgangskode: (*)</td>
  </tr>
  <tr>
    <td><input name="password" type="password" id="password" style="width:60%;" value="<?php $_POST['password'] ?>"></td>
  </tr>
  <tr>
      <td>Gentag adgangskode: (*)</td>
  </tr>
  <tr>
      <td><input name="passwordrepeat" type="password" id="passwordrepeat" style="width:60%;" value="<?php $_POST['passwordrepeat'] ?>"></td>
  </tr>
  <tr>
      <td><h3>Kontaktoplysninger</h3></td>
  </tr>
  <tr>
    <td>Navn: (*)</td>
  </tr>
  <tr>
    <td><input name="navn" type="text" id="navn" style="width:60%;" value="<?php $_POST['navn'] ?>" /></td>
  </tr>
  <tr>
    <td>Adresse: (*)</td>
  </tr>
  <tr>
    <td><input name="adresse" type="text" id="adresse" style="width:60%;" value="<?php $_POST['adresse'] ?>" /></td>
  </tr>
  <tr>
    <td>Telefon: (*)</td>
  </tr>
  <tr>
    <td><input name="telefon" type="text" id="telefon" style="width:60%;" value="<?php $_POST['telefon'] ?>" /></td>
  </tr>
  <tr>
    <td>E-mail: (*)</td>
  </tr>
  <tr>
    <td><input name="email" type="text" id="email" style="width:60%;" value="<?php $_POST['email'] ?>" /></td>
  </tr>
  <tr>
    <td style="text-align:center;"><input type="submit" name="opret-bruger" value="Opret bruger" style="background-color:#fff;"></td>
  </tr>
  <tr>
      <td>Felter markeret med * skal udfyldes.</td>
  </tr>
</table>
</form>
Avatar billede repox Seniormester
16. maj 2011 - 13:48 #1
Det er fordi at når du bruger isset() på en $_POST variabel, så vil udtrykket evaluere som sandt, hvis du bare har et input felt med navnet på det $_POST index du vil validere på.

Så vil empty() være bedre at bruge.
Avatar billede LilleUdvikler Nybegynder
16. maj 2011 - 13:58 #2
Jeg har nu ændret det til empty()

<table width="450">
<tr>
    <td style="font-size:9px;color:#039;"><?php  if(empty($errbrugernavn)) echo $errbrugernavn; ?></td>
</tr>
<tr>
    <td style="font-size:9px;color:#039;"><?php  if(empty($errpassword)) echo $errpassword; ?></td>
</tr>
<tr>
    <td style="font-size:9px;color:#039;"><?php  if(empty($errrptpwd)) echo $errrptpwd; ?></td>
</tr>
<tr>
    <td style="font-size:9px;color:#039;"><?php  if(empty($errnavn)) echo $errnavn; ?></td>
</tr>
<tr>
    <td style="font-size:9px;color:#039;"><?php  if(empty($erradresse)) echo $erradresse; ?></td>
</tr>
<tr>
    <td style="font-size:9px;color:#039;"><?php  if(empty($errtelefon)) echo $errtelefon; ?></td>
</tr>
<tr>
    <td style="font-size:9px;color:#039;"><?php  if(empty($erremail)) echo $erremail; ?></td>
</tr>
</table>

Men det er, som om den stadig ikke validere..
Avatar billede LilleUdvikler Nybegynder
16. maj 2011 - 14:03 #3
Hvis jeg ændre

if(preg_match("/^[0-9a-zA-Z]+$/", $_POST["brugernavn"]) === 0)
    {
    $errbrugernavn = "Brugernavn er ugyldigt.<br>";
    }

til fx:

if(!preg_match("/^[0-9a-zA-Z]+$/", $brugernavn))
    {
    die("Brugernavn er ugyldigt.<br>");
    }

og det samme på alle de andre, så stopper den det og fortæller mig Brugernavn ugyldigt, eller password dårligt. Osv osv.

MEN - når jeg gør det på den måde, så stopper den jo alt andet udførelse af resten af siden, så det kun er menuen og text feltet med error teksten inden i man kan se.
Avatar billede jantzen88 Nybegynder
16. maj 2011 - 14:25 #4
Den vil heller ikke validere korrekt.

Prøv at kigge dine if's igennem så kan du se at den ikke validere.
Prøv i stedet for din else at lave en if som tjekker på om nogen af dine $err er sat til noget (Det er lidt nemmere hvis du opretter en array og læser på om du har nogen error i den. $err = array(); $err["brugernavn"] = "Brugernavn er ugyldigt.<br>"; osv)

så hvis du ændre til array så kan du lave en count på din array.
if (count($err) == 0) {
  //Opret bruger
}
else {
  //Hovsa, det er vist smuttet noget.
}
Avatar billede LilleUdvikler Nybegynder
16. maj 2011 - 15:51 #5
Hej jantzen.

Jeg er ikke sikker på, hvordan jeg laver et array. Kan du prøve at sætte et kort op med mit script som eksempel? Du behøver ikke gøre det flrdigt, bare så jeg kan se hvad det går ud på. Så skal jeg nok selv infde ud af resten :)
Avatar billede jantzen88 Nybegynder
16. maj 2011 - 17:06 #6
Har godt nok lavet det hele http://88.80.202.111/lilleudvikler.phps

Men har tilføjet:

$err = array();
istedet for
$errbrugernavn = "";
$erremail = "";
osv.

$errbrugernavn = "Brugernavn er ugyldigt.<br>";
til
$err["brugernavn"] = "Brugernavn er ugyldigt.<br>";

Har ændret din else til en if. Den tjekker om din array stadig er tom, Dvs. At der ingen error beskeder er

else {
// Hent indtastede data fra formen

til

if (count($err) == 0) {
// Hent indtastede data fra formen

Og så den table der viser alle dine error beskeder har jeg ændret til

//tjekker om der er sat nogen error beskeder
elseif (count($err) > 0)
{
    echo '<table width="450">';
    //loop igennem med foreach for at få alle error beskeder i $msg
    foreach($err as $msg)
    {
        //viser alle error beskeder som er sat i vores array - vil du have din gamle metode tilbage kan du lave en echo på dit array - echo $err["brugernavn"]
        echo "<tr><td style=\"font-size:9px;color:#039;\">$msg</td></tr>";
    }
    echo '</table>';
}
Avatar billede LilleUdvikler Nybegynder
16. maj 2011 - 17:06 #7
Når jeg kun validere brugernavn og adgangskode, også skriver et ikke-valideret indhold, så kan den sagtens, som det ser ud nu på den her måde:

<?php

include('connect_login.php');

function validering($data, $problem='')
{
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    $data = mysql_escape_string($data);
    if ($problem && strlen($data) == 0)
    {
        err($problem);
    }
    return $data;
}

function err($loginErr)
{
    echo $loginErr;
    }


if(isset($_POST['brugernavn']) && isset($_POST['password']) && isset($_POST['navn']) && isset($_POST['adresse']) && isset($_POST['telefon']) && isset($_POST['email']))

{
   
    if(empty($_POST['brugernavn']))
    {
        echo "Du skal udfylde brugernavn.<br>";   
    }
    if(empty($_POST['password']))
    {
        echo "Du skal udfylde password.<br>";   
    }
//    if(empty($_POST['navn']))
//    {
//        echo "Du skal udfylde navn.<br>";   
//    }
//    if(empty($_POST['adresse']))
//    {
//        echo "Du skal udfylde adresse.<br>";   
//    }
//    if(empty($_POST['telefon']))
//    {
//        echo "Du skal udfylde telefon.<br>";   
//    }
//    if(empty($_POST['email']))
//    {
//        echo "Du skal udfylde email.<br>";   
//    }
   
//Validering

    if(preg_match("/^[0-9a-zA-Z]+$/", $_POST["brugernavn"]) === 0)
    {
        err("Brugernavn er ugyldigt.<br>");
    }
//    if(preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $_POST['email']) === 0)
//    {
//        err("E-mail er ikke gyldig.<br>");
//    }   
//    if(preg_match("/\d/", $_POST["telefon"]) === 0)
//    {
//        err("Det er vidst ikke dit telefon nummer.<br>");
//    }
//    if(preg_match("/^[A-Z][a-zA-Z -]+$/", $_POST["navn"]) === 0)
//    {
//        err("Dit navn må kun indeholde bogstaver, mellemrum og bindestreg.<br> Det skal også starte med stort.<br>");
//    }
    if(preg_match("#.*^(?=.{8,20})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9]).*$#", $_POST["password"]) === 0)
    {
        err("Dit password skal indeholde: bogstaver, mindst 1 symbol, mindst 1 tegn og mindst 1 stort bogstav.<br>
                      Desuden skal dit password være mellem 8 og 20 tegn.");
    }
//    if(preg_match("/^[0-9a-zA-Z -]+$/", $_POST["adresse"]) === 0)
//    {
//        err("Adressen er ugyldig.<br> Bogstaver og tal er tilladt.");
//    }
//    if(preg_match("/^\d{2}-\d{2}-\d{2}-\d{2}$/", $_POST["telefon"]) === 0)
//    {
//        err("Dit telefon nummer skal matche 12-34-56-78.<br> Husk bindestreg.");
//    }
   
else

{
// Hent indtastede data fra formen
$brugernavn=validering($_POST['brugernavn']);
$password=validering($_POST['password']);
$navn=validering($_POST['navn']);
$adresse=validering($_POST['adresse']);
$telefon=validering($_POST['telefon']);
$email=validering($_POST['email']);

   
// Indsæt data i database
$password = md5($password);
$opretsql="INSERT INTO $tbl_name(brugernavn, password, navn, adresse, telefon, email)VALUES('$brugernavn', '$password', '$navn', '$adresse', '$telefon', '$email')";

if(mysql_query($opretsql)) 
    echo "Du er oprettet som bruger. <br> Du kan nu logge ind.";
  }
}


?>

<h2>Opret bruger</h2>

<form name="form1" method="post" action="opretbruger.php">
<table width="450">
  <tr>
      <td><h3>Brugeroplysninger</h3></td>
  </tr>
  <tr>
    <td>Brugernavn: (*)</td>
  </tr>
  <tr>
    <td><input name="brugernavn" type="text" id="name" style="width:60%;" value="<?php $_POST['brugernavn'] ?>"></td>
  </tr>
  <tr>
    <td>Ønsket adgangskode: (*)</td>
  </tr>
  <tr>
    <td><input name="password" type="password" id="password" style="width:60%;" value="<?php $_POST['password'] ?>"></td>
  </tr>
  <tr>
      <td>Gentag adgangskode: (*)</td>
  </tr>
  <tr>
      <td><input name="passwordrepeat" type="password" id="passwordrepeat" style="width:60%;" value="<?php $_POST['passwordrepeat'] ?>"></td>
  </tr>
  <tr>
      <td><h3>Kontaktoplysninger</h3></td>
  </tr>
  <tr>
    <td>Navn: (*)</td>
  </tr>
  <tr>
    <td><input name="navn" type="text" id="navn" style="width:60%;" value="<?php $_POST['navn'] ?>" /></td>
  </tr>
  <tr>
    <td>Adresse: (*)</td>
  </tr>
  <tr>
    <td><input name="adresse" type="text" id="adresse" style="width:60%;" value="<?php $_POST['adresse'] ?>" /></td>
  </tr>
  <tr>
    <td>Telefon: (*)</td>
  </tr>
  <tr>
    <td><input name="telefon" type="text" id="telefon" style="width:60%;" value="<?php $_POST['telefon'] ?>" /></td>
  </tr>
  <tr>
    <td>E-mail: (*)</td>
  </tr>
  <tr>
    <td><input name="email" type="text" id="email" style="width:60%;" value="<?php $_POST['email'] ?>" /></td>
  </tr>
  <tr>
    <td style="text-align:center;"><input type="submit" name="opret-bruger" value="Opret bruger" style="background-color:#fff;"></td>
  </tr>
  <tr>
      <td>Felter markeret med * skal udfyldes.</td>
  </tr>
</table>
</form>
Avatar billede LilleUdvikler Nybegynder
16. maj 2011 - 17:27 #8
Mange tak. Det er jeg godt nok glad for!

Jeg har bare et sidste problem. Den udskriver ikke fejlen.
Avatar billede olsensweb.dk Ekspert
16. maj 2011 - 17:29 #9
det er ganske fint du checker serverside om felterne er udfyldt, men ville det ikke værer smarterer også , at checke det clientside (js) ??
så får du ikke posted data til serveren, "uden grund" (nogle brugerer kan dog finde på at slå js fra/manipulerer med det, og der vil dit serverside check komme i brug)

#5
http://olsensweb.dk/test/experten/spm/938960/opretbruger.php?source
den udskriver også fejlene

nb: tabeller er til tabulærer data ikke til design.
Avatar billede LilleUdvikler Nybegynder
16. maj 2011 - 17:35 #10
Jeg har faktisk ikke brugt javascript fordi der er meget snak om, det ikke er for usikkert osv osv. Også fordi, som du selv siger at folk slår det fra.
Avatar billede LilleUdvikler Nybegynder
16. maj 2011 - 18:05 #11
jantzen, kan du ikke smide et svar? :o) Det fungerer fint.
Avatar billede jantzen88 Nybegynder
16. maj 2011 - 18:51 #12
Jo da. Håber det kunne bruges, ellers så sig til.
Men som #9 siger så er det en god idé med noget JavaScript til at validere med også, du SKAL ha din PHP validering, men som #9 siger så for at spare lidt tid og data så kan man allerede med JavaScript validere for evt fejl.
Avatar billede LilleUdvikler Nybegynder
16. maj 2011 - 20:02 #13
Okay, jeg vil kigge nærmere på det :o)

- Kan du evt. lige tjekek om det også fungere hos dig? Så det ikke kun er hos mig :) Bare hvis du gider. Også skrive en privat besked til mgi :)
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