Avatar billede human Nybegynder
09. november 2003 - 19:14 Der er 16 kommentarer og
1 løsning

Smartere måde at tjekke felter på

Det er sådan set mest en idé/forklaring jeg søger her.
Jeg har lavet et brugersystem.
Lad os sige at brugeren vil registre sig, med user,pass,name osv. Når brugeren så har trykket på submit, bliver han smidt videre til en side der tjekker om brugernavnet eksisterer osv. Hvis det ikke gør bliver han smidt tilbage, og alle felter er så tomme igen. Og det er jo ikke skide fedt.

Er der en der har et godt forslag til hvordan det kan gøres, så fejlen/fejlene kommer frem på samme side, under det pågældende felt.

Eksempel:

<form action="" method="">
User: <input type="text">
<? Her skal der udskrives hvis username er optaget ?>
pass: <input type="text">
<? osv. ?>
name: <input type="text">
<? osv. ?>
</form>

Hvis der er 2 ting galt, skal begge fejl komme frem samtidig, altså, alle felter skal tjekkes med det samme selvom den finder fejl i det første. Og de felter der ikke er noget ivejen med, skal forblive.

Håber du forstod det.
Avatar billede fangel Nybegynder
09. november 2003 - 19:26 #1
fx

<?php
$errors = array();
$fejl = 3; //antal forskellige felter
if(isset($_POST['user'])){ // der er trykket på submit, og "user" findes
  if(trim($_POST['user']) == '') $errors['user'] = 'Ikke udfyldt!';
  else {
    // tjek om brugernavn er optages, hvis ja sæt $errors['user'] til 'Optaget'
    // hvis ikke, så lav $fejl--;
  }
}
else $errors['user'] = "Ikke udfyldt!";

if(isset($_POST['paswd'])) { // form sendt, og "paswd" findes
  if(trim($_POST['paswd']) == '') $errors['paswd'] = 'Ikke udfyldt!';
  else $fejl--;
}
else $errors['paswd'] = "Ikke udfyldt!";

if(isset($_POST['name'])) { // form sendt, og "name" findes
  if(trim($_POST['name']) == '') $errors['name'] = 'Ikke udfyldt!';
  else $fejl--;
}
else $errors['name'] = "Ikke udfyldt!";

if(!$fejl){ // ingen fejl!
  $user = $_POST['user'];
  $paswd = $_POST['paswd'];
  $name = $_POST['name']:
  // gør noget - fx indsæt i db
}

// formen

echo '<form ....>';
echo 'User: <input type="text" name="user">';
if(isset($errors['user'])) echo $errors['user'];

echo '<br><br>Paswd: <input type="password" name="paswd">';
if(isset($errors['paswd'])) echo $errors['paswd'];

echo '<br><br>Name: <input type="text" name="name">';
if(isset($errors['name'])) echo $errors['name'];
?>

---

men, det ville være nemmere med en klasse der generede formen - så kunne den aut. udylde value="", hvis der var blevet sendt!

Morten
Avatar billede human Nybegynder
09. november 2003 - 20:54 #2
Jeg prøver lige at arbejde lidt med det. Har sikkert en masse spørgsmål om lidt ;)
Avatar billede human Nybegynder
09. november 2003 - 21:24 #3
Det synes jeg nu godt nok opfører sig underligt. Så snart jeg kommer ind på siden står der ud for felterne. Ikke udfyldt! Og det er på sin vis også korrekt, men har ikke ligefrem haft chancen for det.

Således ser scriptet ud nu:
<?php
$errors = array();
$fejl = 3; //antal forskellige felter
if(isset($_POST['user'])){ // der er trykket på submit, og "user" findes
  if(trim($_POST['user']) == '') $errors['user'] = 'Ikke udfyldt!';
  else $fejl--;
   
  }

else $errors['user'] = "Ikke udfyldt!";

if(isset($_POST['paswd'])) { // form sendt, og "paswd" findes
  if(trim($_POST['paswd']) == '') $errors['paswd'] = 'Ikke udfyldt!';
  else $fejl--;
}
else $errors['paswd'] = "Ikke udfyldt!";

if(isset($_POST['name'])) { // form sendt, og "name" findes
  if(trim($_POST['name']) == '') $errors['name'] = 'Ikke udfyldt!';
  else $fejl--;
}
else $errors['name'] = "Ikke udfyldt!";

if(!$fejl){ // ingen fejl!
  $user = $_POST['user'];
  $paswd = $_POST['paswd'];
  $name = $_POST['name'];

print "Og det sættes nu i db'en!";

}

// formen

echo "<form action='register.php' method='post'>";
echo "User: <input type='text' name='user'>";
if(isset($errors['user'])) echo $errors['user'];

echo "<br /><br />Paswd: <input type='password' name='paswd'>";
if(isset($errors['paswd'])) echo $errors['paswd'];

echo "<br /><br />Name: <input type='text' name='name'>";
if(isset($errors['name'])) echo $errors['name'];
print "
<input type='submit' name='submit' value='Register'>
</form>
";
?>
Avatar billede human Nybegynder
09. november 2003 - 21:27 #4
Men det ser ud til at virke, bortset fra at der ikke skal stå Ikke udfyldt! Så snart man kommer ind på siden.
Avatar billede human Nybegynder
09. november 2003 - 22:59 #5
Og de korrekte felter slettes forresten også hvis der er et felt der ikke er korrekt.
Avatar billede human Nybegynder
10. november 2003 - 01:58 #6
Kan du ikke komme med det klasse eksempel du snakkede om?
Avatar billede fangel Nybegynder
10. november 2003 - 16:37 #7
du skal bare slette dem der står

if(isset(..){
  ...
}
else ...

til

if(isset(...)){
  ...
}

---

du kan selv lege med noget

<input type="text" name="user"<?php if isset($_POST['user']) echo ' value="' . $_POST['user'] . '"'; ?>

her er det dog nemmere at lave en klasse til det - eller en anden form for funktion, så du ikke skal skrive helt så meget

Morten
Avatar billede human Nybegynder
10. november 2003 - 17:06 #8
Okay, tror jeg er ved at forstå det nu.
Men jeg er lidt i tvivl om denne:

$errors = array();
$fejl = 3; //antal forskellige felter
if(isset($_POST['user'])){ // der er trykket på submit, og "user" findes
  if(trim($_POST['user']) == '') $errors['user'] = 'Ikke udfyldt!';
  else {
    // tjek om brugernavn er optages, hvis ja sæt $errors['user'] til 'Optaget'
    // hvis ikke, så lav $fejl--;
  }
}
else $errors['user'] = "Ikke udfyldt!";

Jeg er i tvivl om den $fejl--; der og hvordan du vil have jeg skal sætte $errors['user'] til 'Optaget'.

Vil du prøve se om du kan få det her til at passe sammen med:

if(mysql_result(mysql_query("SELECT COUNT(*) FROM registration WHERE user='$user'"),0) == 1) {
    print "The Desired username is not available!<br />";
}

Kan ikke gennemskue det. Sætter self point op.
Avatar billede human Nybegynder
10. november 2003 - 17:07 #9
Behøver self ikke forgå på den måde. Men kan ikke lige se mig ud af det.
Avatar billede fangel Nybegynder
10. november 2003 - 17:11 #10
if(isset($_POST['user'])){ // der er trykket på submit, og "user" findes
  if(trim($_POST['user']) == '') $errors['user'] = 'Ikke udfyldt!';
  else {
    if(mysql_result(mysql_query("SELECT COUNT(*) FROM registration WHERE user='$user'"),0) == 1)
    {
      $errors['user'] = 'Optaget';
    }
    else
    {
      $fejl--;
    }
  }
}

det var da ikke så svært - vel ;)

Morten
Avatar billede human Nybegynder
10. november 2003 - 17:29 #11
Nej okay.. :)

Kan bare ikke gennemskue $fejl--; funktion.

Har aldrig set --; før.
Avatar billede fangel Nybegynder
10. november 2003 - 17:33 #12
-- = træk et fra tallet (det samme som $tal = $tal - 1;)

++ = læg et til tallet

Morten
Avatar billede human Nybegynder
10. november 2003 - 17:44 #13
Fair nok :)

Men det virker nu stadig ikke. Der er dog ingen fejl beskeder:

$errors = array();
$fejl = 1; //antal forskellige felter
if(isset($_POST['login'])){ // der er trykket på submit, og "user" findes
  if(trim($_POST['login']) == '') $errors['login'] = 'empty';
  else {
  if(mysql_result(mysql_query("SELECT COUNT(*) FROM registration WHERE login='$login'"),0) == 1)
    {
      $errors['login'] = 'In use';
    }
    else
    {
      $fejl--;
    }
  }
}
else $errors['login'] = "Field Username is required!";



if(!$fejl){ // ingen fejl!
  $login = $_POST['login'];

print "Smid i db.";

}

?>


<form action="register.php" method="post">
*Username:<br>
<input type="text" name="login" class="inputfield" <? if(isset($_POST['login'])) print ' value="' . $_POST['login'] . '"'; ?>><br>
<input type="submit" name="submit" value="Register" class="inputbutton">
</form>

Den siger ikke noget om ikke udfyldte felter mere. Og siger ikke hvis brugernavn er optaget. Men den siger dog Smid i db hvis bruger navn ikke er optaget. Lidt hjælp? :)
Avatar billede fangel Nybegynder
10. november 2003 - 18:02 #14
[koden over dette]

<form action="register.php" method="post">
*Username:<br>
<input type="text" name="login" class="inputfield" <? if(isset($_POST['login'])) print ' value="' . $_POST['login'] . '"'; ?>><br>
<?php if(isset($errors['login'])) echo $errors['login']; ?>
<input type="submit" name="submit" value="Register" class="inputbutton">
</form>

Morten
Avatar billede human Nybegynder
10. november 2003 - 18:47 #15
Ahh.. Kunne være jeg skulle vågne op. Mange tak skal du have.

Jeg skal til at lave mere error checking på andre felter senere. Der kommer nok flere spørgsmål :)

Du får tak!
Avatar billede human Nybegynder
10. november 2003 - 18:47 #16
Smid svar btw :)
Avatar billede fangel Nybegynder
15. november 2003 - 20:40 #17
min harddisk gik ned - undskyld ventetiden - nu har jeg næsten mit Gentoo oppe at køre (det er sku' fedt)

Morten
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