ugrás a tartalomhoz

If..isset...$_POST..() ?

Moszajszli · 2011. Ápr. 11. (H), 22.11
Üdv!

Egy pascal példa programot akarok php-re átírni, de a php tudásom még elég gyatra,
a program:

A felhasználó magasságának és súlyának ismeretében tájékoztassuk őt arról, hogy mennyire van elhízva. Tekintsük optimálisnak azt az esetet, ha a felhasználó kg-ban mért "súlya" legfeljebb 10%-kal tér el a cm-ben mért magassága-100 cm-től!

Nos, így akartam megcsinálni:

Van egy formom:

<form action="11.php" method="POST">
<input type="text" name="mag" placeholder="Magasság">cm
<input type="text" name="suly" placeholder="Súly">kg
<input type="submit" value="Elküld">
és a 11.php tartalma:

<?php 

if (( isset( $_POST['mag'])-100 > isset($_POST['suly'])*0.9) && (isset( $_POST['mag'])-100 < isset($_POST['suly'])*1.1 ) )
  {print "Nem vagy elhízva!";}
else 
  {print "El vagy hízva!";}
  
?>
Segítséget szeretnék kérni, hol rontottam el? A zárójelekbe gabalyodtam bele? :S

Előre is köszönöm!
 
1

Az isset egy adott változó,

bugadani · 2011. Ápr. 11. (H), 22.22
Az isset egy adott változó, tömbelem létezését mondja meg igazságérték formában. Ezt nem sok értelme van egy számmal szorozni, kivonni belőle, stb...
A helyes megoldás szerintem az adott változó létezésének és korrektségének ellenőrzése és attól függően hibajelzés, vagy a következő lépéssel folytatás lenne.
2

isset($változó) ez azt mondja

Numcsi · 2011. Ápr. 11. (H), 22.50
isset($változó) ez azt mondja hogy True vagy False. Azaz azt kérdezed meg vele, hogy a $változó definiálva van-e. Az isset($_POST['mag'])-100 például ezt csinálná, ha értéket tartalmaz: True-100.

1. feltétel: Léteznek-e az adott paraméterek? Ha igen, akkor a számolás jöhet:
probáld meg így:

if(isset($_POST['mag'] && isset($_POST['suly']) {
$mag = $_POST['mag']-100;
$suly[] = $_POST['suly']x0,9;
$suly[] = $_POST['suly']x1,1;
if($mag > $suly[1] && $mag < $suly[2]) {
echo "Nem vagy elhizva";
} else {
echo "El vagy hizva";
}
}

$suly[] -tól ne rémülj meg, mert automatikus indexel. Első $suly[] esetén index: 1, mikor a második esetben is találkozik vele 2 lesz, de az if-ben látod. Én nem akartam POST-tolgatni, mert számomra átláthatatlan. Nos. Először megnézzük, hogy a bekért adatok kitöltésre került-e, még az első if else ágába belehetne írni, hogy "rosszul töltötted ki" pl. Ha érték igaz, azaz mind2 érték definiált, akkor felölti a változókat, és megvizsgálja a következő if-et. Ha ez igaz, akkor nem vagy kövér...
3

Úristen :)1: létezik

bugadani · 2011. Ápr. 11. (H), 23.05
Úristen :)
1: létezik kódszínező
2: légy oly kedves és próbáld ki, amit ide leírsz. Több benne a szintaktikai és egyéb hiba, mint ameddig el tudok számolni. (Ne vedd magadra)

if(isset($_POST['mag']) && isset($_POST['suly'])) {
    $mag = $_POST['mag']-100;
    $suly = array($_POST['suly']*0.9, $_POST['suly']*1.1);
    if($mag > $suly[0] && $mag < $suly[1]) {
        echo "Nem vagy elhizva";
    } else {
        echo "El vagy hizva";
    }
} else {
    echo "Hibás adatok!";
}
És hogy miért:
  • lemaradtak zárójelek.
  • szorozni csillaggal szokás
  • tizedes törteknél nem tizedesvessző, hanem tizedespont van
  • érdemes jelezni, ha nem jók a bejövő adatok
  • a tömbök indexelése 0-val kezdődik, továbbá szerintem szokása a nem létező változó közvetlen tömbként kezelésének NOTICE-t dobnia (ebben mondjuk nem vagyok biztos, de ha már tudjuk, hogy két eleme lesz, ne nyújtsuk azt a tömböt fölöslegesen, amikor létre lehet hozni közvetlenül akkorát is)
  • továbbá, amit nem tettem hozzá, nincs ellenőrizve, hogy a súly és magasságértékek egyáltalán számok-e, ezt érdemes megtenni még a létezés ellenőrzésénél
4

Jogos. Én néztem el. Kösz a

Numcsi · 2011. Ápr. 11. (H), 23.07
Jogos. Én néztem el. Kösz a javítást.
5

Köszönet

Moszajszli · 2011. Ápr. 12. (K), 11.49
Köszi mindenkinek, sokat segített!

De valami valahol még mindig rossz, akármit írok be, azt irja ki hogy el vagy hízva...

pl: 180 cm és 50 kg....ekkor semmiképp sem lehet elhízva az ember, pascalban működik..php megfogott :)
6

De valami valahol még mindig

kuka · 2011. Ápr. 12. (K), 12.03
De valami valahol még mindig rossz
Nálam minden rendben működik. (Ha nem tudsz mit kezdeni ezzel a kijelentésemmel, akkor gondold végig, nekünk van-e mit kezdenünk a te kijelentéseddel. Utána pedig másold be a módosított kódodat.)
7

Sovány vagy

Poetro · 2011. Ápr. 12. (K), 12.29
Mivel csak azt nézed mikor NEM vagy elhízva, minden egyéb esetben el vagy hízva. Azaz, ha nem vagy benne a ±10%-ban, akkor el vagy hízva, lehetsz sovány vagy kövér.
8

Ha ezt egytől egyig bemásolod

Numcsi · 2011. Ápr. 12. (K), 13.42
Ha ezt egytől egyig bemásolod egy 11.php álományba
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Súlyos vagy-e?</title>
</head>

<body>

<!--PHP ELEJE-->
<?php 
//Vizsgálat. Megnyomtad-e az Elküld gombot
if(isset($_POST['submit'])) {
	//Vizsgálat. Létezik-e a két érték, ha nem hibaüzenet
	if(isset($_POST['mag']) && isset($_POST['suly'])) {  
    	$mag = $_POST['mag']-100;  
    	$suly = array($_POST['suly']*0.9, $_POST['suly']*1.1);  
    	//A megadott adatok összehasonlítása. 
        //180cm esetében MAX: 88kg, MIN: 72kg esetén megy a Then ágba.
		if($mag > $suly[0] && $mag < $suly[1]) {  
    	    echo "Nem vagy elhizva";  
    	} else {  
       		echo "El vagy hizva";  
   	    }  
	} else {  
    	echo "Hibás adatok!";  
	} 
	//Csak hogy lássuk mit tartalmaznak. Lényegesebb feladata nincs.
	echo ("<br /><br />Tartalom ellenörző: <br />
	  \$_POST['submit'] tartalma: ".$_POST['submit']."<br />
	  \$_POST['mag'] tartalma: ".$_POST['mag']."<br />
	  \$_POST['suly'] tartalma: ".$_POST['suly']."<br /><br />");
}
?>
<!--PHP VÉGE-->

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">  
<input type="text" name="mag" placeholder="Magasság">cm<br />
<input type="text" name="suly" placeholder="Súly">kg<br />
<input type="submit" name="submit" value="Elküld">
</form>
</body>
</html>
<?php echo $_SERVER['PHP_SELF']; ?> Önmagára mutat rá, szóval ilyenkor nem kötelező kimondottan a 11.php névre hagyatkoznod. Ha pl. átnevezed az álományt, ugyanúgy működni fog. Nos lásd a php-t szinkodokkal:
<?php   
//Vizsgálat. Megnyomtad-e az Elküld gombot  
if(isset($_POST['submit'])) {  
    //Vizsgálat. Létezik-e a két érték, ha nem hibaüzenet  
    if(isset($_POST['mag']) && isset($_POST['suly'])) {    
        $mag = $_POST['mag']-100;    
        $suly = array($_POST['suly']*0.9, $_POST['suly']*1.1);    
        //A megadott adatok összehasonlítása.   
        //180cm esetében MAX: 88kg, MIN: 72kg esetén megy a Then ágba.  
        if($mag > $suly[0] && $mag < $suly[1]) {    
            echo "Nem vagy elhizva";    
        } else {    
            echo "El vagy hizva";    
        }    
    } else {    
        echo "Hibás adatok!";    
    }   
    //Csak hogy lássuk mit tartalmaznak. Lényegesebb feladata nincs.  
    echo ("<br /><br />Tartalom ellenörző: <br />  
      \$_POST['submit'] tartalma: ".$_POST['submit']."<br />  
      \$_POST['mag'] tartalma: ".$_POST['mag']."<br />  
      \$_POST['suly'] tartalma: ".$_POST['suly']."<br /><br />");  
}  
?>
Mindössze nem programozási probléma, hanem természeti probléma van vele, mert ha 180cm esetén minimum 72kg esetén megy then ágba. Mi van akkor a 71kg vagy, ekkor False érték keletkezik, és 180cm-71kg az nem elhízott.

HF: Írd meg úgy is, hogy "sovány vagy" érték is kijöjjön. :)
9

Köszönöm szépen!

Moszajszli · 2011. Ápr. 13. (Sze), 14.25
Köszönöm kedves Numcsi!
Rengeteget segítettél, megoldottad az egyik feladatomat :) Értésemre adtad, felettébb érthetően felvázoltad, köszönöm mégegyszer!!!