Avatar billede mulles.tk Nybegynder
05. april 2005 - 22:39 Der er 18 kommentarer

brugernavn optaget <tilbage>

Jeg har en formular som før afsendelse gennemgår en masse valideringer, men til sidst skal jeg have tjekket om brugernavnet allerede er optaget eller ej, self. ved kald til databasen...

Forspørgsel skal være noget med:
if(isset($_POST['opret'])) {
$query = mysql_query("SELECT * FROM it_stud_bruger WHERE stud_bruger='$bruger'");
       
    if (mysql_num_rows($query) == "0") {
    mysql_query("INSERT INTO it_stud_bruger (`navn`, `adr`, `postnr`, `fodt`, `udd_navn`, `udd_sted`, `aar_start`, `aar_slut`, `email`, `tlf`, `stud_bruger`, `oprettet`) VALUES ('$navn', '$adr', '$postnr', '$fodt', '$udd_navn', '$udd_sted', '$aar_start', '$aar_slut', '$email', '$tlf', '$stud_bruger', NOW())") or die(mysql_error());
    header("Location: logind.php?oprettet");

    } else{

OG SÅ ER DET DEN SKAL GÅ TILBAGE, MEN UDEN AT SLETTE DE DATA DER ER ALLEREDE ER INDTASTET!!! KAN DET LADE SIG GØRE MED:

"<script type=\"text/javascript\">alert(\"Brugernavn: $bruger allerede taget!\");history.go(-1)</script>";

ELLER HVORDAN!?
    }
}
Avatar billede mysli Nybegynder
05. april 2005 - 22:41 #1
Kan du prøve inden du spørger:)?
Avatar billede martin1000ben Nybegynder
05. april 2005 - 22:43 #2
Jeg ville gøre sådan her:

if(isset($_POST["submit"])) {
  if($_POST["felt"] == "") $fejl[] = "En fejl";
  if(!isset($fejl)) {
    ... opdater databasen ...
  }
}

print "<input type='text' name='felt' value='$_POST["felt"]'>";
print "<input type='submit' name='submit'>";
Avatar billede mulles.tk Nybegynder
05. april 2005 - 22:52 #3
mysli: Nej det fungerer ikke helt... hehe...

martin1000ben: Der er utrolig mange felter, så det vil sige jeg skal sætte alle value til dette $_POST["felt"]' ...selvfølgelig specificeret til det enkelte felt!?
Avatar billede mulles.tk Nybegynder
05. april 2005 - 22:58 #4
Med det jeg selv har lavet får jeg flg. fejl:
Parse error: parse error, unexpected $ in /home/web/gb1570/skoleprojekt/stud_opret.php on line 252

...og det ser sådan her ud:

if(isset($_POST['opret'])) {

    $navn        = $_POST['navn'];
    $adr        = $_POST['adr'];
    $postnr        = $_POST['postnr'];
    $fodt        = $_POST['f_dag']."-".$_POST['f_maned']."-".$_POST['f_aar'];
    $udd_navn    = $_POST['udd_navn'];
    $udd_sted    = $_POST['udd_sted'];
    $aar_start    = $_POST['aar_start'];
    $aar_slut    = $_POST['aar_slut'];
    $email        = $_POST['email'];
    $tlf        = $_POST['tlf'];
    $stud_bruger = $_POST['bruger'];
   
if(isset($_POST['opret'])) {
$query = mysql_query("SELECT * FROM it_stud_bruger WHERE stud_bruger='$stud_bruger'");
       
    if (mysql_num_rows($query) == "0") {
   
        mysql_query("INSERT INTO it_stud_bruger (`navn`, `adr`, `postnr`, `fodt`, `udd_navn`, `udd_sted`, `aar_start`, `aar_slut`, `email`, `tlf`, `stud_bruger`, `oprettet`) VALUES ('$navn', '$adr', '$postnr', '$fodt', '$udd_navn', '$udd_sted', '$aar_start', '$aar_slut', '$email', '$tlf', '$stud_bruger', NOW())") or die(mysql_error());
        header("Location: index.php?vis=logind.php");

    } else{

        echo "<script type=\"text/javascript\">alert(\"Brugernavn allerede taget!\");history.go(-1)</script>";
    }
}
?>
Avatar billede martin1000ben Nybegynder
05. april 2005 - 23:16 #5
11 felter - er det mange? :P

anyway - du har garanteret allerede en masse i ren html

<input type='text' name='...'>

så er det bare at copy/paste name og skrive value istedet for name og smide et $ ind foran nu hvor du alligevel laver (unødvendigt) alle $_POST om til $... alligevel
Avatar billede mulles.tk Nybegynder
05. april 2005 - 23:24 #6
hehe.... har fået mit eget til at virke....

Grunden til jeg fik fejlen var at der står
if(isset($_POST['opret'])) {
...2 gange!

Jeg ved godt at det er unødvendigt at lave $_POST[] om til variabler, men synes det gør det mere overskueligt...

Men læg et svar, så får du 50 point..!
Avatar billede martin1000ben Nybegynder
05. april 2005 - 23:28 #7
Et godt råd - husk at kontrollere dine brugers input - ellers kan det gå gruligt galt :)

Men behold du bare selv points :)
Avatar billede mulles.tk Nybegynder
05. april 2005 - 23:33 #8
ahh... må jeg hellere få lavet, altså således at der ikke kan komme noget fjendtligt indhold, right? Nu er det heldigvis kun til at projekt, men vil jo være godt nok at kunne argumentere for... Kan du måske lave det?
Avatar billede cpfrande Nybegynder
06. april 2005 - 09:03 #9
Hvad med bare at lave det i samme fil, fremfor poste sin formulars indhold ind i en anden fil? Derved vil du lettere kunne åbne for muligheden, men samtidig også stadig kunne bevare "sikkerheden" ved ikke bare at kunne trykke "Opdater" og så gensende dataerne.

Var bare et forslag, hvis det var... :P
Avatar billede mulles.tk Nybegynder
06. april 2005 - 10:58 #10
formularen og hele funktionen overfor, der indsætter det i DB'en er i en og samme fil....
Avatar billede martin1000ben Nybegynder
06. april 2005 - 11:54 #11
function invalid_felt($str) {
    if(trim(htmlentities(strip_tags($str))) == "") { return true; } else { return false; }
}

function invalid_email($q) {
    if (ereg ("^.+@.+\\..+$", $q)) { Return false; } else { Return true; }
}

function invalid_link($str) {
    if(trim(substr_count($str,".")) < 2) return true; else return false;
}

jeg bruger 3 funktioner når jeg skal validere felter

1. funktion til ren tekst felter
if(invalid_felt($_POST["tekst"])) $fejl[] = "Du skal skrive noget!";

2. funktion til email felter
if(invalid_email($_POST["email"])) $fejl[] = "Din email er ugyldig";

3. funktion til link felter (ikke særlig optimal men tager de fleste "fejl" væk
if(invalid_link($_POST["link"])) $fejl[] = "Du skal skrive et link!";
Avatar billede cpfrande Nybegynder
06. april 2005 - 13:43 #12
Jeg tror du skal overveje en anden form for "gå tilbage" funktionalitet.

f.eks.
if ($_GET['post'] == 1)
{
  // Validering

  if (!isset($error))
  {
  }
}

if (isset($error))
  echo $error;

// din formular
Avatar billede mulles.tk Nybegynder
06. april 2005 - 14:44 #13
martin1000ben: Jeg har allerede et script der tjekker indholdet i formularen,

<script type="text/javascript">

  function validateForm( myForm ){
    blankReg = /^\s*$/;
    passReg = /^[a-z]{6,}$/;
    brugernReg = /^[a-z\d]{6,}$/;   

    //check at alle elementer med id="validate" er udfyldt

    elements = myForm.elements;   
                for (i=0;i<elements.length;i++){
                        elm = elements[i];
                        if( elm.id == "validate" && blankReg.test( elm.value ) ){
                                alert( elm.felt + " skal udfyldes");
                                elm.focus();

                                return false;
                        }
                }

    //check at Pass1 er gyldigt

    elm = myForm.pass1;
    if( !passReg.test( elm.value ) ){
      alert("Password skal være mindst 6 tegn langt og må kun indeholde tegnene a-z");
      elm.focus();

      return false;
    }

    //check at brugernavn er gyldigt

        elm = myForm.bruger;
    if( !brugernReg.test( elm.value ) ){
      alert("Brugernavnet skal være mindst 5 tegn langt og må kun indeholde tegnene a-z");
      elm.focus();

      return false;
    }

    //check at Pass1 og Pass2 er ens

    elm = myForm.pass2;
    if( elm.value != myForm.pass1.value ){
      alert("De indtastede passwords er ikke ens!");
      elm.focus();

      return false;
    }

    return true;       
  }

</script>

...troede du tænkte på noget andet
Avatar billede mulles.tk Nybegynder
06. april 2005 - 14:45 #14
cpfrande: Hvorfor? Denne virker præcis som den skal, hvis brugernavnet allerede eksisterer fremkommer der en alert og man bliver sendt tilbage til formularen uden at dataerne er slettet
Avatar billede martin1000ben Nybegynder
06. april 2005 - 14:50 #15
Hvad med dem som ikke acceptere javascript?
De vil drøne ganske flot ind over dit kontrol :)
Avatar billede martin1000ben Nybegynder
06. april 2005 - 14:51 #16
og læs desuden den sidste funktion http://razor.dk/php/funktioner/ så vil du opdage at sådan kan man også undgå javascript kontrol.
Avatar billede cpfrande Nybegynder
06. april 2005 - 15:02 #17
mulles.tk: Ja, men det er så bare ikke i alle browseren, at den bevare dataerne. Det er ikke god programmeringsskik :-)

Desuden er JavaScript ikke det eneste, man skal have som kontrol! Det er usikkert, da man slå det fra i de fleste browsere, mens andre browsere slet ikke læser JavaScript. Du skal valider i PHP, hvis du vil holde dit script over et acceptabel sikkerhedsniveau.

- Kristian
Avatar billede martin1000ben Nybegynder
06. april 2005 - 15:15 #18
// input.php
<?php
if(!isset($_POST["submit"])) {
  if(invalid_felt($_POST["navn"])) $fejl[] = "Du skal skrive et navn";
  if(invalid_email($_POST["email"])) $fejl[] = "Du skal skrive en email";
  if(!isset($fejl)) {
    $sql = mysql_query("
                INSERT INTO tabel
                    (navn,email)
                VALUES (
                  '".$_POST["navn"]."'
                  , '".$_POST["email"]."'
                )
            ") OR DIE (mysql_error());
    print "Hurra nu har du oprettet en bruger";
            exit;
  }
}

if(isset($fejl)) {
  for($i=0;$i<sizeof($fejl);$i++) {
      print $fejl[$i]."<br>";
  }
}

print "<input type='text' name='navn' value='".$_POST["navn"]."'><br>";
print "<input type='text' name='email' value='".$_POST["email"]."'><br>";
print "<input type='submit' name='submit' value='Submit'>";
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