Avatar billede cmau Nybegynder
12. juli 2005 - 20:34 Der er 32 kommentarer og
1 løsning

Tjekke at det er en af de tal det må være

Hejsa

Hvordan laver jeg en funktion som tjekker om en variabel inde holder visse tal.

1. $_POST['birth_day'] skal indeholde et tal mellem 01 og 31 (Bemærk at der er 0 foran alle tal der er under 10)

2. $_POST['birth_year'] skal indeholde et tal mellem dette års tal (2005) og tallene 35 år tilbage (1970)

3. $_POST['address'] skal indeholde en af stederne i et array. array("Ikke angivet", "Nordjylland", "Vestjylland", "Midtjylland", "Østjylland", "Sønderjylland", "Fyn", "Nordsjælland", "Sydsjælland", "Østsjælland", "Vestsjælland", "Øer")

Håber nogen gider at lave det for mig.
Avatar billede jaw Nybegynder
12. juli 2005 - 20:38 #1
I første omgang:

3. if(in_array($_POST['adress'], $array)) {
  echo "ok";
} else {
  echo "ikke ok";
}
Avatar billede jaw Nybegynder
12. juli 2005 - 20:42 #2
2.
for($i = (date("Y")-35), $i <= date("Y"), $i++) {
  if($i == $_POST['birth_year']) {
    echo "Indenfor kriteriet";
  }
}

Tror den vil klare det, og bør kunne tilpasses din nr. 1.
Avatar billede cmau Nybegynder
12. juli 2005 - 21:35 #3
Sådan her?

$address = array("Ikke angivet", "Nordjylland", "Vestjylland", "Midtjylland", "Østjylland", "Sønderjylland", "Fyn", "Nordsjælland", "Sydsjælland", "Østsjælland", "Vestsjælland", "Øer");

if(!in_array($_POST['address'], $address)) {
echo "fejl";
} else {
//update
}
Avatar billede jaw Nybegynder
12. juli 2005 - 21:36 #4
Du kunne jo prøve det, men ja det vil jeg mene...
Avatar billede cmau Nybegynder
12. juli 2005 - 21:40 #5
Det virker.., men kan det så laves mere advanceret? Jeg vil gerne have et array der hedder $subjects og som inde holder address, height og mange flere også den kunne køre igennem denne linje en gang, istedet for jeg skal kopire linjen og ændre navne?

if(!in_array($_POST['address'], $address)) {
Avatar billede jaw Nybegynder
12. juli 2005 - 21:43 #6
Vil tro det kan klares således:

$subjects = array("address", "height");

$address = array("bum", "bum1");
$height = array("height1", "height2");

foreach($subjects as $v) {
  if(!in_array($_POST[$v], ${$v})) {
    //
  } else {
    //
  }
}
Avatar billede cmau Nybegynder
12. juli 2005 - 21:51 #7
Nu får jeg jo beskeden mange gange hvis det ikke passer. Hvordan kan jeg gøre sådan at den kun udskriver en gang?
Avatar billede jaw Nybegynder
12. juli 2005 - 21:53 #8
$error = 0;
foreach($subjects as $v) {
  if(!in_array($_POST[$v], ${$v})) {
    $error = 1;
  }
}

if($error == 1) {
  echo "Der skete en fejl!";
}

Er en måde at gøre det på...
Avatar billede cmau Nybegynder
12. juli 2005 - 21:53 #9
Jeg får også beskeden selv om der ikke er noget forkert :S
Avatar billede jaw Nybegynder
12. juli 2005 - 22:00 #10
Så prøv lige at køre den igennem, og se om der er et specielt sted den går galt:

foreach($subjects as $v) {
  if(!in_array($_POST[$v], ${$v})) {
    echo "fejl<br />";
  } else {
    echo "ok<br />";
  }
}
Avatar billede cmau Nybegynder
12. juli 2005 - 22:04 #11
ok
ok
ok
ok
ok
ok
ok
ok
ok
ok
fejl
fejl
fejl
fejl
fejl

$subjects ser sådan her ud:
$subjects = array("address", "sexuality", "partner_status", "search", "eye_colour", "hair_colour", "build", "smoking",

"alcohol", "personality", "interests", "clothing_style", "music_style", "film_style", "food_style");
Avatar billede cmau Nybegynder
12. juli 2005 - 22:04 #12
Det er fordi der ikke er valgt noget i de felter. Det skal også være muligt at lade felterne stå tomme.
Avatar billede jaw Nybegynder
12. juli 2005 - 22:07 #13
Ahh, var det et krav fra starten? :) Anyhoo, hvad er værdien hvis den er blank? Hvis den intet indeholder, så prøv:

foreach($subjects as $v) {
  if(!in_array($_POST[$v], ${$v}) || empty($_POST[$v])) {
    echo "fejl<br />";
  } else {
    echo "ok<br />";
  }
}
Avatar billede cmau Nybegynder
12. juli 2005 - 22:10 #14
Nu får jeg fejl. Den samme fejl mange gange:

Warning: in_array(): Wrong datatype for second argument in /mnt/raid/www/www/babegalleri/test/pages/change_informations.php on line 75
fejl

Denne linje:
if(!in_array($_POST[$v], ${$v}) || empty($_POST[$v])) {

Jeg tror det der den ok ved før.
Avatar billede cmau Nybegynder
12. juli 2005 - 22:20 #15
Har aldrig fået sådan en fejl før.
Avatar billede jaw Nybegynder
12. juli 2005 - 22:22 #16
Det kan jeg ikke lige helt forstå hvorfor du får, prøv lige at fjerne det igen og kør scriptet. Hvis det virker, så indsæt:

if(!in_array($_POST[$v], ${$v}) || $_POST[$v] == "") {
Avatar billede cmau Nybegynder
12. juli 2005 - 22:25 #17
Nu virker det heller ikke uden :S
Avatar billede jaw Nybegynder
12. juli 2005 - 22:27 #18
Så har du da vist bøffet i noget, så må du gå tilbage til hvor det virkede og prøve igen...
Avatar billede cmau Nybegynder
12. juli 2005 - 22:29 #19
foreach($subjects as $v) {
if(!in_array($_POST[$v], ${$v})) {
echo "fejl<br />";
} else {
echo "ok<br />";
}

Der virker det igen.
Avatar billede jaw Nybegynder
12. juli 2005 - 22:31 #20
Ok, hvad så med:

if(!empty($_POST[$v])) {
    if(!in_array($_POST[$v], ${$v})) {
        echo "fejl<br />";
    } else {
        echo "ok<br />";
    }
} else {
    echo "ok<br />";
}
Avatar billede cmau Nybegynder
12. juli 2005 - 22:36 #21
Så er der ok hele vejen i gennem. Nu står jeg bare lige med et andet mindre problem. Det er sat sammen med en masse andet sådan her:

<?
if(isset($_POST['username'])) {
if($_POST['username'] != $_SESSION['username']) {
echo "<font color=\"#FF0000\">Du kan ikke rette dit brugernavn!</font>";
} else if(!isset($_POST['mail']) AND !isset($_POST['mail1'])) {
echo "<font color=\"#FF0000\">Du har ikke angivet 2 ens e-mails!</font>";
} else if($_POST['mail'] != $_POST['mail1']) {
echo "<font color=\"#FF0000\">Du har ikke angivet 2 ens e-mails!</font>";
} else if(!isset($_POST['name'])) {
echo "<font color=\"#FF0000\">Du skal angive dit navn!</font>";
} else if(!isset($_POST['description'])) {
echo "<font color=\"#FF0000\">Du skal skrive en fritekst!</font>";
} else {
foreach($subjects as $v) {
if(!empty($_POST[$v])) {
    if(!in_array($_POST[$v], ${$v})) {
        echo "fejl<br />";
    } else {
        echo "ok<br />";
    }
} else {
    echo "ok<br />";
}
}
}
?>

Hvordan vil du så have at den skal tjekke det hele også først tilsidst gør det muligt at update indtil databasen?
Avatar billede jaw Nybegynder
12. juli 2005 - 22:41 #22
Sådan her f.eks.:


<?
if(isset($_POST['username'])) {
    if($_POST['username'] != $_SESSION['username']) {
        echo "<font color=\"#FF0000\">Du kan ikke rette dit brugernavn!</font>";
        $error = 1;
    } else if(!isset($_POST['mail']) AND !isset($_POST['mail1'])) {
        echo "<font color=\"#FF0000\">Du har ikke angivet 2 ens e-mails!</font>";
        $error = 1;
    } else if($_POST['mail'] != $_POST['mail1']) {
        echo "<font color=\"#FF0000\">Du har ikke angivet 2 ens e-mails!</font>";
        $error = 1;
    } else if(!isset($_POST['name'])) {
        echo "<font color=\"#FF0000\">Du skal angive dit navn!</font>";
        $error = 1;
    } else if(!isset($_POST['description'])) {
        echo "<font color=\"#FF0000\">Du skal skrive en fritekst!</font>";
        $error = 1;
    } else {
        foreach($subjects as $v) {
            if(!empty($_POST[$v])) {
            if(!in_array($_POST[$v], ${$v})) {
            echo "fejl<br />";
            $error = 1;
              } else {
              echo "ok<br />";
            }
            } else {
            echo "ok<br />";
            }
        }
    }
}

if($error == 0) {
    //update
} else {
    echo "Der skete en fejl, opdatering ikke gennemført";
}
?>
Avatar billede cmau Nybegynder
12. juli 2005 - 22:49 #23
Undskyld, men måske er jeg krævende nu, men kan det lade sig gøre at den tjekker alt i gennem også alle de ting den gør fejl kommer på en langliste istedet for først vil den komme med en besked om at man ikke må skifte brugernavn også når det er rettet og man trykker ret profil så kommer en ny fejl. Det er jo ret irriterende.

Evt. så alle fejl kom i et array
Avatar billede jaw Nybegynder
12. juli 2005 - 22:54 #24
Hehe ja, du er nok lidt krævende :) Og jeg ved jo ikke hvordan du vil have det, men det er et forslag:

<?

$error = array();
if(isset($_POST['username'])) {
    if($_POST['username'] != $_SESSION['username']) {
        $error[] = "Du kan ikke rette i dit brugernavn";
    } else if(!isset($_POST['mail']) AND !isset($_POST['mail1'])) {
        echo "<font color=\"#FF0000\">Du har ikke angivet 2 ens e-mails!</font>";
    } else if($_POST['mail'] != $_POST['mail1']) {
        $error[] = "Du har ikke angivet 2 ens e-mails!";
    } else if(!isset($_POST['name'])) {
        $error[] = "Du skal angive dit navn";
    } else if(!isset($_POST['description'])) {
        $error[] = "Du skal skrive en fritekst";
    } else {
        foreach($subjects as $v) {
            if(!empty($_POST[$v])) {
            if(!in_array($_POST[$v], ${$v})) {
            echo "fejl<br />";
            $error[] = $v;
              } else {
              echo "ok<br />";
            }
            } else {
            echo "ok<br />";
            }
        }
    }
}

if(count($error) == 0) {
    //update
} else {
    echo "Der skete en fejl, opdatering ikke gennemført. Følgende fejl blev registreret:";
    foreach($error as $v) {
        echo "- " . $v . "<br />";
    }
}
?>
Avatar billede cmau Nybegynder
12. juli 2005 - 23:20 #25
Nu har jeg lavet det så det passer til mig, men hvis jeg lader feltet 'name' eller 'description' være tomt, så kommer der ikke en advarelse. Synes jeg er meget mærkeligt :S

<?
$error = array();
if(isset($_POST['username'])) {

if($_POST['username'] != $_SESSION['username']) {
$error[] = "Du kan ikke rette i dit brugernavn!";
}
if(!isset($_POST['mail']) AND !isset($_POST['mail1'])) {
$error[] = "<font color=\"#FF0000\">Du har ikke angivet 2 ens e-mails!</font>";
}
if($_POST['mail'] != $_POST['mail1']) {
$error[] = "Du har ikke angivet 2 ens e-mails!";
}
if(!isset($_POST['name'])) {
$error[] = "Du skal skrive dit navn!";
}
if(!isset($_POST['description'])) {
$error[] = "Du skal skrive en fritekst!";
}
foreach($subjects as $v) {
if(!empty($_POST[$v])) {
if(!in_array($_POST[$v], ${$v})) {
$error[] = "Du kan ikke vælge noget som ikke findes i feltet '$v'";
}
}
}

if(count($error) == 0) {
echo "fint";
} else {
echo "Der skete en fejl, opdatering blev ikke gennemført. Følgende fejl blev registreret:<br><br><font color=\"#FF0000\"><ul>";
foreach($error as $v) {
echo "<li>".$v."</li>";
}
echo "</ul></font>";
}
?>
Avatar billede jaw Nybegynder
12. juli 2005 - 23:31 #26
Nej, det er ikke helt så mærkeligt alligevel. Isset undersøger, om variablen eksisterer, og det gør den sådan set, omend tom! Så brug: if(!isset($_POST['name']) || empty($_POST['name'])) {
Avatar billede cmau Nybegynder
12. juli 2005 - 23:37 #27
Kan:

for($i = (date("Y")-35), $i <= date("Y"), $i++) {
  if($i == $_POST['birth_year']) {
    echo "Indenfor kriteriet";
  }
}

Ikke blive stillet op på samme måde som:

foreach($subjects as $v) {
if(!empty($_POST[$v])) {
if(!in_array($_POST[$v], ${$v})) {
$error[] = "Du kan ikke vælge noget som ikke findes i feltet '$v'!";
}
}
}

Fordi ellers kan jeg ikke få det til at passe. Det skal være sådan at hvis indholdet af $_POST['birth_year'] ikke passer med en af dem den skal så skal den kun udskrive en fejl om at man ikke kan være født i også indholdet af $_POST['birth_year'].

Og ville den ikke give fejl hvis $_POST['birth_year'] indholdet tegn eller bogstaver?
Avatar billede cmau Nybegynder
12. juli 2005 - 23:42 #28
Og forresten det andet virker nu ;D
Avatar billede jaw Nybegynder
12. juli 2005 - 23:42 #29
Erhm, måske:

$ok = 0;
if(is_numeric($_POST['birth_year'])) {
  for($i = (date("Y")-35), $i <= date("Y"), $i++) {
    if($i == $_POST['birth_year']) {
      $ok = 1;
    }
  if($ok == 0) $error[] = "Fejl i birth_year";
  }
} else {
  $error[] = "Feltet skal være tal!";
}
Avatar billede cmau Nybegynder
12. juli 2005 - 23:54 #30
Nu er der kun en lille ting tilbage og det er at hvis man får denne fejl:

$error[] = "Din fødselsmåned skal være mellem 01 og 12!";

bliver den udskrevet 12 gange :S Men selv og det er et tal får jeg også fejlen  :(

$ok = 0;
if(is_numeric($_POST['birth_year'])) {
for($i=1; $i<=12; $i++) {
if($i == $_POST['birth_year']) {
$ok = 1;
}
if($ok == 0) {
$error[] = "Din fødselsmåned skal være mellem 01 og 12!";
}
}
} else {
$error[] = "Der må kun være tal i dit fødselsmåned!";
}
Avatar billede jaw Nybegynder
12. juli 2005 - 23:59 #31
Ja, du skal lige rykke den udenfor endnu en }

$ok = 0;
if(is_numeric($_POST['birth_year'])) {
  for($i=1; $i<=12; $i++) {
    if($i == $_POST['birth_year']) {
      $ok = 1;
    }
  }
  if($ok == 0) {
    $error[] = "Din fødselsmåned skal være mellem 01 og 12!";
  }
} else {
  $error[] = "Der må kun være tal i dit fødselsmåned!";
}
Avatar billede cmau Nybegynder
13. juli 2005 - 00:07 #32
Så virker det hele :D Tusind tak

Smider du svar..?
Avatar billede jaw Nybegynder
13. juli 2005 - 00:08 #33
Det gør jeg da gerne - selv tak :)
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