Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Php miinustus scripti

Sivun loppuun

Cc [02.08.2006 19:02:45]

#

Teen php:llä sellaista scriptiä joka miinustaa muuttujasta tietyn verran, jos muuttuja kuuluu tiettyyn ryhmään. Ongelmana on nytten, että jos miinustetaan monta kertaa niin muuttuja ei vaihda ryhmää vaan miinustaa koko ajan saman verran.

Koodi:

<?php
  $miinustettava = $_POST['miinustettava'];
  $pisteet = $_POST['pisteet'] + $_POST['pisteet2'];

  if($tulostus == "1-9" || $tulostus == "10-18") {
    $pisteet = $pisteet + 18;
  }

  $filu = file("taulukko.txt");
  $arvo = 0;

  foreach ($filu as $arvo => $valuae) {
    $tieto = explode("|", $valuae);

    if($tieto[1] == "") {

      if($miinustettava <= $tieto[2]) {
        echo 'Ryhmä 1';
      }

    }

    elseif($tieto[1] != "") {
      if($miinustettava <= $tieto[2] && $miinustettava >= $tieto[1]) {
        $pisteet = $pisteet - 36;

        if($pisteet > 0) {

          for($arvo2=0; $arvo2<$pisteet; $arvo2++) {
            $miinustettava = $miinustettava - $tieto[6];
          }

        }

      }

    }

    $arvo++;
  }
  echo $miinustettava;
?>

Taulukko.txt

1||4.4|35|36|0.1|0.1|
2|4.5|11.4|34|36|0.1|0.2|
3|11.5|18.4|33|36|0.1|0.3|
4|18.5|26.4|32|36|0.1|0.4|
5|26.5|36.0|31|36|0.2|0.5|
6|37|54||||1|

Esim. jos vaikka

$miinustettava = 54, $_POST['pisteet'] = 70, $_POST['pisteet2'] = 19

niin lopussa $miinustettava on 1, vaikka sen pitäisi olla 20.

EDIT: olen tekemässä loopitusta tuohon:

elseif($tieto[1] != "")

Niin miten ratkaisisin tämän?

Kentti [02.08.2006 21:26:22]

#

En nyt ratkaisusta tiedä, mutta koodia tarkemmin tutkimatta/kokeilematta voisin sanoa, että tuo kohta

if($tulostus == "1-9" || $tulostus == "10-18") {//Voiko lukuja määrittää noin?
    $pisteet = $pisteet + 18;
  }

  $filu = file("taulukko.txt");
  $arvo = 0; //$arvo=FALSE

Eli tuossa en tidä, voiko noita lukuja tossa if-lauseessa märittää noin (En voi kokeilla ny ja en oo kokeillu) ja onko ton $arvo-muuttujan arvoks tarkotus asettaa FALSE vaiko "0", jos edellinen, pitää se 0 laittaa lainausmerkkien sisään.

Ja suoraan sanoen, en oikein tajuu tota "Taulukko.txt", vähän sekava :P

EDIT: Toivottavasti auttoi

Tontsa-san [02.08.2006 22:03:39]

#

if($tulostus == "1-9" || $tulostus == "10-18") {//Voiko lukuja määrittää noin?
    $pisteet = $pisteet + 18;
  }

  $filu = file("taulukko.txt");
  $arvo = 0; //$arvo=FALSE

Juu, eli tätä kohtaa ei voi tehdä näin, ainakaan PHP:llä. Tässä tapauksessa minä ainakin tekisin näin (omilla taidoillani):

if(($tulostus > 1 && $tulostus < 9) || ($tulostus > 10 && $tulostus < 18))
    $pisteet = $pisteet + 18;

$filu = file("taulukko.txt");
$arvo = 0; //$arvo=FALSE

EDIT. Kun katson tota sinun koodia nin en kyllä tajua mitään tuosta ideasta.

Cc [03.08.2006 00:35:57]

#

tuossa kohdassa:

if($tulostus == "1-9" || $tulostus == "10-18") {
  $pisteet = $pisteet + 18;
}

minä tarkastan että onko $tulostus muuttujassa merkkijono 1-9 vai merkkijono 10-18 en vertaa lukuja siinä..

Ja koodini ideana olisi vähentää $miinustettava muuttujasta taulukko.txt:ssä oleva arvo ja tietyn monta kertaa ja tarkistaa heti vähentämisen jälkeen muuttuiko $miinustettava muuttujan alue tuossa taulukko.txt:ssä jos muuttuu niin vähentää sille aluelle kuuluva tieto ja jos alue ei muutu niin vähentää se sama... eli tämä pitäisi tehdä loopissa tietyn monta kertaa..

nuo alueet ovat 1,2,3,4,5,6 ja tuo tieto mikä pitäisi vähentää on 0.1,0.2,0.3,0.4,0.5 tai 1

sane [03.08.2006 01:06:56]

#

Siis tuossahan ei oo mitään silmukkaa joka kierrättäis sitä mitä miinustetaan?

Cc [03.08.2006 14:17:14]

#

Yritin tehdä uuden loopin ilman tuota taulukko.txt:tä
enkä saannut sitä toimimaan oikein. Missäköhän vika?

if($pisteero>0) {

  for($arvo=0; $arvo<$pisteero; $arvo++) {

    if($miinustettava > 36 && $miinustettava < 37) {
      $miinustettava = 36;
    }

    if($miinustettava <= 54 && $miinustettava >= 37) {
      $miinustettava = $miinustettava - 1;
    }

    elseif($miinustettava <= 36.0 && $miinustettava >= 26.5) {
      $miinustettava = $miinustettava - 0.5;
    }

    elseif($miinustettava <= 26.4 && $miinustettava >= 18.5) {
      $miinustettava = $miinustettava - 0.4;
    }

    elseif($miinustettava <= 18.4 && $miinustettava >= 11.5) {
      $miinustettava = $miinustettava - 0.3;
    }

    elseif($miinustettava <= 11.4 && $miinustettava >= 4.5) {
      $miinustettava = $miinustettava - 0.2;
    }

  }

}

echo $miinustettava;

Tässä $pisteero = 18, $miinustettava on aluksi 54, tämän pitäisi antaa $miinustettava:n arvoksi 36, mutta se antaakin 18.4.

Kentti [03.08.2006 14:33:31]

#

for($arvo=0; $arvo<$pisteero; $arvo++) {

  if($miinustettava > 36 && $miinustettava < 37) {
    $miinustettava = 36;
  }

Miten joku kokonaisluku voi olla suurempi kuin 36 ja silti pienempi kuin 37?

Tossa kohassa ei oikein oo järkeä.

Jos haet sitä, että tuo $miinustettava on 36, niin laita if-lause vaikkapa näin

    if($miinustettava > 35 && $miinustettava < 37) {
      $miinustettava = 36;
    }
#TAI
    if($miinustettava > 36 xor $miinustettava < 37) {
      $miinustettava = 36;
    }
#TJS.
/*Tossa sun lausekkeessa toi if-lause tarkottas suunnilleen
*tätä:
*Jos($miinustettava = suurempi kuin 36 ja jos miinustettava
* = pienempi kuin 37)
* Eli koodina
*/
  if($miinustettava > 36 and $miinustettava < 37)

En oo varma, oonko oikeessa, mutta aika epäloogiselta tuo vaikuttaa

Cc [03.08.2006 15:10:44]

#

$miinustettava ei ole kokonaisluku välttämättä, jos huomaat esim. rivin

elseif($miinustettava <= 36.0 && $miinustettava >= 26.5) {
  $miinustettava = $miinustettava - 0.5;
}

Eli kun $miinustettavasta vähennetään 0.5 niin eihän se ole kokonaisluku enään.

Tuon rivin

if($miinustettava > 36 && $miinustettava < 37) {
  $miinustettava = 36;
}

Ideana olisi tarkistaa koko ajan, että jos $miinustettava on lukujen 36 ja 37 välistä joku desimaaliluku niin se antaisi $miinustettava muuttujalle arvon 36. Esim. $miinustettava == 36.7 => $miinustettava on 36.

Anssi V [03.08.2006 15:21:02]

#

Kyllä tuo mulla antaa 36 $miinustettava:n arvoksi... Onhan lähtöarvot varmasti nuo mitkä mainitsit?


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta