Keresés

Aktív témák

  • fordfairlane

    veterán

    válasz Bici #1480 üzenetére

    Mutatok egy egymezős skeleton modellt, én így csinálnám:

    <?
    if($_SERVER["REQUEST_METHOD"] == "POST") {
    if(!$_POST["nev"]) {
    $error["nev"] = "A név üres";
    } else {
    $res = mysql_query('SELECT COUNT(*) FROM felhasznalok WHERE nev="'.mysql_escape_string($_POST["nev"]).'"');
    if($res && mysql_num_rows($res)) {
    list($no) = mysql_fetch_row($res);
    if($no) $error["nev"] = "Ez a felhasználónév már foglalt!";
    }
    }
    // további ellenőrzések

    if(!$error) {
    $query = 'INSERT INTO felhasznalok SET ';
    $query .= 'nev="'.mysql_escape_string($_POST["nev"].'"';
    // további mezők queryhez fűzése

    mysql_query($query);
    header("Location:".$_SERVER["SCRIPT_NAME"]."?ok=1");
    exit;
    // ez az átirányítás azért kell, hogyha az oké üzenetre refresht nyom,
    // ne kapjon hibaüzenetet, miszerint ez a felhasználónév már foglalt.
    // felhasználók lassú reagálású oldalnál hajlamosak refreshelni
    }
    } elseif($_GET["ok"]) {
    include("fejlec.php");
    ?><p>Minden oké</p><?
    include("lablec.php");
    } else {
    include("fejlec.php");
    ?>
    <form method="post">
    <input type="text" name="nev" value="<?=htmlspecialchars($_POST["nev"])?>" /> <?=$error["nev"]?><br />
    <input type="submit" value="Regisztráció" />
    </form>
    <?
    include("lablec.php");
    }
    ?>

    Remélem nem maradt ki semmi, nem próbáltam ki. 19 mezőnél persze nem biztos, hogy célszerű így ömlesztve, de a vezérlési szerkezetet ebben a formában szoktam csinálni. Így egy oldalban benne van:

    1. form kirakása, hiba esetén a mező tartalma megmarad, és a mező mellett megjelenik a hibaüzenet.
    2. Ha minden oké, kirakja az oké szöveget, meg ami kell.
    3. refresh esetén nem produkál mást, mint első betöltődésnél, ez a sikeres submit után okozhat problémát, a felhasználó megzavarodhat a nem várt üzenetektől.

    Fejlécet és láblécet külön fájlból szedi be, ez ízlés szerint változtatható (include("fejlec.php") és include("lablec.php"));

  • cucka

    addikt

    válasz Bici #1480 üzenetére

    Azért ugyanoda, hogy pl. a reg.php újratöltésekor (F5) ne regeljen mégegyet, és ne is fárassza a felhasználót azzal a szöveggel, hogy már foglalt a név, inkább legyen üres a sok mező
    Session-ben eltárolod, ha sikerült a regisztráció. A fárasztó üzenetek csak akkor jelennek meg, ha a session-ben nincs meg a kérdéses érték.

    Ott tartok, hogy megy a reg, POST-al átadom a cuccot a ment.php-nak, és ha valami gebasz van, akkor a ment.php beinclude-olja a form-ot tartalmazó php fájlt (ami őt meghívta) és egy globális változó segítségével visszaadom neki, hogy mely hibaüzeneteket kell kiírnia.
    A reg.php adatait lehetőleg a reg.php-val ellenőrizd. Ha az ellenőrzés sikerült, akkor include-al a "sasold a mailed" oldalt rántod be, különben a regisztrációs űrlapot.

    Amiben viszont most elakadtam, hogy hogy tudom az ellenőrzés után visszaírni a mezők adatait a helyükre
    Mezők kiírásánál megnézed, ott van-e a POST-ban a korábbi érték, ha igen, akkor beírod az értéket az űrlap elem megfelelő részébe. Ha bonyolult a navigáció (pl. több oldal megtekintése után is visszakeveredhetsz az űrlapos oldalra, és akkor is ott kell legyen az utolsó állapot), akkor pedig az elpost-olt adatokat rakd le a session-be, az űrlapod pedig mazsolázza ki onnan a rá vonatkozó adatokat.

    Lehetőleg úgy akarom megoldani, hogy fürge legyen az oldal, és ne terhelje a szervert a kelleténél jobban.
    Ezen egyelőre ne görcsölj szerintem, a fentiek alap műveletek, szerver terhelésük konvergál a nullához.

    Ja, és alap jótanács - a session-t lehet bátran használni, sok dolgot könnyebb vele megoldani, mint mindenféle trükközéssel.

Aktív témák