Avatar billede proff Nybegynder
22. august 2004 - 13:45 Der er 9 kommentarer og
2 løsninger

Problemer med if elseif og else?

Hej, jeg ved ikke hvad der er galt. Men den printer mine fejl som den skal. Hvis navnet er under den længe, og hvis navnet eksistere. Men hvis alt er korrekt. Så skal den lave spilleren.. Mit prob. er at hvis alt er korrekt, er den hvid, den melder ingen fejl. Og den laver ingen spiller.. Er der nogen der kan hjælpe mig??

Min kode er:


<?
session_start();
?>
<html>
<head>
<title>Online Manager 2004</title>
<body>
<LINK href="style.css" rel=stylesheet>
<meta http-equiv=Page-Enter content=blendTrans(duration=0.5)>
<meta http-equiv=Page-Exit content=blendTrans(duration=0.5)>
</body>
</head>
<body topmargin="8" leftmargin="6">
<font color="#000000" face="Tahoma" size="2">
<?
include "sql.php";
if(!isset($_SESSION["email"])) {
die("Du skal være logget ind for at bruge denne funktion!");
}

$fod  = rand(1,5);
if($fod==1 OR $fod==2) {
$ben = "Højre";
}
elseif($fod==3 OR $fod==4) {
$ben = "Venstre";
}
else {
$ben = "Begge";
}

$spillertjek = mysql_query("SELECT Navn FROM spillere WHERE Navn='$_POST[spillernavn]'") or die(mysql_error());
$spillertjekker = mysql_num_rows($spillertjek);

if($spillertjekker==1) {
print "<ul><li>Der eksistere allerede en spiller ved dette navn, vælg et andet</li></ul>";
}
elseif(ereg("^ ",$_POST[spillernavn]) || ereg(" $",$_POST[spillernavn])) {
print "<ul><li>Spiller navnet må ikke starte eller slutte på mellemrum</li></ul>";
}
elseif(strlen($_POST[spillernavn]) < 2) {
print "<ul><li>Du skal angive et navn til spilleren</li></ul>";
}
elseif($_POST[age] < 15) {
$Afslutning  = rand(0,12);
$Aflevering  = rand(0,12);
$Dribling  = rand(0,12);
$Teknik  = rand(0,12);
$Takling  = rand(0,12);
$Straffespark  = rand(0,12);
$Taktik  = rand(0,12);
$Reflekser  = rand(0,12);
$Gamespirit  = rand(0,12);
$Makering  = rand(0,12);
$Mod  = rand(0,12);
$Indflydelse  = rand(0,12);
$Udenbold  = rand(0,12);
$Acceleration  = rand(0,12);
$Holdspil  = rand(0,12);
$Potentiale  = rand(0,46);
}
elseif($_POST[age] > 14  AND $_POST[age]  < 21) {
$Afslutning  = rand(0,16);
$Aflevering  = rand(0,16);
$Dribling  = rand(0,16);
$Teknik  = rand(0,16);
$Takling  = rand(0,16);
$Straffespark  = rand(0,16);
$Taktik  = rand(0,16);
$Reflekser  = rand(0,16);
$Gamespirit  = rand(0,16);
$Makering  = rand(0,16);
$Mod  = rand(0,16);
$Indflydelse  = rand(0,16);
$Udenbold  = rand(0,16);
$Acceleration  = rand(0,16);
$Holdspil  = rand(0,16);
$Potentiale  = rand(0,56);
}
elseif($_POST[age] > 20 AND $_POST[age] < 27) {
$Afslutning  = rand(0,20);
$Aflevering  = rand(0,20);
$Dribling  = rand(0,20);
$Teknik  = rand(0,20);
$Takling  = rand(0,20);
$Straffespark  = rand(0,20);
$Taktik  = rand(0,20);
$Reflekser  = rand(0,20);
$Gamespirit  = rand(0,20);
$Makering  = rand(0,20);
$Mod  = rand(0,20);
$Indflydelse  = rand(0,20);
$Udenbold  = rand(0,20);
$Acceleration  = rand(0,20);
$Holdspil  = rand(0,20);
$Potentiale  = rand(0,60);
}
elseif($_POST[age] > 26 AND $_POST[age] < 46) {
$Afslutning  = rand(0,16);
$Aflevering  = rand(0,16);
$Dribling  = rand(0,16);
$Teknik  = rand(0,16);
$Takling  = rand(0,16);
$Straffespark  = rand(0,16);
$Taktik  = rand(0,16);
$Reflekser  = rand(0,16);
$Gamespirit  = rand(0,16);
$Makering  = rand(0,16);
$Mod  = rand(0,16);
$Indflydelse  = rand(0,16);
$Udenbold  = rand(0,16);
$Acceleration  = rand(0,16);
$Holdspil  = rand(0,16);
$Potentiale  = rand(0,56);
}
else {
mysql_query("INSERT INTO spillere SET Navn='$_POST[spillernavn]', Alder='$_POST[age]', Land='$_POST[land]', Position='$_POST[position]', Afslutning='$Afslutning', Aflevering='$Aflevering', Dribling='$Dribling', Teknik='$Teknik', Takling='$Takling', Straffespark='$Straffespark', Taktik='$Taktik', Reflekser='$Reflekser', Gamespirit='$Gamespirit', Makering='$Makering', Mod='$Mod', Indflydelse='$Indflydelse', Udenbold='$Udenbold', Acceleration='$Acceleration', Holdspil='$Holdspil', Potentiale='$Potentiale', Fod='$ben'") or die(mysql_error());
print "Dit talent $_POST[spillernavn], er nu hentet fra $_POST[land], Og han er $ben, $fod";
}
?>
Avatar billede detox Nybegynder
22. august 2004 - 13:54 #1
Prøv at ændre dine 4 store elseif blokke til if.
Avatar billede dennismp Nybegynder
22. august 2004 - 13:54 #2
Prøv:

erstat:
if($spillertjekker==1) {
print "<ul><li>Der eksistere allerede en spiller ved dette navn, vælg et andet</li></ul>";
}
elseif(ereg("^ ",$_POST[spillernavn]) || ereg(" $",$_POST[spillernavn])) {
print "<ul><li>Spiller navnet må ikke starte eller slutte på mellemrum</li></ul>";
}
elseif(strlen($_POST[spillernavn]) < 2) {
print "<ul><li>Du skal angive et navn til spilleren</li></ul>";
}

med:
$ok = true;
if($spillertjekker==1) {
print "<ul><li>Der eksistere allerede en spiller ved dette navn, vælg et andet</li></ul>";
$ok = false;
}
elseif(ereg("^ ",$_POST[spillernavn]) || ereg(" $",$_POST[spillernavn])) {
print "<ul><li>Spiller navnet må ikke starte eller slutte på mellemrum</
li></ul>";
$ok = false;
}
elseif(strlen($_POST[spillernavn]) < 2) {
print "<ul><li>Du skal angive et navn til spilleren</li></ul>";
$ok = false;
}

if($ok ) {
  if($_POST[age] < 15) {
  ...
  }
  elseif($_POST[age] > 14  AND $_POST[age]  < 21) {
  ...
  elseif($_POST[age] > 20 AND $_POST[age] < 27) {

}
Avatar billede dennismp Nybegynder
22. august 2004 - 13:56 #3
fik trykket submit for hurtigt.. tager lige "med"-delen om

$ok = true;
if($spillertjekker==1) {
print "<ul><li>Der eksistere allerede en spiller ved dette navn, vælg et andet</li></ul>";
$ok = false;
}
elseif(ereg("^ ",$_POST[spillernavn]) || ereg(" $",$_POST[spillernavn])) {
print "<ul><li>Spiller navnet må ikke starte eller slutte på mellemrum</
li></ul>";
$ok = false;
}
elseif(strlen($_POST[spillernavn]) < 2) {
print "<ul><li>Du skal angive et navn til spilleren</li></ul>";
$ok = false;
}

if($ok ) {
  if($_POST[age] < 15) {
  ...
  }
  elseif($_POST[age] > 14  AND $_POST[age]  < 21) {
  ...
  elseif($_POST[age] > 20 AND $_POST[age] < 27) {
  ..
  elseif($_POST[age] > 26 AND $_POST[age] < 46) {
  ..
  }
  // hvad sker der hvis alderen er mere end 47?

  mysql_query("INSERT INTO spillere SET Navn='$_POST[spillernavn]', Alder='$_POST[age]', Land='$_POST[land]', Position='$_POST[position]', Afslutning='$Afslutning', Aflevering='$Aflevering', Dribling='$Dribling', Teknik='$Teknik', Takling='$Takling', Straffespark='$Straffespark', Taktik='$Taktik', Reflekser='$Reflekser', Gamespirit='$Gamespirit', Makering='$Makering', Mod='$Mod', Indflydelse='$Indflydelse', Udenbold='$Udenbold', Acceleration='$Acceleration', Holdspil='$Holdspil', Potentiale='$Potentiale', Fod='$ben'") or die(mysql_error());
  print "Dit talent $_POST[spillernavn], er nu hentet fra $_POST[land], Og han er $ben, $fod";
}
Avatar billede dennismp Nybegynder
22. august 2004 - 13:57 #4
if alders-check kan du skrive lidt nemmere


  if($_POST[age] < 15) {
  ...
  }
  // nu ved vi at alderen er over 14 år, for hvis den var, ville den
  // første ifsætning havde taget den..
  elseif( $_POST[age]  < 21) { 
  ...
  elseif( $_POST[age] < 27) {
  ..
  elseif( $_POST[age] < 46) {
  ..
  }
Avatar billede proff Nybegynder
22. august 2004 - 14:26 #5
En spiller kan ikke være mere end 47 ;o)
Og det med alderen er med hvor gode chancer der er for at de bliver gode..
Avatar billede dennismp Nybegynder
22. august 2004 - 14:35 #6
så burde du måske lige lave et tjek, på samme måde som du spiller-navnet. Forstil dig han skriver 52 ind som alder. Så får du slet ikek håndteret det :)

Hjalp mit forslag, eller har jeg forvirret dig?
Avatar billede proff Nybegynder
22. august 2004 - 14:37 #7
Nej, dit forslag hjalp mig.. Det var lige et par små fejl, men det var ingen ting som jeg ikke lige selv kunne rette.. Du rettede endda flere fejl end jeg havde sagt..

Man vælger alderen i en select, så man kan ikke bare skrive 52 som alder :P
Avatar billede proff Nybegynder
22. august 2004 - 14:38 #8
Smid et svar :)
Og mange tak for hjælpen
Avatar billede dennismp Nybegynder
22. august 2004 - 14:47 #9
Lad mig lige komme med lidt forslag til hvad du kan ændre i din kode :)

$fod  = rand(1,5);
if($fod==1 OR $fod==2) {
$ben = "Højre";
}
elseif($fod==3 OR $fod==4) {
$ben = "Venstre";
}
else {
$ben = "Begge";
}

kan gøres
$benArray = array('Højre','Højre','Venstre','Venstre','Begge');
$ben = $benArray(mt_rand(0,count($benArray)-1));  // eller bare mt_rand(0,4);

Du har en masse gentagelser i if-sætningerne. Jeg ville nok gøre det sådan her:

elseif($_POST[age] < 15) {
  $maxRand = 12;
  $maxPotentiale = 46;
}
elseif($_POST[age]  < 21) {
  $maxRand = 12;
  $maxPotentiale  = rand(0,56);
}

.. og så senere når du har været igennem alle age-if'erne:
$Afslutning  = rand(0,$maxRand);
$Aflevering  = rand(0,$maxRand);
..
$Potentiale  = rand(0,$maxPotentiale);


.. bare husk at du selv skal kunne overskue koden, så måske er mit $benArray noget sværere at læse end dine if'er.
Avatar billede dennismp Nybegynder
22. august 2004 - 14:48 #10
Det grå ellers godt :(

if($_POST[age] < 15) {
  $maxRand = 12;
  $maxPotentiale = 46;
}
elseif($_POST[age]  < 21) {
  $maxRand = 12;
  $maxPotentiale  = 56;
}
elseif(...)

Men det var så lidt
Avatar billede proff Nybegynder
22. august 2004 - 17:09 #11
:)
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