Avatar billede lsolesen Nybegynder
21. juni 2003 - 11:58 Der er 25 kommentarer og
2 løsninger

If-sætning

if ($felt[3] !="ingen" OR $felt[2]!="hidden"){
            print "  // Tjekker ".$felt[0]."\n";
            print "  if (thisform.".$felt[1].".value == \"\") {\n";
            print "      strError = strError + '-".$felt[0]." mangler\\n';\n";
            print "      intError = 1;\n";
            print "      thisform.".$felt[1].".focus();\n";
            print "  }\n";
        }

Jeg har tjekket, at enten felt 3 eller 2 er hhv. ingen eller hidden, men alligevel skriver den det ud. Er det fordi jeg ikke forstår if-sætninger?
Avatar billede mathiash Nybegynder
21. juni 2003 - 12:01 #1
Prøv med:
if ($felt[3] !="ingen" || $felt[2]!="hidden"){


!? :0)

//Mathias
Avatar billede mathiash Nybegynder
21. juni 2003 - 12:01 #2
Nej, jeg mener:
if ($felt[3] !="ingen" || $felt[2] !="hidden"){
Avatar billede mathiash Nybegynder
21. juni 2003 - 12:03 #3
:0)
Avatar billede mathiash Nybegynder
21. juni 2003 - 12:04 #4
Nej nej nej :0(
Jeg er ikke rigtig vågen he he :0)
if ($felt[3] != "ingen" || $felt[2] != "hidden"){

det burde hjælpe :0)
Avatar billede lsolesen Nybegynder
21. juni 2003 - 12:16 #5
virker stadig ikke - se selv på www.fodboldenslegestue.dk/anbefalside.php og kig kildekoden. Her har jeg skrevet felt[3] og felt[2] ud, og som du kan se kommer felterne også frem, hvor de er hhv. ingen og hidden, og det skulle if-sætningen jo gerne afhjælpe. Nogen forklaring?
Avatar billede lsolesen Nybegynder
21. juni 2003 - 12:18 #6
Altså selve html-kildekoden - og ikke kildekoden nederst i dokumentet! :)
Avatar billede skovenborg Nybegynder
21. juni 2003 - 12:33 #7
Du har vel chekket at dit array er korrekt. Prøv at teste det med at printe fx felt[2] eller felt[3] ud, og se hvad de egentlig indeholder.
Avatar billede lsolesen Nybegynder
21. juni 2003 - 12:50 #8
Ja det har jeg. Det handler min besked 12:16:10 om.
Avatar billede skovenborg Nybegynder
21. juni 2003 - 13:05 #9
Nu skal du vel bruge AND - ellers må et af felterne godt være "intet" eller "hidden"
Avatar billede hono Nybegynder
21. juni 2003 - 13:10 #10
if(($felt[3] !="ingen")||($felt[2] !="hidden")){
Avatar billede skovenborg Nybegynder
21. juni 2003 - 13:22 #11
nej undskyld, det skal være OR ;-)

Kunne du ikke sige hvor du får dit array fra? Umiddelbart kan jeg ikke se det ud fra den url du har givet.
Avatar billede lsolesen Nybegynder
21. juni 2003 - 14:13 #12
Mit array er det der står nederst på siden på det opgivne link!
Avatar billede lsolesen Nybegynder
21. juni 2003 - 14:15 #13
I får lige hele funktionen!

function skriv_formular($formular) {

    // udskriv validering
    print "<script language=\"JavaScript\" type=\"text/javascript\">\n";
    print "<!--\n";
    print "function Checkform(thisform) {\n";
    print "      // Startværdier\n";
    print "  strError = 'Der opstod følgende fejl:\\n\\n';\n";
    print "  intError = 0;\n";

    foreach($formular AS $felt) {

        if ($felt[3] != "ingen" OR $felt[2] != "hidden"){
            print "  // felt[3] ".$felt[3]."\n";
            print "  // felt[2] ".$felt[2]."\n";       
       
            print "  // Tjekker ".$felt[0]."\n";
            print "  if (thisform.".$felt[1].".value == \"\") {\n";
            print "      strError = strError + '-".$felt[0]." mangler\\n';\n";
            print "      intError = 1;\n";
            print "      thisform.".$felt[1].".focus();\n";
            print "  }\n";
        }
   
       
        if ($felt[3] == "email") {
            print "  // Check for @ i email\n";
            print "  if (thisform.".$felt[1].".value.indexOf(\"@\") == -1 && thisform.".$felt[1].".value != \"\") {\n";
            print "      strError = strError + '-Mangler @ i emailadresse\\n';\n";
            print "      intError = 1;\n";
            print "      thisform.".$felt[1].".focus();\n";
            print "  }\n";   
        }

    }

    print "  if (intError == 1) {\n";
    print "      alert(strError);\n";
    print "      return false;\n";
    print "  }\n";
    print "}\n";
    print "//-->\n";
    print "</script>\n";

// udskriv formularen
   
    print '<form method="post" action="?" name="thisform" id="thisform" onSubmit="return Checkform(this);">';

   
    print "<input type=\"hidden\" name=\"action\" value=\"submit\" />";
   
    foreach($formular AS $felt) {
        if ($felt[2]!="hidden") {
            if ($felt[2] == "textarea"){
                print $felt[0].'<textarea name="'.$felt[1].'" onFocus="'.$felt[1].'"></textarea><br />';
            }
            else {
                  print $felt[0].' <input type="'.$felt[2].'" name="'.$felt[1].'" onFocus="'.$felt[1].'" /><br />';
            }
        }
        elseif ($felt[2] !="hidden") {
                print '<input type="'.$felt[2].'" name="'.$felt[1].'" value="'.$felt[0].'" />';
        }
    }

    print '<input type="submit" value="Send" />';   
    print '</form>';
}
Avatar billede lsolesen Nybegynder
21. juni 2003 - 14:16 #14
Skal måske lige sige, at jeg har haft lavet det om til || med det samme resultat som nu!
Avatar billede skovenborg Nybegynder
21. juni 2003 - 16:22 #15
Det fordi du bruger foreach forkert. Når du siger:
foreach ($formular as $felt)
$felt er så den pågældende value for $formular, som den kører igennem. Det vil samtidig sige at $felt[0] ikke er giver dig det første element i $formular.
Avatar billede skovenborg Nybegynder
21. juni 2003 - 16:39 #16
Prøv fx at køre dette meget enkle script, så forstår du nok hvad jeg mener:
<?php
$arr = array("Hej","dette","er","et","array");
foreach ($arr as $felt)
{
    echo $felt[0];
        //Output: Hdeea
}
?>

Du kunne i stedet gemme hver input-value i en variabel sådan at mail blev gemt i $mail, og afsender blev gemt i $afsender osv. Sådan at hvis du har et text-input kaldet "navn" henter du den ved at sige
$navn = $_POST['navn'];

Men du må sige til hvis du er uenig med mig.
Avatar billede skovenborg Nybegynder
21. juni 2003 - 16:48 #17
Medmindre selvfølgelig du bruger et array med indbyggede arrays:
$arr = array(array("Værdi","Værdi"),array("Værdi2","Værdi3"));
så bliver $felt[0] ganske rigtigt til Værdi. Hvis jeg husker rigtig var det da vist også sådan du gjorde :-)
Avatar billede lsolesen Nybegynder
27. juni 2003 - 09:47 #18
Så virker det. Ved ikke helt, hvad jeg har lavet om, men I har nok alle hjulpet. Skovenborg og mathiash smid lige et svar.
Avatar billede skovenborg Nybegynder
27. juni 2003 - 14:43 #19
Okay :-)

Hvad skrev du i stedet for?
Avatar billede lsolesen Nybegynder
27. juni 2003 - 15:07 #20
skovenborg > Er faktisk ikke helt klar over, hvordan det kom til at virke. Der er gået cirka en uge siden jeg arbejdede med det sidst, og pludselig var den der bare?
Avatar billede skovenborg Nybegynder
27. juni 2003 - 15:26 #21
Mærkeligt - men dit script så jo også meget korrekt ud.

Forresten er det ligemeget om du bruge OR eller || - PHP kan finde ud af begge. Til gengæld kan javascript kun bruge || (og &&) hvilket godt kan virke forvirrende hvis man bruger dem begge.
Avatar billede lsolesen Nybegynder
27. juni 2003 - 15:51 #22
Ja, PHP er slet ikke så dum endda :) Gad vide, hvorfor de har implementeret begge løsninger?
Avatar billede skovenborg Nybegynder
27. juni 2003 - 16:15 #23
Okay, der er forskel på dem, da de har forskellige forrang (precedence).
http://www.php.net/manual/en/language.operators.php#language.operators.precedence
hvor and har lavere rang end &&.
Hvad det helt præcis betyder ved jeg ikke, og i dit tilfælde er det egentlig også lige meget, men her er et eksempel på hvor de to giver forskelligt resultat:
$b = "Hej";
$c = "med dig";
hvor
$a = $b && $c; //resultat: 1
$a = $b and $c; //resultat: Hej
Avatar billede skovenborg Nybegynder
27. juni 2003 - 16:19 #24
... men så vidt jeg har forstået er det ligesom i matematik hvor gange har højere rang en fx plus.
Avatar billede lsolesen Nybegynder
27. juni 2003 - 16:21 #25
ok, herligt at blive klogere hele tiden *-)
Avatar billede skovenborg Nybegynder
27. juni 2003 - 16:22 #26
... og (nu bliver jeg ved) i mit ovenstående tilfælde har = højere rang end and, derfor returner den kun Hej, hvorimod && har højere rang end =, og returnerer 1 (fordi de begge er true).
Avatar billede lsolesen Nybegynder
10. september 2003 - 12:21 #27
Tak for alle svarene. Nu kan jeg få det hele til at virke :)
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