09. november 2003 - 19:14Der 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.
<?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 }
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!";
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 />"; }
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? :)
min harddisk gik ned - undskyld ventetiden - nu har jeg næsten mit Gentoo oppe at køre (det er sku' fedt)
Morten
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.