Jump to content
GSForum - Segélyvonal

PHP kérdésem van


Recommended Posts

Posted

A $tipp csak akkor lesz definiálva, ha a php.ini-ben a register globals on-ra van álítva, de ez biztonsági kockázat. Helyette használd inkább a $_POST['tipp']-et.

Posted

Jó, akkor majd megpróbálom otthon.

Posted

A register globals megint valami olyan, aminek a használata évek óta erősen ellenjavalt, és a 6-os PHP-ban már benne sem lesz, mint lehetőség.

Posted

Én még csak most tanulom a négyet. És nem is értem a felét annak amit mondotok. Hova kell tenni a $_POST['tipp']-et? És miért?

Így lenne jó?

<?php
$ksz='42';
$uzen="";
if(! isset($_POST['tipp']))
{
$uzen="Üdv a számkitalálos játékban";
}
elseif ($tipp>$ksz)
{
$uzen="A(z) $tipp túl nagy, próbálj kisebbet";
}
elseif ($tipp<$ksz)
{
$uzen="A(z) $tipp túl kicsi, próbálj nagyobbat";
}
else
{
$uzen="Telitalálat";
}
?>
<html>
<head>
<title>PHP</title>
</head>
<body>
<h2><?php print $uzen ?></h2>
<form action="<?php $PHP_SELF ?>" method="Post">
Ide írd a tipped:<input type="text" name="tipp">
</form>
</body>
</html>

Posted
<?php
$ksz='42';
$uzen="";
if(!array_key_exists('tipp',$_POST))
{
$uzen="Üdv a számkitalálos játékban";
}
elseif ($_POST['tipp']>$ksz)
{
$uzen="A(z) $_POST['tipp'] túl nagy, próbálj kisebbet";
}
elseif ($_POST['tipp']<$ksz)
{
$uzen="A(z) $_POST['tipp'] túl kicsi, próbálj nagyobbat";
}
else
{
$uzen="Telitalálat";
}
?>
<html>
<head>
<title>PHP</title>
</head>
<body>
<h2><?php print $uzen ?></h2>
<form action="<?php $PHP_SELF ?>" method="Post">
Ide írd a tipped:<input type="text" name="tipp">
</form>
</body>
</html>

Posted

arpsoft, csak azt nem értem, miért nem az $GLOBALS-t ajánlottad. :hááát:

 

Nyilvánvaló, hogy wemen kezdő, ami nem baj, mert őt még nem fertőzték meg a rossz szokások. Előbb ajánljunk neki jó irodalmat, mielőtt pl. a php.ini-hez nyúlna.

@wemen: ha angolul tudsz, kiváló ingyenes is van (PDF-et nyit meg, aminek a forrása ez - teljesen legális.) Első 25-50 oldal, és sok minden világos lesz... [A könyv egyébként kb. 4-5000 HUF-ért (postaköltségestűl) az eBay-en is megtalálható valahol.]

Posted

$_GLOBALS-t? Soha életemben nem nyúltam még a $_GLOBALS-hoz egyetlen programomban sem. :) Ez nem biztos, hogy jó, csak úgy mondom...

 

Ha okvetlenül bonyolítani akarjuk a problémát -- arpsoft: a !isset is tökéletesen megfelel ebben az esetben --, esetleg a $_REQUEST-et lehetne ajánlani.

 

wemen, te meg ne őrüljél meg! Egy programozási nyelv nem olyan, hogy egymásra épül, ezért az 1-től kell kezdeni és a 6-ig egyesével haladni. Mindig az épp használatban levő, legmodernebb változatot kell tanulni. Ez alól kivétel lehet, ha nincs ráhatásod, hogy milyen verziójú PHP fusson a szerveren, és esetleg ott még egy régebbi van fent. De ebben az esetben sem a hülyeségeket kell belőle megtanulni (register_globals), hanem a fontos, általánosan használható dolgokat. Például az értékadás ilyen. Általában első lecke. ;)

 

A fenti példád majdnem jó, csak ezzel még mindig nem adtál értéket a $tipp változónak. Az első vizsgálat már le fog futni, de mivel a $tipp-nek nincs értéke, az mindig kisebb lesz, mint 42, ezért mindig abba az ágba fog kerülni a végrehajtás. Szerintem megoldod ügyesen.

Posted

Most lehet, hogy nagy hülyeséget kérdezek, de nem értem miért fontos értéket adni a $tipp-nek. Ha isset-tel megvizsgálja az miért nem jó?

Posted

Mert az elseif ágakban már megint a $tippet vizsgálja. ;) Egyébként nem okvetlenül kéne neki értéket adni, arpsoft például folyamatosan a $_POST['tipp']-pel hasonlítgat, az is jó.

Posted

Ja, azt hiszem leesett. Az úgy akkor pl. jó lenne, ha az isset vizsgálat után azt mondanánk, hogy $tipp = $_POST['tipp']? És akkor nyilván ez után lehetne vizsgálni az értékét.

Posted
Az úgy akkor pl. jó lenne, ha az isset vizsgálat után azt mondanánk, hogy $tipp = $_POST['tipp']?

Szerintem ezt a program elsõ sorába kellene beírni.

Posted

A lényeg, hogy az értékének vizsgálata elõtt. Csak én elfigyelmetlenkedtem a kódot, és azért nem értettem, hogy miért nem jó wemen megoldása.

 

Viszont isset szerintem mindenképpen szükséges, mert ha semmit nem írt be a felhasználó, akkor vaj' milyen értéke van a $_POST['tipp']-nek? Lehet, hogy üres string, de elméletben ilyenkor nem definiált szokott lenni az érték, tehát szerintem kell a vizsgálat.

Posted
Szerintem ezt a program első sorába kellene beírni.

És ha nincs tipp kulcsa a $_POST tömbnek? (Ja, hogy olvassam el, mit válaszolt rá Calyd, mielőtt megírom ugyanazt.) Egyébként nemcsak az a gáz, hogy nincs értéke, hanem az, hogy erről a PHP gyönyörűséges hibaüzenetben (pontosabban Notice-ban) értesít, és az nem kifogás, hogy nálam ki vannak kapcsolva a PHP hibaüzenetek. Attól te még nem létező tömbértékre hivatkoztál = bug. ;)

Posted
Viszont isset szerintem mindenképpen szükséges[...]
Nem.

 

@wemen:

Elveiben volt hibás az egész. Így jó: (link: http://jump.arpadh.hu/shared/pcw/tipp.php)

 

<?php
header("Content-Type: text/html; charset=iso-8859-2");

$ksz='42';
$uzen="Üdv a számkitalálós játékban";
if(! empty($_POST['tipp'])) {
$tipp = $_POST['tipp'];
    if ($tipp>$ksz) {
    $uzen="A(z) $tipp túl nagy, próbálj kisebbet";
    } elseif ($tipp<$ksz) {
    $uzen="A(z) $tipp túl kicsi, próbálj nagyobbat";
    } else {
    $uzen="Telitalálat";
    }
}

?>

<!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>
<title>PHP</title>
</head>
<body>
<h2><?php print $uzen ?></h2>
<form name="tippel" action="<?php $_SERVER['PHP_SELF']; ?>" method="post" >
Ide írd a tipped:<input type="text" name="tipp"/>
</form>
</body>
</html>

 

Magyrázat:

 

0. Értékadás az üzenetnek már az elején, úgyis változik majd.

1. Magyar karaktereket használsz, meg kell adnod a fejlécben! Próbáld ki a header sor nélkül, lásd meg miért!

2. Az $_POST-nak üres string esetén is van értéke, azt viszgáld, hogy nem üres-e (empty függvény).

3. Két egymásba ágyazott feltételre van szükség. Az egyik azt vizsgálja, hogy van-e értéke az $_POST-nak, a másik megadja a válaszokat az értékekre.

4. A változó helyes használata: $_SERVER['PHP_SELF'] és nem ennek tetszőleges variánsai... (l. http://www.php.net/ , mondjuk...)

5. A többi csak formalitás. Alternatíva $_POST helyett $_REQUEST használata, ahogy Balázs írta.

 

Következő feladat: most mondjuk finomíts, hogy csak számot lehessen beírni, csak kétjegyűt, majd írasd ki a számot betűvel. ;)

Posted

Tessék, átírtam az isset-et empty-re:

 

IPB kép

 

 

2. A $_POST-nak üres string esetén is van értéke, azt vizsgáld, hogy nem üres-e (empty függvény).

Szóval a $_POST tömbnek lehet, hogy van, de ha olyan kulcsára hivatkozol, ami nincs neki, az nem helyes.

 

A PCW Shop szerverén a PHP hibaüzenetek egy log fájlba vannak irányítva. A rendszergéza eleinte úgy állította be, hogy csak a tényleges hibákat tolja bele. Pár hete megváltoztatta, most már kapom a figyelmeztetéseket (Notice) is. Egy nap alatt több mint 10 megás lett a log fájl. Kb. egy hetem ment rá, hogy kiganézzam, és a legtöbb probléma a $_GET és $_POST és egyéb tömbök kulcsainak nagyvonalú kezelésével volt.

 

wemen eredeti kódjában elég volna az !isset feltétel else ágát átírni, úgyhogy nem mondanám, hogy teljesen rossz. De általában én is úgy írom meg ezeket a feltételeket, hogy az if ágba kerül akkor, ha minden ok, és az else ágba, ha hibás.

 

Kiegyezhetünk ebben? ;)

 

if ( isset($_POST['tipp']) && !empty($_POST['tipp']) ) {
    ...
} else {
    ....
}

Posted

Hát persze. Az a vicces, hogy én mindig így írom, de most - amiatt, hogy ne bonyolítsam a dolgot - az isset-et kihagytam. A Notice se nem kritikus hiba, de még csak figyelmeztetés (warning) sem. Tény, hogy debugnál sokat segít, ha be van kapcsolva. Az is tény, hogy már az alapoknál úgy tanultam meg, ahogy fentebb leírtad, és "hivatalosan" is az a helyes megközelítés. Wemen kedvéért tértem el tőle, mert sikerült az előbbiekben kissé összekavarnunk.

A 2. pontban pedig arra gondoltam, hogy kizárom a "csalót", aki kitöltés nélkül küldi el. Ekkor ugyanis már van "értéke". ;)

Posted

Szerintem épp az õ kedvéért nem kéne eltérni tõle. :) Ha most tanulja a dolgot, akkor tanulja meg a szép és elvileg is helyes megoldást. :)

Posted

Ezért ajánlottam a fenti könyveket és a sok ingyenes, Neten elérhető egyéb dokumentációt. Itt nem tanórát tartunk - ahogy a fenti figyelmeztetés is írja -, hanem segítünk, ha valaki nem boldogul. Ki több, ki kevesebb magyarázattal, belátása szerint.

Posted

Köszi hogy ilyennyire kitértetel az én kis kínlódásomra. Amúgy még csak most fog megjelenni a PHP6 és csak az 5 van még. Ezt biztosra tudom, mivel utánanéztem valamikor. Nem olyan rég. Megnézem a kódot amiket kaptam, ez biztos. És nem hiszem azt hogy ez egy iskola lenne meg minden, de kérdésem volt a kód hibáját illetően és kaptam rá igen sok bonyolult választ. Kösz mindenkinek.

Amúgy meg h.arpad kódja müködik tökéletesen

Posted

Ennek viszonylag egyszerû utánanézni. :)www.php.net --> legfrissebb letölthetõ verzió: 5.2.9.

 

Amúgy meg h.arpad kódja mûködik tökéletesen

És érted is? Mert anélkül nem sokat ér. ;)

Posted

Ja, és utána van 3 feladat is, amit kiosztottam, hogy legyen kihívás is benne. :) (Ez azt jelenti, hogy kellő érdeklődés, azaz próbálkozás esetén segítek benne, de gondolom a többiek is így vannak.) A verziószámokat meg hagyjuk már, ilyen egyszerű, rövid kis kódoknál ez irreleváns.

Posted

a doctype-ot a header()-t és az empty()-t nem nagyon. Tom hogy a doctype meghatározza a dokumentum programozási olvasását (valami ilyesmi). headre() pedig a php fejléce.

Ennek a mondatnak fuss neki még egyszer, légy szíves mert nem érthető!

 

Tom egész biztos nem határoz meg semmit, lévén egy idegen férfinév. - Balázs

  • 2 weeks later...
Posted

Légyszíves ne hurrogjatok le a kérdés miatt, mert még nem tanultam PHP-t. Most csinálok egy oldalt és azt kell eldöntenem hogy a szabványosítás HTML, vagy XHTML legyen. Ez ezért illik ebbe a topikba, mert készõbb ezt a kódot akarom felhasználni PHP készítéshez (legalább is nekem azt mondták, hogy fel lehet majd használni). A kérdés igen egyszerû. PHP tud HTML-t is generálni, vagy csak XHTML-t. Mert eddig akárhány PHP oldalt néztem mind XHTML-t használ. Ha nem muszály XHTML-t használni akkor nem fogok, mert sok a hibalehetõség amirõl itt olvastam (ennek is a lap alján van a lényeg). Ez egy kicsit elrémisztett a HTML-rõl való átállásról, eléggé máshogy kezeli a JavaScriptet, CSS-t, stb. és több a hátránya mint az elõnye.

Posted

Megint jöttem egy igencsak bugyuta dologgal. Már bonyolultabb a helyzet. Ebben a kódban szerintetek mi a hiba? mert én egyszerüen nem jövök rá. global()-t kéne használnom, vagy mi?

<?php
function ossze($_POST['a'],$_POST['b'])
{
$e1=$_POST['a']+$_POST['b'];
return $e1;
}
function kiv($_POST['c'],$_POST['d'])
{
$e2=$_POST['c']-$_POST['d'];
return $e2;
}
function szor($_POST['e'],$_POST['f'])
{
$e3=$_POST['e']*$_POST['f'];
return $e3;
}
function oszt($_POST['g'],$_POST['h'])
{
$e4=$_POST['g']/$_POST['h'];
return $e4;
}
?>
<!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>
<title>PHP számológép</title>
</head>
<body>
<form action="<? print $PHP_SELF ?>" method="POST">
<? print ossze(<input type='text' name='a'>,."+".<input type='text' name='b'>)."<br>";
print kiv(<input type='text' name='c'>,."-".<input type='text' name='d'>)"<br>";
print szor(<input type='text' name='e'>,."x".<input type='text' name='f'>)"<br>";
print oszt(<input type='text' name='g'>,."/".<input type='text' name='h'>)"<br>"; ?>
</body>
</html>

Posted
A kérdés igen egyszerű. PHP tud HTML-t is generálni, vagy csak XHTML-t.

A PHP mindent ki tud íratni az oldalra, akár sima szöveget is. Képzeld el, hogy olyan, mint mondjuk a JavaScript, csak éppen a szerver futtatja és nem a böngésző, tehát te a böngészőben már csak a kód futásának az eredményét látod. Ami bármi lehet...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...