Avatar billede bas Forsker
18. april 2009 - 17:10 Der er 17 kommentarer og
1 løsning

Kombineret betingelse

Hej

Hvordan er det nu det er?

Jeg har en fil, der indeholder en formular og noget
PHP, der hhv. sørger for at poste og vise indholdet på siden.
Jeg vil gerne lave et tjek vha. PHP, der tjekker, om et felt
er udfyldt korrekt, men tjekket skal kun udføres, hvis der
bliver klikket på Send-knappen i formularen.

Jeg har nedenstående brudstykker, som jeg gætter på skal
sættes sammen på en eller anden måde. Jeg ved bare ikke
lige hvordan.

if (isset($_POST[submit])) // er der klikket på knappen?
{
......
}

if($tjekfelt != '.....') // Hvis bruger ikke har skrevet rigtigt i
tjekfeltet, skal php'en skrive nedenstående.
{
echo "Tjekfeltet er ikke udfyldt korrekt. <a href='form.php'>Tilbage</a>";
}

Jeg har forsøgt at sætte dem sammen i stil med:
if (isset($_POST[submit])&&($tjekfelt != '.....') )

Men den går vist ikke rigtigt, eller også mangler jeg i hvert
fald noget.

Mvh. Martin
Avatar billede majbom Novice
18. april 2009 - 19:26 #1
den kommer ind i denne if-sætning:

if (isset($_POST[submit])&&($tjekfelt != '.....') )

hvis der er trykket på knappen submit (du bør dog bruge ' rundt om "submit" i post-arrayet) og hvis tjekfelt har en værdi der IKKe "......"
Avatar billede haren Nybegynder
18. april 2009 - 20:59 #2
Det giver vel mindre arbejde for serveren hvis du placerer dit tjek af feltets korrekthed efter du har tjekket om formen overhovedet er postet? Men det kommer selvfølgelig an på hvordan du præcist har opbygget din form.

Eks:

if(isset.... {

  if($tjekfelt... {
  blablabla
  }

}
Avatar billede bas Forsker
19. april 2009 - 10:44 #3
splazz, mange tak for hjælpen.

Nedenstående ser ud til at fungere.
Der er måske nok en smartere og mere
elegant måde at gøre det på.

if (isset($_POST['submit'])&&($tjekfelt != '....'))
{
echo "Tjekfeltet er ikke udfyldt korrekt.";
}

elseif (isset($_POST['submit'])&&($tjekfelt = '....'))
{
$data = mysql_query("INSERT INTO nyblog VALUES('','$navn','$mail','$site','$textarea','$tjektfelt','$dato','$tid')") or die("Der er ingen forbindelse til databasen.");
}

Mvh. Martin
Avatar billede majbom Novice
19. april 2009 - 10:52 #4
den her vil altid være sand, hvis blot der er trykket på submit (der skal være to lighedstegn, når du tjekker om noget er ens, ellers tildeler du blot værdien til variablen, og medmindre den fejler, vil udsagnet altid være sandt).

du bør nok gøre det på harens metode, og det ville jeg egentlig også gøre, før kommenterede jeg blot på din kode (på den måde behøver du heller ikke at tjekke submit mere end én gang).

der kommer et svar her, men jeg synes haren skal have halvdelen :)
Avatar billede bas Forsker
19. april 2009 - 11:00 #5
Ok, vil I lige prøve at skrive præcist, hvordan jeg bør skirve koden?

if (isset($_POST['submit'])) // Er der klikket på knappen?
{
  if ($tjekfelt != '...') // Er tjekfeltet udfyldt korrekt?
  {
  echo "Tjekfeltet er ikke udfyldt korrekt.";
  }
}

Der skal vel så være noget der gør, at SQL'en kun bliver udført, hvis der er klikket på knappen. Men det er måske det med lighedstegnene - hvor skal de være?

Mvh. Martin
Avatar billede majbom Novice
19. april 2009 - 18:49 #6
if (isset($_POST['submit'])) // isset tjekker om variablen er sat, det er den kun hvis man trykker på knappen submit.
{
  if ($tjekfelt != '...') // tjekker om variablen er forskellig fra '...', og hvis den er, får man at vide at feltet ikke er udfylt korrekt - det skulle måske være omvendt, og evt. bare tjekke om feltet == '' (altså tomt)
  {
  echo "Tjekfeltet er ikke udfyldt korrekt.";
  }
}

du kan sætte en else på sidste if-sætning (den hvor du tjekker indholdet af $tjekfelt), hvori du smider data i db'en...
Avatar billede webweaver Praktikant
21. april 2009 - 00:04 #7
Der findes flere måder at lave det, men som i sidste ende, munder ud i det samme mere eller mindre. Det er forholdsvis simpelt det ovenover, men effektivt. Jeg har lige lavet et kort eksempel på den måde jeg altid laver validering på. Jeg har valgt at strukture mine koder således, som jeg gør, da det er super nemt at tilføje flere valideringer, hvis flere felter skulle være nødvendigt. Jeg har smidt lidt ekstra på, som altid kan smides fra uden problemer, hvis det ikke er nødvendigt.

<?   
   
    $showform = TRUE;
               
    // Et regex tjekker om mailen som bliver indtastet er valid. Vi kalder på den længere nede...
    define("PATTERN_EMAIL", "/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/");
           
    if (isset($_POST['submit'])) {
                       
        if (!$tjekfelt) {
           
            $fejl = "<p>Du mangler at udfylde feltet</p><br>";
            $showform = TRUE;
           
        }
       
        if (!$tjekfelt == "...") {
           
            $fejl = "<p>$fejlForkert værdi indtastet</p><br>";
            $showform = TRUE;
           
        }
           
        if ($_POST['email']) {
       
            if (!preg_match(PATTERN_EMAIL, $_POST['email'])) {
               
                $fejl = "$fejl<p>Din e-mail er ikke gyldig.</p><br>";
                $showform = TRUE;
               
            }           
       
        }
                                                       
        if (!$fejl) {
       
            $data = mysql_query("INSERT INTO nyblog VALUES('','$navn','$mail','$site','$textarea','$tjektfelt','$dato','$tid')") or die("Der er ingen forbindelse til databasen.");
                                       
            echo "Beskeden er nu sendt..";
           
            $showform = FALSE;
       
        }
       
    }
   
    if ($showform) {
   
    echo $fejl;
   
?>
   
<form>

    <input ... bla  bla.. >

</form>           
   
<?
           
    }
   
?>
Avatar billede webweaver Praktikant
21. april 2009 - 00:09 #8
Lille tastefejl her,

if (!$tjekfelt == "...") {
           
            $fejl = "<p>$fejlForkert værdi indtastet</p><br>";
            $showform = TRUE;
           
        }

Skal være

if (!$tjekfelt == "...") {
           
            $fejl = "$fejl<p>Forkert værdi indtastet</p><br>";
            $showform = TRUE;
           
        }
Avatar billede bas Forsker
21. april 2009 - 09:07 #9
Hej

Nu har jeg prøvet at lave det som nedenstående, og det ser umiddelbart ud til at fungere. Men det er vel også en af de metoder I har været inde på?

if (isset($_POST['submit'])) // Er der klikket på Send-knappen?
{
  if ($tjekfelt != '4') // Hvis der ikke står 4 i tjekfeltet....
  {
  echo "Tjekfeltet er ikke udfyldt korrekt.";
  }
  else // Udfør SQL, da tjekfeltet er i orden.
  {
  $data = mysql_query("INSERT INTO nyblog VALUES('','$navn','$mail','$site','$textarea','$tjektfelt','$dato','$tid')")    or die("Der er ingen forbindelse til databasen.");
  }
}

Ja, jeg kunne vel så, som I også skriver, til føje andre tjek som f.eks. if ($tjekfelt == '') // Er feltet tomt? osv.

Mvh. Martin
Avatar billede majbom Novice
21. april 2009 - 10:02 #10
hvis der altid skal stå 4 i $tjekfelt, er der vel ingen grund til at give brugeren mulighed for at ændre det/skrive noget andet?
Avatar billede bas Forsker
21. april 2009 - 10:29 #11
Nej, det kan der være noget om, men det er også bare lige et eksempel.

Er det mon ved at være lukketid fra min side?

Er det splazz og haren, som skL dele pointene
eller hvordan?
Avatar billede webweaver Praktikant
21. april 2009 - 10:43 #12
Det kommer an på hvor mange detaljer man ønsker at fifle med.

Jeg personligt kan bedst lige at have mange forskellige validerings-meddelelser, som passer helt præcist til fejlen. Så den kan beskrive fejlen, for bruger-venlighed. Så fx, feltet må ikke være tomt, det skal indeholde 4 eller hvad ved jeg..

Hvor, hvis man skriver feltet er ikke udfyldt korrekt, kan det være hvilken som helst fejl, uden man peger imod hvilken.

Det er et en smagssag. Nogen kan li' det enkelt. hehe :)
Avatar billede majbom Novice
21. april 2009 - 11:29 #13
-> bas - ja som du ser er der jo rigtig mange muligheder og måder når man skal validere felter.

det er helt op til dig at styre hvem der skal have point. hvem har hjulet dig til en løsning?
Avatar billede webweaver Praktikant
21. april 2009 - 13:05 #14
Splazz var hurtigst ude, så han skal nok have point :)
Avatar billede bas Forsker
21. april 2009 - 19:02 #15
Hej

Jamen jeg vil gerne dele pointene imellem splazz
og haren, da de har hjulpet mig frem til en løsning,
der passer bedst til mit temperement.

Så hvis de to poster et svar, er det bare fjong.

Mvh. Martin
Avatar billede majbom Novice
21. april 2009 - 19:52 #16
kommer her :)
Avatar billede bas Forsker
25. april 2009 - 09:44 #17
Mange tak for hjælpen.

Mvh. Martin
Avatar billede majbom Novice
25. april 2009 - 11:16 #18
tak for point
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