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:
  1. <form action="11.php" method="POST">  
  2. <input type="text" name="mag" placeholder="Magasság">cm  
  3. <input type="text" name="suly" placeholder="Súly">kg  
  4. <input type="submit" value="Elküld">  
és a 11.php tartalma:
  1. <?php   
  2.   
  3. if (( isset( $_POST['mag'])-100 > isset($_POST['suly'])*0.9) && (isset( $_POST['mag'])-100 < isset($_POST['suly'])*1.1 ) )  
  4.   {print "Nem vagy elhízva!";}  
  5. else   
  6.   {print "El vagy hízva!";}  
  7.     
  8. ?>  
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)
  1. if(isset($_POST['mag']) && isset($_POST['suly'])) {  
  2.     $mag = $_POST['mag']-100;  
  3.     $suly = array($_POST['suly']*0.9, $_POST['suly']*1.1);  
  4.     if($mag > $suly[0] && $mag < $suly[1]) {  
  5.         echo "Nem vagy elhizva";  
  6.     } else {  
  7.         echo "El vagy hizva";  
  8.     }  
  9. else {  
  10.     echo "Hibás adatok!";  
  11. }  
É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
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  5. <title>Súlyos vagy-e?</title>  
  6. </head>  
  7.   
  8. <body>  
  9.   
  10. <!--PHP ELEJE-->  
  11. <?php   
  12. //Vizsgálat. Megnyomtad-e az Elküld gombot  
  13. if(isset($_POST['submit'])) {  
  14.     //Vizsgálat. Létezik-e a két érték, ha nem hibaüzenet  
  15.     if(isset($_POST['mag']) && isset($_POST['suly'])) {    
  16.         $mag = $_POST['mag']-100;    
  17.         $suly = array($_POST['suly']*0.9, $_POST['suly']*1.1);    
  18.         //A megadott adatok összehasonlítása.   
  19.         //180cm esetében MAX: 88kg, MIN: 72kg esetén megy a Then ágba.  
  20.         if($mag > $suly[0] && $mag < $suly[1]) {    
  21.             echo "Nem vagy elhizva";    
  22.         } else {    
  23.             echo "El vagy hizva";    
  24.         }    
  25.     } else {    
  26.         echo "Hibás adatok!";    
  27.     }   
  28.     //Csak hogy lássuk mit tartalmaznak. Lényegesebb feladata nincs.  
  29.     echo ("<br /><br />Tartalom ellenörző: <br />  
  30.       \$_POST['submit'] tartalma: ".$_POST['submit']."<br />  
  31.       \$_POST['mag'] tartalma: ".$_POST['mag']."<br />  
  32.       \$_POST['suly'] tartalma: ".$_POST['suly']."<br /><br />");  
  33. }  
  34. ?>  
  35. <!--PHP VÉGE-->  
  36.   
  37. <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">    
  38. <input type="text" name="mag" placeholder="Magasság">cm<br />  
  39. <input type="text" name="suly" placeholder="Súly">kg<br />  
  40. <input type="submit" name="submit" value="Elküld">  
  41. </form>  
  42. </body>  
  43. </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:
  1. <?php     
  2. //Vizsgálat. Megnyomtad-e az Elküld gombot    
  3. if(isset($_POST['submit'])) {    
  4.     //Vizsgálat. Létezik-e a két érték, ha nem hibaüzenet    
  5.     if(isset($_POST['mag']) && isset($_POST['suly'])) {      
  6.         $mag = $_POST['mag']-100;      
  7.         $suly = array($_POST['suly']*0.9, $_POST['suly']*1.1);      
  8.         //A megadott adatok összehasonlítása.     
  9.         //180cm esetében MAX: 88kg, MIN: 72kg esetén megy a Then ágba.    
  10.         if($mag > $suly[0] && $mag < $suly[1]) {      
  11.             echo "Nem vagy elhizva";      
  12.         } else {      
  13.             echo "El vagy hizva";      
  14.         }      
  15.     } else {      
  16.         echo "Hibás adatok!";      
  17.     }     
  18.     //Csak hogy lássuk mit tartalmaznak. Lényegesebb feladata nincs.    
  19.     echo ("<br /><br />Tartalom ellenörző: <br />    
  20.       \$_POST['submit'] tartalma: ".$_POST['submit']."<br />    
  21.       \$_POST['mag'] tartalma: ".$_POST['mag']."<br />    
  22.       \$_POST['suly'] tartalma: ".$_POST['suly']."<br /><br />");    
  23. }    
  24. ?>  
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!!!