php kérdéseim...

Sziasztok!

Kicsit rég volt már mikor utoljára php-ztam, akkor sem ilyen mélységben, mint most kellene és hát az az igazság, hogy gondjaim vannak.

Kezdem a legelsővel:
Adott egy form, különféle mezőkkel. Van itt egy radio group, ahol mondjuk a user beállítja a nemét (F/N). Ezt mondjuk nevezem userNeme változónak. Namost, van olyan lehetőség, hogy a formot nem tölti ki teljesen a felhasználó, hanem a későbbiekben visszatérhet és szerkeszthet ezt-azt. A gondom az, hogy a form beküldésekor, mikor ellenőrzöm, hogy megadta-e a nemét, akkor a $_POST['userNeme'] isset értéke hamis, merthát nem töltötte ki. Viszont szeretném azt megoldani, hogy ha nem ad választ, akkor egy default üres sztringet tároljon le adatbázisban.
A user táblában mondjuk a "sex" mező char(1) típusú.

A kód, amivel próbálkozok:

 (isset($_POST['userNeme'])) ? $userNeme = $_POST['userNeme'] : $userNeme = "";

Erre a PHP teletolja az error.log-ot, undefined index 'userNeme' üzenetekkel...

Google-oztam, próbáltam az

 (isset($_POST['userNeme']) && $_POST['userNeme']) ? $userNeme = $_POST['userNeme'] : $userNeme = "";

alakot is, de ugyanaz.

Kérdezném, hogy ez egy 5.2.5-ös windows alatt futtatott php-ban hogyan oldható meg?

Köszönöm előre is a segítséget!
---
A fenti példa a valóstól elvonatkoztatott, nem valami random() társkereső oldalt fejleszte(né)k...

Hozzászólások

én ezt úgy szoktam, hogy


if (array_key_exists("userNeme", $_POST)) {
    // ...
}

Persze lehet trinaryval (?:) is hasonlóképpen.

Próbáld így.
$userNeme = (isset($_POST['userNeme']) ? $_POST['userNeme'] : '');

Ezt igy szoktam:


$ertekek=array_merge(array("egyiknev"=>"egyikertek","masiknev"=>"masikertek"),$_GET,$_POST);
var_dump($ertekek);

Az array_merge oldala.
A tomb asszociativan indexelt elemeit osszerakja egy tombbe, es a kesobb irt tombok felulirjak a korabbiakat utkozes eseten. Szoval ha "egyiknev" nem szerepel sem a $_GET sem a $_POST valtozoban, akkor marad "egyikertek", ha $_GET-ben szerepel, akkor felveszi annak az erteket, ha $_POST-ban szerepel, akkor azet. Ha mindenutt szerepel, akkor is a $_POST-ban szereplo erteket kapja $ertekek["egyiknev"]. Mindig definialt lesz ezaltal. (persze lehet neki NULL, TRUE, FALSE, meg hasonlo erteket is adni default-nak, ha ez szukseges)
A szamokkal indexelt tombelemeket atszamozza, de ez a funkcioja itt nem erdekes (persze esszel kell hasznalni emiatt, de $_GET es $_POST eseten ez nem gond).

Ha nem tombben kered az eredmenyt, akkor hasznalhatsz extract-ot, de mindenkepp csak kotelezo prefix hasznalataval, kulonben sulyos biztonsagi kockazat! (EXTR_PREFIX_ALL)

----
Sooner or later you had to talk, even if it was only because you'd run out of things to throw. - Pratchett
honlap készítés

function getenv($type, $key){
    $type=strtoupper("_$type");
    return isset($$type[$key])?$$type[$key]:NULL;
}

A fenti kód jó mindenféle $_ tömbre (GET, POST, COOKIE, FILE, ENV stb).

Én nemes egyszerűséggel így csinálnám:

(@isset($_POST['userNeme'])) ? $userNeme = $_POST['userNeme'] : $userNeme = "";

Szóval az isset fv. elé egy @ jel. Mert amúgy teljesen jó a kód, csak ha egy tömbben nem létezik az adott kulcs, az egy notice-t (vagy warningot?) generál. A @ ezt megakadályozza.

Sziasztok!

Eljött az idő, a rendszer tesztelésre átadva és rögvest az első db query-nél a hibaüzenet: failed. :P

Sajnos fejlesztésnél elkövettem azt a hibát, hogy 2005-ös sqlexpresst használtam, a megrendelő viszont még 2000-est használhat.
Namost hála Microsoftnak, a BIT típusú mezők értéke a 2000-es 0/1-ről 2005-re False/True-ra változott... Így persze, hogy failed.

Szeretném kérdezni, hogy php-ban van-e lehetőség arra, hogy lekérdezzem a háttérben szolgáló sql szerver verzióját? Természetesen mindenféle 3rd party alkalmazás (FreeTDS, ODBC, ADODB, stb.) használata nélkül?

--
A gyors gondolat többet ér, mint a gyors mozdulat.